Deprecate the master-with-bazel branch

After some infrastructure changes, this branch has not been updated
since April.

Instead, use the `main` branch, which now itself has Bazel build.

Change-Id: I26d1caa249e2a1d82b4f2c610b837467a517ba47
Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/80068
Reviewed-by: Adam Langley <agl@google.com>
diff --git a/BUILD b/BUILD
deleted file mode 100644
index e040553..0000000
--- a/BUILD
+++ /dev/null
@@ -1,37 +0,0 @@
-# Copyright 2016 The BoringSSL Authors
-#
-# 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
-#
-#     https://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 BUILD file is used as part of the synthesized "-with-bazel" branches. We
-# are in the process of transitioning to keeping all builds at tip-of-tree
-# directly, see https://crbug.com/boringssl/542. This means, in the synthesized
-# branch, "src" now reads as a separate Bazel package. Rather than suppress
-# those build files, alias the targets.
-
-alias(
-    name = "crypto",
-    actual = "//src:crypto",
-    visibility = ["//visibility:public"],
-)
-
-alias(
-    name = "ssl",
-    actual = "//src:ssl",
-    visibility = ["//visibility:public"],
-)
-
-alias(
-    name = "bssl",
-    actual = "//src:bssl",
-    visibility = ["//visibility:public"],
-)
diff --git a/BUILD.generated.bzl b/BUILD.generated.bzl
deleted file mode 100644
index f3a0f01..0000000
--- a/BUILD.generated.bzl
+++ /dev/null
@@ -1,861 +0,0 @@
-# This file is created by generate_build_files.py. Do not edit manually.
-
-ssl_headers = [
-    "src/include/openssl/dtls1.h",
-    "src/include/openssl/srtp.h",
-    "src/include/openssl/ssl.h",
-    "src/include/openssl/ssl3.h",
-    "src/include/openssl/tls1.h",
-]
-
-fips_fragments = [
-    "src/crypto/fipsmodule/aes/aes.cc.inc",
-    "src/crypto/fipsmodule/aes/aes_nohw.cc.inc",
-    "src/crypto/fipsmodule/aes/cbc.cc.inc",
-    "src/crypto/fipsmodule/aes/cfb.cc.inc",
-    "src/crypto/fipsmodule/aes/ctr.cc.inc",
-    "src/crypto/fipsmodule/aes/gcm.cc.inc",
-    "src/crypto/fipsmodule/aes/gcm_nohw.cc.inc",
-    "src/crypto/fipsmodule/aes/key_wrap.cc.inc",
-    "src/crypto/fipsmodule/aes/mode_wrappers.cc.inc",
-    "src/crypto/fipsmodule/aes/ofb.cc.inc",
-    "src/crypto/fipsmodule/bn/add.cc.inc",
-    "src/crypto/fipsmodule/bn/asm/x86_64-gcc.cc.inc",
-    "src/crypto/fipsmodule/bn/bn.cc.inc",
-    "src/crypto/fipsmodule/bn/bytes.cc.inc",
-    "src/crypto/fipsmodule/bn/cmp.cc.inc",
-    "src/crypto/fipsmodule/bn/ctx.cc.inc",
-    "src/crypto/fipsmodule/bn/div.cc.inc",
-    "src/crypto/fipsmodule/bn/div_extra.cc.inc",
-    "src/crypto/fipsmodule/bn/exponentiation.cc.inc",
-    "src/crypto/fipsmodule/bn/gcd.cc.inc",
-    "src/crypto/fipsmodule/bn/gcd_extra.cc.inc",
-    "src/crypto/fipsmodule/bn/generic.cc.inc",
-    "src/crypto/fipsmodule/bn/jacobi.cc.inc",
-    "src/crypto/fipsmodule/bn/montgomery.cc.inc",
-    "src/crypto/fipsmodule/bn/montgomery_inv.cc.inc",
-    "src/crypto/fipsmodule/bn/mul.cc.inc",
-    "src/crypto/fipsmodule/bn/prime.cc.inc",
-    "src/crypto/fipsmodule/bn/random.cc.inc",
-    "src/crypto/fipsmodule/bn/rsaz_exp.cc.inc",
-    "src/crypto/fipsmodule/bn/shift.cc.inc",
-    "src/crypto/fipsmodule/bn/sqrt.cc.inc",
-    "src/crypto/fipsmodule/cipher/aead.cc.inc",
-    "src/crypto/fipsmodule/cipher/cipher.cc.inc",
-    "src/crypto/fipsmodule/cipher/e_aes.cc.inc",
-    "src/crypto/fipsmodule/cipher/e_aesccm.cc.inc",
-    "src/crypto/fipsmodule/cmac/cmac.cc.inc",
-    "src/crypto/fipsmodule/dh/check.cc.inc",
-    "src/crypto/fipsmodule/dh/dh.cc.inc",
-    "src/crypto/fipsmodule/digest/digest.cc.inc",
-    "src/crypto/fipsmodule/digest/digests.cc.inc",
-    "src/crypto/fipsmodule/digestsign/digestsign.cc.inc",
-    "src/crypto/fipsmodule/ec/ec.cc.inc",
-    "src/crypto/fipsmodule/ec/ec_key.cc.inc",
-    "src/crypto/fipsmodule/ec/ec_montgomery.cc.inc",
-    "src/crypto/fipsmodule/ec/felem.cc.inc",
-    "src/crypto/fipsmodule/ec/oct.cc.inc",
-    "src/crypto/fipsmodule/ec/p224-64.cc.inc",
-    "src/crypto/fipsmodule/ec/p256-nistz.cc.inc",
-    "src/crypto/fipsmodule/ec/p256.cc.inc",
-    "src/crypto/fipsmodule/ec/scalar.cc.inc",
-    "src/crypto/fipsmodule/ec/simple.cc.inc",
-    "src/crypto/fipsmodule/ec/simple_mul.cc.inc",
-    "src/crypto/fipsmodule/ec/util.cc.inc",
-    "src/crypto/fipsmodule/ec/wnaf.cc.inc",
-    "src/crypto/fipsmodule/ecdh/ecdh.cc.inc",
-    "src/crypto/fipsmodule/ecdsa/ecdsa.cc.inc",
-    "src/crypto/fipsmodule/hkdf/hkdf.cc.inc",
-    "src/crypto/fipsmodule/hmac/hmac.cc.inc",
-    "src/crypto/fipsmodule/keccak/keccak.cc.inc",
-    "src/crypto/fipsmodule/mldsa/fips_known_values.inc",
-    "src/crypto/fipsmodule/mldsa/mldsa.cc.inc",
-    "src/crypto/fipsmodule/mlkem/fips_known_values.inc",
-    "src/crypto/fipsmodule/mlkem/mlkem.cc.inc",
-    "src/crypto/fipsmodule/rand/ctrdrbg.cc.inc",
-    "src/crypto/fipsmodule/rand/rand.cc.inc",
-    "src/crypto/fipsmodule/rsa/blinding.cc.inc",
-    "src/crypto/fipsmodule/rsa/padding.cc.inc",
-    "src/crypto/fipsmodule/rsa/rsa.cc.inc",
-    "src/crypto/fipsmodule/rsa/rsa_impl.cc.inc",
-    "src/crypto/fipsmodule/self_check/fips.cc.inc",
-    "src/crypto/fipsmodule/self_check/self_check.cc.inc",
-    "src/crypto/fipsmodule/service_indicator/service_indicator.cc.inc",
-    "src/crypto/fipsmodule/sha/sha1.cc.inc",
-    "src/crypto/fipsmodule/sha/sha256.cc.inc",
-    "src/crypto/fipsmodule/sha/sha512.cc.inc",
-    "src/crypto/fipsmodule/slhdsa/fips_known_values.inc",
-    "src/crypto/fipsmodule/slhdsa/fors.cc.inc",
-    "src/crypto/fipsmodule/slhdsa/merkle.cc.inc",
-    "src/crypto/fipsmodule/slhdsa/slhdsa.cc.inc",
-    "src/crypto/fipsmodule/slhdsa/thash.cc.inc",
-    "src/crypto/fipsmodule/slhdsa/wots.cc.inc",
-    "src/crypto/fipsmodule/tls/kdf.cc.inc",
-]
-
-ssl_internal_headers = [
-    "src/ssl/internal.h",
-]
-
-ssl_sources = [
-    "src/ssl/bio_ssl.cc",
-    "src/ssl/d1_both.cc",
-    "src/ssl/d1_lib.cc",
-    "src/ssl/d1_pkt.cc",
-    "src/ssl/d1_srtp.cc",
-    "src/ssl/dtls_method.cc",
-    "src/ssl/dtls_record.cc",
-    "src/ssl/encrypted_client_hello.cc",
-    "src/ssl/extensions.cc",
-    "src/ssl/handoff.cc",
-    "src/ssl/handshake.cc",
-    "src/ssl/handshake_client.cc",
-    "src/ssl/handshake_server.cc",
-    "src/ssl/s3_both.cc",
-    "src/ssl/s3_lib.cc",
-    "src/ssl/s3_pkt.cc",
-    "src/ssl/ssl_aead_ctx.cc",
-    "src/ssl/ssl_asn1.cc",
-    "src/ssl/ssl_buffer.cc",
-    "src/ssl/ssl_cert.cc",
-    "src/ssl/ssl_cipher.cc",
-    "src/ssl/ssl_credential.cc",
-    "src/ssl/ssl_file.cc",
-    "src/ssl/ssl_key_share.cc",
-    "src/ssl/ssl_lib.cc",
-    "src/ssl/ssl_privkey.cc",
-    "src/ssl/ssl_session.cc",
-    "src/ssl/ssl_stat.cc",
-    "src/ssl/ssl_transcript.cc",
-    "src/ssl/ssl_versions.cc",
-    "src/ssl/ssl_x509.cc",
-    "src/ssl/t1_enc.cc",
-    "src/ssl/tls13_both.cc",
-    "src/ssl/tls13_client.cc",
-    "src/ssl/tls13_enc.cc",
-    "src/ssl/tls13_server.cc",
-    "src/ssl/tls_method.cc",
-    "src/ssl/tls_record.cc",
-]
-
-crypto_headers = [
-    "src/include/openssl/aead.h",
-    "src/include/openssl/aes.h",
-    "src/include/openssl/arm_arch.h",
-    "src/include/openssl/asm_base.h",
-    "src/include/openssl/asn1.h",
-    "src/include/openssl/asn1_mac.h",
-    "src/include/openssl/asn1t.h",
-    "src/include/openssl/base.h",
-    "src/include/openssl/base64.h",
-    "src/include/openssl/bcm_public.h",
-    "src/include/openssl/bio.h",
-    "src/include/openssl/blake2.h",
-    "src/include/openssl/blowfish.h",
-    "src/include/openssl/bn.h",
-    "src/include/openssl/buf.h",
-    "src/include/openssl/buffer.h",
-    "src/include/openssl/bytestring.h",
-    "src/include/openssl/cast.h",
-    "src/include/openssl/chacha.h",
-    "src/include/openssl/cipher.h",
-    "src/include/openssl/cmac.h",
-    "src/include/openssl/cms.h",
-    "src/include/openssl/conf.h",
-    "src/include/openssl/cpu.h",
-    "src/include/openssl/crypto.h",
-    "src/include/openssl/ctrdrbg.h",
-    "src/include/openssl/curve25519.h",
-    "src/include/openssl/des.h",
-    "src/include/openssl/dh.h",
-    "src/include/openssl/digest.h",
-    "src/include/openssl/dsa.h",
-    "src/include/openssl/e_os2.h",
-    "src/include/openssl/ec.h",
-    "src/include/openssl/ec_key.h",
-    "src/include/openssl/ecdh.h",
-    "src/include/openssl/ecdsa.h",
-    "src/include/openssl/engine.h",
-    "src/include/openssl/err.h",
-    "src/include/openssl/evp.h",
-    "src/include/openssl/evp_errors.h",
-    "src/include/openssl/ex_data.h",
-    "src/include/openssl/experimental/kyber.h",
-    "src/include/openssl/hkdf.h",
-    "src/include/openssl/hmac.h",
-    "src/include/openssl/hpke.h",
-    "src/include/openssl/hrss.h",
-    "src/include/openssl/is_boringssl.h",
-    "src/include/openssl/kdf.h",
-    "src/include/openssl/lhash.h",
-    "src/include/openssl/md4.h",
-    "src/include/openssl/md5.h",
-    "src/include/openssl/mem.h",
-    "src/include/openssl/mldsa.h",
-    "src/include/openssl/mlkem.h",
-    "src/include/openssl/nid.h",
-    "src/include/openssl/obj.h",
-    "src/include/openssl/obj_mac.h",
-    "src/include/openssl/objects.h",
-    "src/include/openssl/opensslconf.h",
-    "src/include/openssl/opensslv.h",
-    "src/include/openssl/ossl_typ.h",
-    "src/include/openssl/pem.h",
-    "src/include/openssl/pkcs12.h",
-    "src/include/openssl/pkcs7.h",
-    "src/include/openssl/pkcs8.h",
-    "src/include/openssl/poly1305.h",
-    "src/include/openssl/pool.h",
-    "src/include/openssl/posix_time.h",
-    "src/include/openssl/rand.h",
-    "src/include/openssl/rc4.h",
-    "src/include/openssl/ripemd.h",
-    "src/include/openssl/rsa.h",
-    "src/include/openssl/safestack.h",
-    "src/include/openssl/service_indicator.h",
-    "src/include/openssl/sha.h",
-    "src/include/openssl/siphash.h",
-    "src/include/openssl/slhdsa.h",
-    "src/include/openssl/span.h",
-    "src/include/openssl/stack.h",
-    "src/include/openssl/target.h",
-    "src/include/openssl/thread.h",
-    "src/include/openssl/time.h",
-    "src/include/openssl/trust_token.h",
-    "src/include/openssl/type_check.h",
-    "src/include/openssl/x509.h",
-    "src/include/openssl/x509_vfy.h",
-    "src/include/openssl/x509v3.h",
-    "src/include/openssl/x509v3_errors.h",
-]
-
-crypto_internal_headers = [
-    "src/crypto/asn1/internal.h",
-    "src/crypto/bcm_support.h",
-    "src/crypto/bio/internal.h",
-    "src/crypto/bytestring/internal.h",
-    "src/crypto/chacha/internal.h",
-    "src/crypto/cipher/internal.h",
-    "src/crypto/conf/internal.h",
-    "src/crypto/cpu_arm_linux.h",
-    "src/crypto/curve25519/curve25519_tables.h",
-    "src/crypto/curve25519/internal.h",
-    "src/crypto/des/internal.h",
-    "src/crypto/dsa/internal.h",
-    "src/crypto/ec/internal.h",
-    "src/crypto/err/internal.h",
-    "src/crypto/evp/internal.h",
-    "src/crypto/fipsmodule/aes/internal.h",
-    "src/crypto/fipsmodule/bcm_interface.h",
-    "src/crypto/fipsmodule/bn/internal.h",
-    "src/crypto/fipsmodule/bn/rsaz_exp.h",
-    "src/crypto/fipsmodule/cipher/internal.h",
-    "src/crypto/fipsmodule/delocate.h",
-    "src/crypto/fipsmodule/dh/internal.h",
-    "src/crypto/fipsmodule/digest/internal.h",
-    "src/crypto/fipsmodule/digest/md32_common.h",
-    "src/crypto/fipsmodule/ec/builtin_curves.h",
-    "src/crypto/fipsmodule/ec/internal.h",
-    "src/crypto/fipsmodule/ec/p256-nistz-table.h",
-    "src/crypto/fipsmodule/ec/p256-nistz.h",
-    "src/crypto/fipsmodule/ec/p256_table.h",
-    "src/crypto/fipsmodule/ecdsa/internal.h",
-    "src/crypto/fipsmodule/keccak/internal.h",
-    "src/crypto/fipsmodule/rand/internal.h",
-    "src/crypto/fipsmodule/rsa/internal.h",
-    "src/crypto/fipsmodule/service_indicator/internal.h",
-    "src/crypto/fipsmodule/sha/internal.h",
-    "src/crypto/fipsmodule/slhdsa/address.h",
-    "src/crypto/fipsmodule/slhdsa/fors.h",
-    "src/crypto/fipsmodule/slhdsa/merkle.h",
-    "src/crypto/fipsmodule/slhdsa/params.h",
-    "src/crypto/fipsmodule/slhdsa/thash.h",
-    "src/crypto/fipsmodule/slhdsa/wots.h",
-    "src/crypto/fipsmodule/tls/internal.h",
-    "src/crypto/hrss/internal.h",
-    "src/crypto/internal.h",
-    "src/crypto/kyber/internal.h",
-    "src/crypto/lhash/internal.h",
-    "src/crypto/md5/internal.h",
-    "src/crypto/obj/obj_dat.h",
-    "src/crypto/pem/internal.h",
-    "src/crypto/pkcs7/internal.h",
-    "src/crypto/pkcs8/internal.h",
-    "src/crypto/poly1305/internal.h",
-    "src/crypto/pool/internal.h",
-    "src/crypto/rand/getrandom_fillin.h",
-    "src/crypto/rand/internal.h",
-    "src/crypto/rsa/internal.h",
-    "src/crypto/spake2plus/internal.h",
-    "src/crypto/trust_token/internal.h",
-    "src/crypto/x509/ext_dat.h",
-    "src/crypto/x509/internal.h",
-    "src/third_party/fiat/curve25519_32.h",
-    "src/third_party/fiat/curve25519_64.h",
-    "src/third_party/fiat/curve25519_64_adx.h",
-    "src/third_party/fiat/curve25519_64_msvc.h",
-    "src/third_party/fiat/p256_32.h",
-    "src/third_party/fiat/p256_64.h",
-    "src/third_party/fiat/p256_64_msvc.h",
-]
-
-crypto_sources = [
-    "src/crypto/aes/aes.cc",
-    "src/crypto/asn1/a_bitstr.cc",
-    "src/crypto/asn1/a_bool.cc",
-    "src/crypto/asn1/a_d2i_fp.cc",
-    "src/crypto/asn1/a_dup.cc",
-    "src/crypto/asn1/a_gentm.cc",
-    "src/crypto/asn1/a_i2d_fp.cc",
-    "src/crypto/asn1/a_int.cc",
-    "src/crypto/asn1/a_mbstr.cc",
-    "src/crypto/asn1/a_object.cc",
-    "src/crypto/asn1/a_octet.cc",
-    "src/crypto/asn1/a_strex.cc",
-    "src/crypto/asn1/a_strnid.cc",
-    "src/crypto/asn1/a_time.cc",
-    "src/crypto/asn1/a_type.cc",
-    "src/crypto/asn1/a_utctm.cc",
-    "src/crypto/asn1/asn1_lib.cc",
-    "src/crypto/asn1/asn1_par.cc",
-    "src/crypto/asn1/asn_pack.cc",
-    "src/crypto/asn1/f_int.cc",
-    "src/crypto/asn1/f_string.cc",
-    "src/crypto/asn1/posix_time.cc",
-    "src/crypto/asn1/tasn_dec.cc",
-    "src/crypto/asn1/tasn_enc.cc",
-    "src/crypto/asn1/tasn_fre.cc",
-    "src/crypto/asn1/tasn_new.cc",
-    "src/crypto/asn1/tasn_typ.cc",
-    "src/crypto/asn1/tasn_utl.cc",
-    "src/crypto/base64/base64.cc",
-    "src/crypto/bio/bio.cc",
-    "src/crypto/bio/bio_mem.cc",
-    "src/crypto/bio/connect.cc",
-    "src/crypto/bio/errno.cc",
-    "src/crypto/bio/fd.cc",
-    "src/crypto/bio/file.cc",
-    "src/crypto/bio/hexdump.cc",
-    "src/crypto/bio/pair.cc",
-    "src/crypto/bio/printf.cc",
-    "src/crypto/bio/socket.cc",
-    "src/crypto/bio/socket_helper.cc",
-    "src/crypto/blake2/blake2.cc",
-    "src/crypto/bn/bn_asn1.cc",
-    "src/crypto/bn/convert.cc",
-    "src/crypto/bn/div.cc",
-    "src/crypto/bn/exponentiation.cc",
-    "src/crypto/bn/sqrt.cc",
-    "src/crypto/buf/buf.cc",
-    "src/crypto/bytestring/asn1_compat.cc",
-    "src/crypto/bytestring/ber.cc",
-    "src/crypto/bytestring/cbb.cc",
-    "src/crypto/bytestring/cbs.cc",
-    "src/crypto/bytestring/unicode.cc",
-    "src/crypto/chacha/chacha.cc",
-    "src/crypto/cipher/derive_key.cc",
-    "src/crypto/cipher/e_aesctrhmac.cc",
-    "src/crypto/cipher/e_aeseax.cc",
-    "src/crypto/cipher/e_aesgcmsiv.cc",
-    "src/crypto/cipher/e_chacha20poly1305.cc",
-    "src/crypto/cipher/e_des.cc",
-    "src/crypto/cipher/e_null.cc",
-    "src/crypto/cipher/e_rc2.cc",
-    "src/crypto/cipher/e_rc4.cc",
-    "src/crypto/cipher/e_tls.cc",
-    "src/crypto/cipher/get_cipher.cc",
-    "src/crypto/cipher/tls_cbc.cc",
-    "src/crypto/cms/cms.cc",
-    "src/crypto/conf/conf.cc",
-    "src/crypto/cpu_aarch64_apple.cc",
-    "src/crypto/cpu_aarch64_fuchsia.cc",
-    "src/crypto/cpu_aarch64_linux.cc",
-    "src/crypto/cpu_aarch64_openbsd.cc",
-    "src/crypto/cpu_aarch64_sysreg.cc",
-    "src/crypto/cpu_aarch64_win.cc",
-    "src/crypto/cpu_arm_freebsd.cc",
-    "src/crypto/cpu_arm_linux.cc",
-    "src/crypto/cpu_intel.cc",
-    "src/crypto/crypto.cc",
-    "src/crypto/curve25519/curve25519.cc",
-    "src/crypto/curve25519/curve25519_64_adx.cc",
-    "src/crypto/curve25519/spake25519.cc",
-    "src/crypto/des/des.cc",
-    "src/crypto/dh/dh_asn1.cc",
-    "src/crypto/dh/params.cc",
-    "src/crypto/digest/digest_extra.cc",
-    "src/crypto/dsa/dsa.cc",
-    "src/crypto/dsa/dsa_asn1.cc",
-    "src/crypto/ec/ec_asn1.cc",
-    "src/crypto/ec/ec_derive.cc",
-    "src/crypto/ec/hash_to_curve.cc",
-    "src/crypto/ecdh/ecdh.cc",
-    "src/crypto/ecdsa/ecdsa_asn1.cc",
-    "src/crypto/engine/engine.cc",
-    "src/crypto/err/err.cc",
-    "src/crypto/evp/evp.cc",
-    "src/crypto/evp/evp_asn1.cc",
-    "src/crypto/evp/evp_ctx.cc",
-    "src/crypto/evp/p_dh.cc",
-    "src/crypto/evp/p_dh_asn1.cc",
-    "src/crypto/evp/p_dsa_asn1.cc",
-    "src/crypto/evp/p_ec.cc",
-    "src/crypto/evp/p_ec_asn1.cc",
-    "src/crypto/evp/p_ed25519.cc",
-    "src/crypto/evp/p_ed25519_asn1.cc",
-    "src/crypto/evp/p_hkdf.cc",
-    "src/crypto/evp/p_rsa.cc",
-    "src/crypto/evp/p_rsa_asn1.cc",
-    "src/crypto/evp/p_x25519.cc",
-    "src/crypto/evp/p_x25519_asn1.cc",
-    "src/crypto/evp/pbkdf.cc",
-    "src/crypto/evp/print.cc",
-    "src/crypto/evp/scrypt.cc",
-    "src/crypto/evp/sign.cc",
-    "src/crypto/ex_data.cc",
-    "src/crypto/fipsmodule/bcm.cc",
-    "src/crypto/fipsmodule/fips_shared_support.cc",
-    "src/crypto/fuzzer_mode.cc",
-    "src/crypto/hpke/hpke.cc",
-    "src/crypto/hrss/hrss.cc",
-    "src/crypto/kyber/kyber.cc",
-    "src/crypto/lhash/lhash.cc",
-    "src/crypto/md4/md4.cc",
-    "src/crypto/md5/md5.cc",
-    "src/crypto/mem.cc",
-    "src/crypto/mldsa/mldsa.cc",
-    "src/crypto/mlkem/mlkem.cc",
-    "src/crypto/obj/obj.cc",
-    "src/crypto/obj/obj_xref.cc",
-    "src/crypto/pem/pem_all.cc",
-    "src/crypto/pem/pem_info.cc",
-    "src/crypto/pem/pem_lib.cc",
-    "src/crypto/pem/pem_oth.cc",
-    "src/crypto/pem/pem_pk8.cc",
-    "src/crypto/pem/pem_pkey.cc",
-    "src/crypto/pem/pem_x509.cc",
-    "src/crypto/pem/pem_xaux.cc",
-    "src/crypto/pkcs7/pkcs7.cc",
-    "src/crypto/pkcs7/pkcs7_x509.cc",
-    "src/crypto/pkcs8/p5_pbev2.cc",
-    "src/crypto/pkcs8/pkcs8.cc",
-    "src/crypto/pkcs8/pkcs8_x509.cc",
-    "src/crypto/poly1305/poly1305.cc",
-    "src/crypto/poly1305/poly1305_arm.cc",
-    "src/crypto/poly1305/poly1305_vec.cc",
-    "src/crypto/pool/pool.cc",
-    "src/crypto/rand/deterministic.cc",
-    "src/crypto/rand/fork_detect.cc",
-    "src/crypto/rand/forkunsafe.cc",
-    "src/crypto/rand/getentropy.cc",
-    "src/crypto/rand/ios.cc",
-    "src/crypto/rand/passive.cc",
-    "src/crypto/rand/rand.cc",
-    "src/crypto/rand/trusty.cc",
-    "src/crypto/rand/urandom.cc",
-    "src/crypto/rand/windows.cc",
-    "src/crypto/rc4/rc4.cc",
-    "src/crypto/refcount.cc",
-    "src/crypto/rsa/rsa_asn1.cc",
-    "src/crypto/rsa/rsa_crypt.cc",
-    "src/crypto/rsa/rsa_extra.cc",
-    "src/crypto/rsa/rsa_print.cc",
-    "src/crypto/sha/sha1.cc",
-    "src/crypto/sha/sha256.cc",
-    "src/crypto/sha/sha512.cc",
-    "src/crypto/siphash/siphash.cc",
-    "src/crypto/slhdsa/slhdsa.cc",
-    "src/crypto/spake2plus/spake2plus.cc",
-    "src/crypto/stack/stack.cc",
-    "src/crypto/thread.cc",
-    "src/crypto/thread_none.cc",
-    "src/crypto/thread_pthread.cc",
-    "src/crypto/thread_win.cc",
-    "src/crypto/trust_token/pmbtoken.cc",
-    "src/crypto/trust_token/trust_token.cc",
-    "src/crypto/trust_token/voprf.cc",
-    "src/crypto/x509/a_digest.cc",
-    "src/crypto/x509/a_sign.cc",
-    "src/crypto/x509/a_verify.cc",
-    "src/crypto/x509/algorithm.cc",
-    "src/crypto/x509/asn1_gen.cc",
-    "src/crypto/x509/by_dir.cc",
-    "src/crypto/x509/by_file.cc",
-    "src/crypto/x509/i2d_pr.cc",
-    "src/crypto/x509/name_print.cc",
-    "src/crypto/x509/policy.cc",
-    "src/crypto/x509/rsa_pss.cc",
-    "src/crypto/x509/t_crl.cc",
-    "src/crypto/x509/t_req.cc",
-    "src/crypto/x509/t_x509.cc",
-    "src/crypto/x509/t_x509a.cc",
-    "src/crypto/x509/v3_akey.cc",
-    "src/crypto/x509/v3_akeya.cc",
-    "src/crypto/x509/v3_alt.cc",
-    "src/crypto/x509/v3_bcons.cc",
-    "src/crypto/x509/v3_bitst.cc",
-    "src/crypto/x509/v3_conf.cc",
-    "src/crypto/x509/v3_cpols.cc",
-    "src/crypto/x509/v3_crld.cc",
-    "src/crypto/x509/v3_enum.cc",
-    "src/crypto/x509/v3_extku.cc",
-    "src/crypto/x509/v3_genn.cc",
-    "src/crypto/x509/v3_ia5.cc",
-    "src/crypto/x509/v3_info.cc",
-    "src/crypto/x509/v3_int.cc",
-    "src/crypto/x509/v3_lib.cc",
-    "src/crypto/x509/v3_ncons.cc",
-    "src/crypto/x509/v3_ocsp.cc",
-    "src/crypto/x509/v3_pcons.cc",
-    "src/crypto/x509/v3_pmaps.cc",
-    "src/crypto/x509/v3_prn.cc",
-    "src/crypto/x509/v3_purp.cc",
-    "src/crypto/x509/v3_skey.cc",
-    "src/crypto/x509/v3_utl.cc",
-    "src/crypto/x509/x509.cc",
-    "src/crypto/x509/x509_att.cc",
-    "src/crypto/x509/x509_cmp.cc",
-    "src/crypto/x509/x509_d2.cc",
-    "src/crypto/x509/x509_def.cc",
-    "src/crypto/x509/x509_ext.cc",
-    "src/crypto/x509/x509_lu.cc",
-    "src/crypto/x509/x509_obj.cc",
-    "src/crypto/x509/x509_req.cc",
-    "src/crypto/x509/x509_set.cc",
-    "src/crypto/x509/x509_trs.cc",
-    "src/crypto/x509/x509_txt.cc",
-    "src/crypto/x509/x509_v3.cc",
-    "src/crypto/x509/x509_vfy.cc",
-    "src/crypto/x509/x509_vpm.cc",
-    "src/crypto/x509/x509cset.cc",
-    "src/crypto/x509/x509name.cc",
-    "src/crypto/x509/x509rset.cc",
-    "src/crypto/x509/x509spki.cc",
-    "src/crypto/x509/x_algor.cc",
-    "src/crypto/x509/x_all.cc",
-    "src/crypto/x509/x_attrib.cc",
-    "src/crypto/x509/x_crl.cc",
-    "src/crypto/x509/x_exten.cc",
-    "src/crypto/x509/x_name.cc",
-    "src/crypto/x509/x_pubkey.cc",
-    "src/crypto/x509/x_req.cc",
-    "src/crypto/x509/x_sig.cc",
-    "src/crypto/x509/x_spki.cc",
-    "src/crypto/x509/x_val.cc",
-    "src/crypto/x509/x_x509.cc",
-    "src/crypto/x509/x_x509a.cc",
-    "src/gen/crypto/err_data.cc",
-]
-
-crypto_sources_asm = [
-    "src/crypto/curve25519/asm/x25519-asm-arm.S",
-    "src/crypto/hrss/asm/poly_rq_mul.S",
-    "src/crypto/poly1305/poly1305_arm_asm.S",
-    "src/gen/bcm/aes-gcm-avx2-x86_64-apple.S",
-    "src/gen/bcm/aes-gcm-avx2-x86_64-linux.S",
-    "src/gen/bcm/aes-gcm-avx512-x86_64-apple.S",
-    "src/gen/bcm/aes-gcm-avx512-x86_64-linux.S",
-    "src/gen/bcm/aesni-gcm-x86_64-apple.S",
-    "src/gen/bcm/aesni-gcm-x86_64-linux.S",
-    "src/gen/bcm/aesni-x86-apple.S",
-    "src/gen/bcm/aesni-x86-linux.S",
-    "src/gen/bcm/aesni-x86_64-apple.S",
-    "src/gen/bcm/aesni-x86_64-linux.S",
-    "src/gen/bcm/aesv8-armv7-linux.S",
-    "src/gen/bcm/aesv8-armv8-apple.S",
-    "src/gen/bcm/aesv8-armv8-linux.S",
-    "src/gen/bcm/aesv8-armv8-win.S",
-    "src/gen/bcm/aesv8-gcm-armv8-apple.S",
-    "src/gen/bcm/aesv8-gcm-armv8-linux.S",
-    "src/gen/bcm/aesv8-gcm-armv8-win.S",
-    "src/gen/bcm/armv4-mont-linux.S",
-    "src/gen/bcm/armv8-mont-apple.S",
-    "src/gen/bcm/armv8-mont-linux.S",
-    "src/gen/bcm/armv8-mont-win.S",
-    "src/gen/bcm/bn-586-apple.S",
-    "src/gen/bcm/bn-586-linux.S",
-    "src/gen/bcm/bn-armv8-apple.S",
-    "src/gen/bcm/bn-armv8-linux.S",
-    "src/gen/bcm/bn-armv8-win.S",
-    "src/gen/bcm/bsaes-armv7-linux.S",
-    "src/gen/bcm/co-586-apple.S",
-    "src/gen/bcm/co-586-linux.S",
-    "src/gen/bcm/ghash-armv4-linux.S",
-    "src/gen/bcm/ghash-neon-armv8-apple.S",
-    "src/gen/bcm/ghash-neon-armv8-linux.S",
-    "src/gen/bcm/ghash-neon-armv8-win.S",
-    "src/gen/bcm/ghash-ssse3-x86-apple.S",
-    "src/gen/bcm/ghash-ssse3-x86-linux.S",
-    "src/gen/bcm/ghash-ssse3-x86_64-apple.S",
-    "src/gen/bcm/ghash-ssse3-x86_64-linux.S",
-    "src/gen/bcm/ghash-x86-apple.S",
-    "src/gen/bcm/ghash-x86-linux.S",
-    "src/gen/bcm/ghash-x86_64-apple.S",
-    "src/gen/bcm/ghash-x86_64-linux.S",
-    "src/gen/bcm/ghashv8-armv7-linux.S",
-    "src/gen/bcm/ghashv8-armv8-apple.S",
-    "src/gen/bcm/ghashv8-armv8-linux.S",
-    "src/gen/bcm/ghashv8-armv8-win.S",
-    "src/gen/bcm/p256-armv8-asm-apple.S",
-    "src/gen/bcm/p256-armv8-asm-linux.S",
-    "src/gen/bcm/p256-armv8-asm-win.S",
-    "src/gen/bcm/p256-x86_64-asm-apple.S",
-    "src/gen/bcm/p256-x86_64-asm-linux.S",
-    "src/gen/bcm/p256_beeu-armv8-asm-apple.S",
-    "src/gen/bcm/p256_beeu-armv8-asm-linux.S",
-    "src/gen/bcm/p256_beeu-armv8-asm-win.S",
-    "src/gen/bcm/p256_beeu-x86_64-asm-apple.S",
-    "src/gen/bcm/p256_beeu-x86_64-asm-linux.S",
-    "src/gen/bcm/rdrand-x86_64-apple.S",
-    "src/gen/bcm/rdrand-x86_64-linux.S",
-    "src/gen/bcm/rsaz-avx2-apple.S",
-    "src/gen/bcm/rsaz-avx2-linux.S",
-    "src/gen/bcm/sha1-586-apple.S",
-    "src/gen/bcm/sha1-586-linux.S",
-    "src/gen/bcm/sha1-armv4-large-linux.S",
-    "src/gen/bcm/sha1-armv8-apple.S",
-    "src/gen/bcm/sha1-armv8-linux.S",
-    "src/gen/bcm/sha1-armv8-win.S",
-    "src/gen/bcm/sha1-x86_64-apple.S",
-    "src/gen/bcm/sha1-x86_64-linux.S",
-    "src/gen/bcm/sha256-586-apple.S",
-    "src/gen/bcm/sha256-586-linux.S",
-    "src/gen/bcm/sha256-armv4-linux.S",
-    "src/gen/bcm/sha256-armv8-apple.S",
-    "src/gen/bcm/sha256-armv8-linux.S",
-    "src/gen/bcm/sha256-armv8-win.S",
-    "src/gen/bcm/sha256-x86_64-apple.S",
-    "src/gen/bcm/sha256-x86_64-linux.S",
-    "src/gen/bcm/sha512-586-apple.S",
-    "src/gen/bcm/sha512-586-linux.S",
-    "src/gen/bcm/sha512-armv4-linux.S",
-    "src/gen/bcm/sha512-armv8-apple.S",
-    "src/gen/bcm/sha512-armv8-linux.S",
-    "src/gen/bcm/sha512-armv8-win.S",
-    "src/gen/bcm/sha512-x86_64-apple.S",
-    "src/gen/bcm/sha512-x86_64-linux.S",
-    "src/gen/bcm/vpaes-armv7-linux.S",
-    "src/gen/bcm/vpaes-armv8-apple.S",
-    "src/gen/bcm/vpaes-armv8-linux.S",
-    "src/gen/bcm/vpaes-armv8-win.S",
-    "src/gen/bcm/vpaes-x86-apple.S",
-    "src/gen/bcm/vpaes-x86-linux.S",
-    "src/gen/bcm/vpaes-x86_64-apple.S",
-    "src/gen/bcm/vpaes-x86_64-linux.S",
-    "src/gen/bcm/x86-mont-apple.S",
-    "src/gen/bcm/x86-mont-linux.S",
-    "src/gen/bcm/x86_64-mont-apple.S",
-    "src/gen/bcm/x86_64-mont-linux.S",
-    "src/gen/bcm/x86_64-mont5-apple.S",
-    "src/gen/bcm/x86_64-mont5-linux.S",
-    "src/gen/crypto/aes128gcmsiv-x86_64-apple.S",
-    "src/gen/crypto/aes128gcmsiv-x86_64-linux.S",
-    "src/gen/crypto/chacha-armv4-linux.S",
-    "src/gen/crypto/chacha-armv8-apple.S",
-    "src/gen/crypto/chacha-armv8-linux.S",
-    "src/gen/crypto/chacha-armv8-win.S",
-    "src/gen/crypto/chacha-x86-apple.S",
-    "src/gen/crypto/chacha-x86-linux.S",
-    "src/gen/crypto/chacha-x86_64-apple.S",
-    "src/gen/crypto/chacha-x86_64-linux.S",
-    "src/gen/crypto/chacha20_poly1305_armv8-apple.S",
-    "src/gen/crypto/chacha20_poly1305_armv8-linux.S",
-    "src/gen/crypto/chacha20_poly1305_armv8-win.S",
-    "src/gen/crypto/chacha20_poly1305_x86_64-apple.S",
-    "src/gen/crypto/chacha20_poly1305_x86_64-linux.S",
-    "src/gen/crypto/md5-586-apple.S",
-    "src/gen/crypto/md5-586-linux.S",
-    "src/gen/crypto/md5-x86_64-apple.S",
-    "src/gen/crypto/md5-x86_64-linux.S",
-    "src/gen/test_support/trampoline-armv4-linux.S",
-    "src/gen/test_support/trampoline-armv8-apple.S",
-    "src/gen/test_support/trampoline-armv8-linux.S",
-    "src/gen/test_support/trampoline-armv8-win.S",
-    "src/gen/test_support/trampoline-x86-apple.S",
-    "src/gen/test_support/trampoline-x86-linux.S",
-    "src/gen/test_support/trampoline-x86_64-apple.S",
-    "src/gen/test_support/trampoline-x86_64-linux.S",
-    "src/third_party/fiat/asm/fiat_curve25519_adx_mul.S",
-    "src/third_party/fiat/asm/fiat_curve25519_adx_square.S",
-    "src/third_party/fiat/asm/fiat_p256_adx_mul.S",
-    "src/third_party/fiat/asm/fiat_p256_adx_sqr.S",
-]
-
-crypto_sources_nasm = [
-    "src/gen/bcm/aes-gcm-avx2-x86_64-win.asm",
-    "src/gen/bcm/aes-gcm-avx512-x86_64-win.asm",
-    "src/gen/bcm/aesni-gcm-x86_64-win.asm",
-    "src/gen/bcm/aesni-x86-win.asm",
-    "src/gen/bcm/aesni-x86_64-win.asm",
-    "src/gen/bcm/bn-586-win.asm",
-    "src/gen/bcm/co-586-win.asm",
-    "src/gen/bcm/ghash-ssse3-x86-win.asm",
-    "src/gen/bcm/ghash-ssse3-x86_64-win.asm",
-    "src/gen/bcm/ghash-x86-win.asm",
-    "src/gen/bcm/ghash-x86_64-win.asm",
-    "src/gen/bcm/p256-x86_64-asm-win.asm",
-    "src/gen/bcm/p256_beeu-x86_64-asm-win.asm",
-    "src/gen/bcm/rdrand-x86_64-win.asm",
-    "src/gen/bcm/rsaz-avx2-win.asm",
-    "src/gen/bcm/sha1-586-win.asm",
-    "src/gen/bcm/sha1-x86_64-win.asm",
-    "src/gen/bcm/sha256-586-win.asm",
-    "src/gen/bcm/sha256-x86_64-win.asm",
-    "src/gen/bcm/sha512-586-win.asm",
-    "src/gen/bcm/sha512-x86_64-win.asm",
-    "src/gen/bcm/vpaes-x86-win.asm",
-    "src/gen/bcm/vpaes-x86_64-win.asm",
-    "src/gen/bcm/x86-mont-win.asm",
-    "src/gen/bcm/x86_64-mont-win.asm",
-    "src/gen/bcm/x86_64-mont5-win.asm",
-    "src/gen/crypto/aes128gcmsiv-x86_64-win.asm",
-    "src/gen/crypto/chacha-x86-win.asm",
-    "src/gen/crypto/chacha-x86_64-win.asm",
-    "src/gen/crypto/chacha20_poly1305_x86_64-win.asm",
-    "src/gen/crypto/md5-586-win.asm",
-    "src/gen/crypto/md5-x86_64-win.asm",
-    "src/gen/test_support/trampoline-x86-win.asm",
-    "src/gen/test_support/trampoline-x86_64-win.asm",
-]
-
-pki_headers = [
-    "src/include/openssl/pki/certificate.h",
-    "src/include/openssl/pki/ocsp.h",
-    "src/include/openssl/pki/signature_verify_cache.h",
-    "src/include/openssl/pki/verify.h",
-    "src/include/openssl/pki/verify_error.h",
-]
-
-pki_internal_headers = [
-    "src/pki/cert_error_id.h",
-    "src/pki/cert_error_params.h",
-    "src/pki/cert_errors.h",
-    "src/pki/cert_issuer_source.h",
-    "src/pki/cert_issuer_source_static.h",
-    "src/pki/cert_issuer_source_sync_unittest.h",
-    "src/pki/certificate_policies.h",
-    "src/pki/common_cert_errors.h",
-    "src/pki/crl.h",
-    "src/pki/encode_values.h",
-    "src/pki/extended_key_usage.h",
-    "src/pki/general_names.h",
-    "src/pki/input.h",
-    "src/pki/ip_util.h",
-    "src/pki/mock_signature_verify_cache.h",
-    "src/pki/name_constraints.h",
-    "src/pki/nist_pkits_unittest.h",
-    "src/pki/ocsp.h",
-    "src/pki/parse_certificate.h",
-    "src/pki/parse_name.h",
-    "src/pki/parse_values.h",
-    "src/pki/parsed_certificate.h",
-    "src/pki/parser.h",
-    "src/pki/path_builder.h",
-    "src/pki/pem.h",
-    "src/pki/revocation_util.h",
-    "src/pki/signature_algorithm.h",
-    "src/pki/simple_path_builder_delegate.h",
-    "src/pki/string_util.h",
-    "src/pki/test_helpers.h",
-    "src/pki/testdata/nist-pkits/pkits_testcases-inl.h",
-    "src/pki/trust_store.h",
-    "src/pki/trust_store_collection.h",
-    "src/pki/trust_store_in_memory.h",
-    "src/pki/verify_certificate_chain.h",
-    "src/pki/verify_certificate_chain_typed_unittest.h",
-    "src/pki/verify_name_match.h",
-    "src/pki/verify_signed_data.h",
-]
-
-pki_sources = [
-    "src/pki/cert_error_id.cc",
-    "src/pki/cert_error_params.cc",
-    "src/pki/cert_errors.cc",
-    "src/pki/cert_issuer_source_static.cc",
-    "src/pki/certificate.cc",
-    "src/pki/certificate_policies.cc",
-    "src/pki/common_cert_errors.cc",
-    "src/pki/crl.cc",
-    "src/pki/encode_values.cc",
-    "src/pki/extended_key_usage.cc",
-    "src/pki/general_names.cc",
-    "src/pki/input.cc",
-    "src/pki/ip_util.cc",
-    "src/pki/name_constraints.cc",
-    "src/pki/ocsp.cc",
-    "src/pki/parse_certificate.cc",
-    "src/pki/parse_name.cc",
-    "src/pki/parse_values.cc",
-    "src/pki/parsed_certificate.cc",
-    "src/pki/parser.cc",
-    "src/pki/path_builder.cc",
-    "src/pki/pem.cc",
-    "src/pki/revocation_util.cc",
-    "src/pki/signature_algorithm.cc",
-    "src/pki/simple_path_builder_delegate.cc",
-    "src/pki/string_util.cc",
-    "src/pki/trust_store.cc",
-    "src/pki/trust_store_collection.cc",
-    "src/pki/trust_store_in_memory.cc",
-    "src/pki/verify.cc",
-    "src/pki/verify_certificate_chain.cc",
-    "src/pki/verify_error.cc",
-    "src/pki/verify_name_match.cc",
-    "src/pki/verify_signed_data.cc",
-]
-
-rust_bssl_sys = [
-    "src/rust/bssl-sys/src/lib.rs",
-]
-
-rust_bssl_crypto = [
-    "src/rust/bssl-crypto/src/aead.rs",
-    "src/rust/bssl-crypto/src/aes.rs",
-    "src/rust/bssl-crypto/src/cipher/aes_cbc.rs",
-    "src/rust/bssl-crypto/src/cipher/aes_ctr.rs",
-    "src/rust/bssl-crypto/src/cipher/mod.rs",
-    "src/rust/bssl-crypto/src/digest.rs",
-    "src/rust/bssl-crypto/src/ec.rs",
-    "src/rust/bssl-crypto/src/ecdh.rs",
-    "src/rust/bssl-crypto/src/ecdsa.rs",
-    "src/rust/bssl-crypto/src/ed25519.rs",
-    "src/rust/bssl-crypto/src/hkdf.rs",
-    "src/rust/bssl-crypto/src/hmac.rs",
-    "src/rust/bssl-crypto/src/hpke.rs",
-    "src/rust/bssl-crypto/src/lib.rs",
-    "src/rust/bssl-crypto/src/macros.rs",
-    "src/rust/bssl-crypto/src/mem.rs",
-    "src/rust/bssl-crypto/src/mldsa.rs",
-    "src/rust/bssl-crypto/src/mlkem.rs",
-    "src/rust/bssl-crypto/src/rand.rs",
-    "src/rust/bssl-crypto/src/rsa.rs",
-    "src/rust/bssl-crypto/src/scoped.rs",
-    "src/rust/bssl-crypto/src/slhdsa.rs",
-    "src/rust/bssl-crypto/src/test_helpers.rs",
-    "src/rust/bssl-crypto/src/x25519.rs",
-]
-
-tool_sources = [
-    "src/tool/args.cc",
-    "src/tool/ciphers.cc",
-    "src/tool/client.cc",
-    "src/tool/const.cc",
-    "src/tool/digest.cc",
-    "src/tool/fd.cc",
-    "src/tool/file.cc",
-    "src/tool/generate_ech.cc",
-    "src/tool/generate_ed25519.cc",
-    "src/tool/genrsa.cc",
-    "src/tool/pkcs12.cc",
-    "src/tool/rand.cc",
-    "src/tool/server.cc",
-    "src/tool/sign.cc",
-    "src/tool/speed.cc",
-    "src/tool/tool.cc",
-    "src/tool/transport_common.cc",
-]
-
-tool_headers = [
-    "src/tool/internal.h",
-    "src/tool/transport_common.h",
-]
diff --git a/BUILD.generated_tests.bzl b/BUILD.generated_tests.bzl
deleted file mode 100644
index b072d75..0000000
--- a/BUILD.generated_tests.bzl
+++ /dev/null
@@ -1,1973 +0,0 @@
-# This file is created by generate_build_files.py. Do not edit manually.
-
-test_support_sources = [
-    "src/crypto/asn1/internal.h",
-    "src/crypto/bcm_support.h",
-    "src/crypto/bio/internal.h",
-    "src/crypto/bytestring/internal.h",
-    "src/crypto/chacha/internal.h",
-    "src/crypto/cipher/internal.h",
-    "src/crypto/conf/internal.h",
-    "src/crypto/cpu_arm_linux.h",
-    "src/crypto/curve25519/curve25519_tables.h",
-    "src/crypto/curve25519/internal.h",
-    "src/crypto/des/internal.h",
-    "src/crypto/dsa/internal.h",
-    "src/crypto/ec/internal.h",
-    "src/crypto/err/internal.h",
-    "src/crypto/evp/internal.h",
-    "src/crypto/fipsmodule/aes/internal.h",
-    "src/crypto/fipsmodule/bcm_interface.h",
-    "src/crypto/fipsmodule/bn/internal.h",
-    "src/crypto/fipsmodule/bn/rsaz_exp.h",
-    "src/crypto/fipsmodule/cipher/internal.h",
-    "src/crypto/fipsmodule/delocate.h",
-    "src/crypto/fipsmodule/dh/internal.h",
-    "src/crypto/fipsmodule/digest/internal.h",
-    "src/crypto/fipsmodule/digest/md32_common.h",
-    "src/crypto/fipsmodule/ec/builtin_curves.h",
-    "src/crypto/fipsmodule/ec/internal.h",
-    "src/crypto/fipsmodule/ec/p256-nistz-table.h",
-    "src/crypto/fipsmodule/ec/p256-nistz.h",
-    "src/crypto/fipsmodule/ec/p256_table.h",
-    "src/crypto/fipsmodule/ecdsa/internal.h",
-    "src/crypto/fipsmodule/keccak/internal.h",
-    "src/crypto/fipsmodule/rand/internal.h",
-    "src/crypto/fipsmodule/rsa/internal.h",
-    "src/crypto/fipsmodule/service_indicator/internal.h",
-    "src/crypto/fipsmodule/sha/internal.h",
-    "src/crypto/fipsmodule/slhdsa/address.h",
-    "src/crypto/fipsmodule/slhdsa/fors.h",
-    "src/crypto/fipsmodule/slhdsa/merkle.h",
-    "src/crypto/fipsmodule/slhdsa/params.h",
-    "src/crypto/fipsmodule/slhdsa/thash.h",
-    "src/crypto/fipsmodule/slhdsa/wots.h",
-    "src/crypto/fipsmodule/tls/internal.h",
-    "src/crypto/hrss/internal.h",
-    "src/crypto/internal.h",
-    "src/crypto/kyber/internal.h",
-    "src/crypto/lhash/internal.h",
-    "src/crypto/md5/internal.h",
-    "src/crypto/obj/obj_dat.h",
-    "src/crypto/pem/internal.h",
-    "src/crypto/pkcs7/internal.h",
-    "src/crypto/pkcs8/internal.h",
-    "src/crypto/poly1305/internal.h",
-    "src/crypto/pool/internal.h",
-    "src/crypto/rand/getrandom_fillin.h",
-    "src/crypto/rand/internal.h",
-    "src/crypto/rsa/internal.h",
-    "src/crypto/spake2plus/internal.h",
-    "src/crypto/test/abi_test.cc",
-    "src/crypto/test/abi_test.h",
-    "src/crypto/test/file_test.cc",
-    "src/crypto/test/file_test.h",
-    "src/crypto/test/file_test_gtest.cc",
-    "src/crypto/test/file_util.cc",
-    "src/crypto/test/file_util.h",
-    "src/crypto/test/gtest_main.h",
-    "src/crypto/test/test_data.cc",
-    "src/crypto/test/test_data.h",
-    "src/crypto/test/test_util.cc",
-    "src/crypto/test/test_util.h",
-    "src/crypto/test/wycheproof_util.cc",
-    "src/crypto/test/wycheproof_util.h",
-    "src/crypto/trust_token/internal.h",
-    "src/crypto/x509/ext_dat.h",
-    "src/crypto/x509/internal.h",
-    "src/pki/cert_error_id.h",
-    "src/pki/cert_error_params.h",
-    "src/pki/cert_errors.h",
-    "src/pki/cert_issuer_source.h",
-    "src/pki/cert_issuer_source_static.h",
-    "src/pki/cert_issuer_source_sync_unittest.h",
-    "src/pki/certificate_policies.h",
-    "src/pki/common_cert_errors.h",
-    "src/pki/crl.h",
-    "src/pki/encode_values.h",
-    "src/pki/extended_key_usage.h",
-    "src/pki/general_names.h",
-    "src/pki/input.h",
-    "src/pki/ip_util.h",
-    "src/pki/mock_signature_verify_cache.h",
-    "src/pki/name_constraints.h",
-    "src/pki/nist_pkits_unittest.h",
-    "src/pki/ocsp.h",
-    "src/pki/parse_certificate.h",
-    "src/pki/parse_name.h",
-    "src/pki/parse_values.h",
-    "src/pki/parsed_certificate.h",
-    "src/pki/parser.h",
-    "src/pki/path_builder.h",
-    "src/pki/pem.h",
-    "src/pki/revocation_util.h",
-    "src/pki/signature_algorithm.h",
-    "src/pki/simple_path_builder_delegate.h",
-    "src/pki/string_util.h",
-    "src/pki/test_helpers.h",
-    "src/pki/testdata/nist-pkits/pkits_testcases-inl.h",
-    "src/pki/trust_store.h",
-    "src/pki/trust_store_collection.h",
-    "src/pki/trust_store_in_memory.h",
-    "src/pki/verify_certificate_chain.h",
-    "src/pki/verify_certificate_chain_typed_unittest.h",
-    "src/pki/verify_name_match.h",
-    "src/pki/verify_signed_data.h",
-    "src/ssl/internal.h",
-    "src/ssl/test/async_bio.h",
-    "src/ssl/test/fuzzer.h",
-    "src/ssl/test/fuzzer_tags.h",
-    "src/ssl/test/handshake_util.h",
-    "src/ssl/test/mock_quic_transport.h",
-    "src/ssl/test/packeted_bio.h",
-    "src/ssl/test/settings_writer.h",
-    "src/ssl/test/test_config.h",
-    "src/ssl/test/test_state.h",
-    "src/third_party/fiat/curve25519_32.h",
-    "src/third_party/fiat/curve25519_64.h",
-    "src/third_party/fiat/curve25519_64_adx.h",
-    "src/third_party/fiat/curve25519_64_msvc.h",
-    "src/third_party/fiat/p256_32.h",
-    "src/third_party/fiat/p256_64.h",
-    "src/third_party/fiat/p256_64_msvc.h",
-]
-
-crypto_test_sources = [
-    "src/crypto/abi_self_test.cc",
-    "src/crypto/asn1/asn1_test.cc",
-    "src/crypto/base64/base64_test.cc",
-    "src/crypto/bio/bio_test.cc",
-    "src/crypto/blake2/blake2_test.cc",
-    "src/crypto/buf/buf_test.cc",
-    "src/crypto/bytestring/bytestring_test.cc",
-    "src/crypto/chacha/chacha_test.cc",
-    "src/crypto/cipher/aead_test.cc",
-    "src/crypto/cipher/cipher_test.cc",
-    "src/crypto/cms/cms_test.cc",
-    "src/crypto/compiler_test.cc",
-    "src/crypto/conf/conf_test.cc",
-    "src/crypto/constant_time_test.cc",
-    "src/crypto/cpu_arm_linux_test.cc",
-    "src/crypto/crypto_test.cc",
-    "src/crypto/curve25519/ed25519_test.cc",
-    "src/crypto/curve25519/spake25519_test.cc",
-    "src/crypto/curve25519/x25519_test.cc",
-    "src/crypto/dh/dh_test.cc",
-    "src/crypto/digest/digest_test.cc",
-    "src/crypto/dsa/dsa_test.cc",
-    "src/crypto/ecdh/ecdh_test.cc",
-    "src/crypto/err/err_test.cc",
-    "src/crypto/evp/evp_extra_test.cc",
-    "src/crypto/evp/evp_test.cc",
-    "src/crypto/evp/pbkdf_test.cc",
-    "src/crypto/evp/scrypt_test.cc",
-    "src/crypto/fipsmodule/aes/aes_test.cc",
-    "src/crypto/fipsmodule/aes/gcm_test.cc",
-    "src/crypto/fipsmodule/bn/bn_test.cc",
-    "src/crypto/fipsmodule/cmac/cmac_test.cc",
-    "src/crypto/fipsmodule/ec/ec_test.cc",
-    "src/crypto/fipsmodule/ec/p256-nistz_test.cc",
-    "src/crypto/fipsmodule/ec/p256_test.cc",
-    "src/crypto/fipsmodule/ecdsa/ecdsa_test.cc",
-    "src/crypto/fipsmodule/hkdf/hkdf_test.cc",
-    "src/crypto/fipsmodule/keccak/keccak_test.cc",
-    "src/crypto/fipsmodule/rand/ctrdrbg_test.cc",
-    "src/crypto/fipsmodule/service_indicator/service_indicator_test.cc",
-    "src/crypto/fipsmodule/sha/sha_test.cc",
-    "src/crypto/hmac/hmac_test.cc",
-    "src/crypto/hpke/hpke_test.cc",
-    "src/crypto/hrss/hrss_test.cc",
-    "src/crypto/impl_dispatch_test.cc",
-    "src/crypto/kyber/kyber_test.cc",
-    "src/crypto/lhash/lhash_test.cc",
-    "src/crypto/md5/md5_test.cc",
-    "src/crypto/mldsa/mldsa_test.cc",
-    "src/crypto/mlkem/mlkem_test.cc",
-    "src/crypto/obj/obj_test.cc",
-    "src/crypto/pem/pem_test.cc",
-    "src/crypto/pkcs7/pkcs7_test.cc",
-    "src/crypto/pkcs8/pkcs12_test.cc",
-    "src/crypto/pkcs8/pkcs8_test.cc",
-    "src/crypto/poly1305/poly1305_test.cc",
-    "src/crypto/pool/pool_test.cc",
-    "src/crypto/rand/fork_detect_test.cc",
-    "src/crypto/rand/getentropy_test.cc",
-    "src/crypto/rand/rand_test.cc",
-    "src/crypto/refcount_test.cc",
-    "src/crypto/rsa/rsa_test.cc",
-    "src/crypto/self_test.cc",
-    "src/crypto/siphash/siphash_test.cc",
-    "src/crypto/slhdsa/slhdsa_test.cc",
-    "src/crypto/spake2plus/spake2plus_test.cc",
-    "src/crypto/stack/stack_test.cc",
-    "src/crypto/test/gtest_main.cc",
-    "src/crypto/thread_test.cc",
-    "src/crypto/trust_token/trust_token_test.cc",
-    "src/crypto/x509/tab_test.cc",
-    "src/crypto/x509/x509_test.cc",
-    "src/crypto/x509/x509_time_test.cc",
-]
-
-ssl_test_sources = [
-    "src/crypto/test/gtest_main.cc",
-    "src/ssl/span_test.cc",
-    "src/ssl/ssl_c_test.c",
-    "src/ssl/ssl_internal_test.cc",
-    "src/ssl/ssl_test.cc",
-]
-
-pki_test_sources = [
-    "src/crypto/test/gtest_main.cc",
-    "src/pki/cert_issuer_source_static_unittest.cc",
-    "src/pki/certificate_policies_unittest.cc",
-    "src/pki/certificate_unittest.cc",
-    "src/pki/crl_unittest.cc",
-    "src/pki/encode_values_unittest.cc",
-    "src/pki/extended_key_usage_unittest.cc",
-    "src/pki/general_names_unittest.cc",
-    "src/pki/input_unittest.cc",
-    "src/pki/ip_util_unittest.cc",
-    "src/pki/mock_signature_verify_cache.cc",
-    "src/pki/name_constraints_unittest.cc",
-    "src/pki/nist_pkits_unittest.cc",
-    "src/pki/ocsp_unittest.cc",
-    "src/pki/parse_certificate_unittest.cc",
-    "src/pki/parse_name_unittest.cc",
-    "src/pki/parse_values_unittest.cc",
-    "src/pki/parsed_certificate_unittest.cc",
-    "src/pki/parser_unittest.cc",
-    "src/pki/path_builder_pkits_unittest.cc",
-    "src/pki/path_builder_unittest.cc",
-    "src/pki/path_builder_verify_certificate_chain_unittest.cc",
-    "src/pki/pem_unittest.cc",
-    "src/pki/signature_algorithm_unittest.cc",
-    "src/pki/simple_path_builder_delegate_unittest.cc",
-    "src/pki/string_util_unittest.cc",
-    "src/pki/test_helpers.cc",
-    "src/pki/trust_store_collection_unittest.cc",
-    "src/pki/trust_store_in_memory_unittest.cc",
-    "src/pki/verify_certificate_chain_pkits_unittest.cc",
-    "src/pki/verify_certificate_chain_unittest.cc",
-    "src/pki/verify_name_match_unittest.cc",
-    "src/pki/verify_signed_data_unittest.cc",
-    "src/pki/verify_unittest.cc",
-]
-
-crypto_test_data = [
-    "src/crypto/blake2/blake2b256_tests.txt",
-    "src/crypto/cipher/test/aes_128_cbc_sha1_tls_implicit_iv_tests.txt",
-    "src/crypto/cipher/test/aes_128_cbc_sha1_tls_tests.txt",
-    "src/crypto/cipher/test/aes_128_ccm_bluetooth_8_tests.txt",
-    "src/crypto/cipher/test/aes_128_ccm_bluetooth_tests.txt",
-    "src/crypto/cipher/test/aes_128_ccm_matter_tests.txt",
-    "src/crypto/cipher/test/aes_128_ctr_hmac_sha256.txt",
-    "src/crypto/cipher/test/aes_128_eax_test.txt",
-    "src/crypto/cipher/test/aes_128_gcm_randnonce_tests.txt",
-    "src/crypto/cipher/test/aes_128_gcm_siv_tests.txt",
-    "src/crypto/cipher/test/aes_128_gcm_tests.txt",
-    "src/crypto/cipher/test/aes_192_gcm_tests.txt",
-    "src/crypto/cipher/test/aes_256_cbc_sha1_tls_implicit_iv_tests.txt",
-    "src/crypto/cipher/test/aes_256_cbc_sha1_tls_tests.txt",
-    "src/crypto/cipher/test/aes_256_ctr_hmac_sha256.txt",
-    "src/crypto/cipher/test/aes_256_eax_test.txt",
-    "src/crypto/cipher/test/aes_256_gcm_randnonce_tests.txt",
-    "src/crypto/cipher/test/aes_256_gcm_siv_tests.txt",
-    "src/crypto/cipher/test/aes_256_gcm_tests.txt",
-    "src/crypto/cipher/test/chacha20_poly1305_tests.txt",
-    "src/crypto/cipher/test/cipher_tests.txt",
-    "src/crypto/cipher/test/des_ede3_cbc_sha1_tls_implicit_iv_tests.txt",
-    "src/crypto/cipher/test/des_ede3_cbc_sha1_tls_tests.txt",
-    "src/crypto/cipher/test/nist_cavp/aes_128_cbc.txt",
-    "src/crypto/cipher/test/nist_cavp/aes_128_ctr.txt",
-    "src/crypto/cipher/test/nist_cavp/aes_128_gcm.txt",
-    "src/crypto/cipher/test/nist_cavp/aes_192_cbc.txt",
-    "src/crypto/cipher/test/nist_cavp/aes_192_ctr.txt",
-    "src/crypto/cipher/test/nist_cavp/aes_256_cbc.txt",
-    "src/crypto/cipher/test/nist_cavp/aes_256_ctr.txt",
-    "src/crypto/cipher/test/nist_cavp/aes_256_gcm.txt",
-    "src/crypto/cipher/test/nist_cavp/tdes_cbc.txt",
-    "src/crypto/cipher/test/nist_cavp/tdes_ecb.txt",
-    "src/crypto/cipher/test/xchacha20_poly1305_tests.txt",
-    "src/crypto/curve25519/ed25519_tests.txt",
-    "src/crypto/ecdh/ecdh_tests.txt",
-    "src/crypto/evp/evp_tests.txt",
-    "src/crypto/evp/scrypt_tests.txt",
-    "src/crypto/fipsmodule/aes/aes_tests.txt",
-    "src/crypto/fipsmodule/bn/test/exp_tests.txt",
-    "src/crypto/fipsmodule/bn/test/gcd_tests.txt",
-    "src/crypto/fipsmodule/bn/test/miller_rabin_tests.txt",
-    "src/crypto/fipsmodule/bn/test/mod_exp_tests.txt",
-    "src/crypto/fipsmodule/bn/test/mod_inv_tests.txt",
-    "src/crypto/fipsmodule/bn/test/mod_mul_tests.txt",
-    "src/crypto/fipsmodule/bn/test/mod_sqrt_tests.txt",
-    "src/crypto/fipsmodule/bn/test/product_tests.txt",
-    "src/crypto/fipsmodule/bn/test/quotient_tests.txt",
-    "src/crypto/fipsmodule/bn/test/shift_tests.txt",
-    "src/crypto/fipsmodule/bn/test/sum_tests.txt",
-    "src/crypto/fipsmodule/cmac/cavp_3des_cmac_tests.txt",
-    "src/crypto/fipsmodule/cmac/cavp_aes128_cmac_tests.txt",
-    "src/crypto/fipsmodule/cmac/cavp_aes192_cmac_tests.txt",
-    "src/crypto/fipsmodule/cmac/cavp_aes256_cmac_tests.txt",
-    "src/crypto/fipsmodule/ec/ec_scalar_base_mult_tests.txt",
-    "src/crypto/fipsmodule/ec/p256-nistz_tests.txt",
-    "src/crypto/fipsmodule/ecdsa/ecdsa_sign_tests.txt",
-    "src/crypto/fipsmodule/ecdsa/ecdsa_verify_tests.txt",
-    "src/crypto/fipsmodule/keccak/keccak_tests.txt",
-    "src/crypto/fipsmodule/rand/ctrdrbg_vectors.txt",
-    "src/crypto/hmac/hmac_tests.txt",
-    "src/crypto/hpke/hpke_test_vectors.txt",
-    "src/crypto/kyber/kyber_tests.txt",
-    "src/crypto/mldsa/mldsa_nist_keygen_65_tests.txt",
-    "src/crypto/mldsa/mldsa_nist_keygen_87_tests.txt",
-    "src/crypto/mldsa/mldsa_nist_siggen_65_tests.txt",
-    "src/crypto/mldsa/mldsa_nist_siggen_87_tests.txt",
-    "src/crypto/mlkem/mlkem1024_decap_tests.txt",
-    "src/crypto/mlkem/mlkem1024_encap_tests.txt",
-    "src/crypto/mlkem/mlkem1024_keygen_tests.txt",
-    "src/crypto/mlkem/mlkem1024_nist_decap_tests.txt",
-    "src/crypto/mlkem/mlkem1024_nist_keygen_tests.txt",
-    "src/crypto/mlkem/mlkem768_decap_tests.txt",
-    "src/crypto/mlkem/mlkem768_encap_tests.txt",
-    "src/crypto/mlkem/mlkem768_keygen_tests.txt",
-    "src/crypto/mlkem/mlkem768_nist_decap_tests.txt",
-    "src/crypto/mlkem/mlkem768_nist_keygen_tests.txt",
-    "src/crypto/pkcs7/test/nss.p7c",
-    "src/crypto/pkcs7/test/openssl_crl.p7c",
-    "src/crypto/pkcs7/test/sign_cert.pem",
-    "src/crypto/pkcs7/test/sign_key.pem",
-    "src/crypto/pkcs7/test/sign_sha1.p7s",
-    "src/crypto/pkcs7/test/sign_sha1_key_id.p7s",
-    "src/crypto/pkcs7/test/sign_sha256.p7s",
-    "src/crypto/pkcs7/test/sign_sha256_key_id.p7s",
-    "src/crypto/pkcs7/test/windows.p7c",
-    "src/crypto/pkcs8/test/bad1.p12",
-    "src/crypto/pkcs8/test/bad2.p12",
-    "src/crypto/pkcs8/test/bad3.p12",
-    "src/crypto/pkcs8/test/empty_password.p12",
-    "src/crypto/pkcs8/test/empty_password_ber.p12",
-    "src/crypto/pkcs8/test/empty_password_ber_nested.p12",
-    "src/crypto/pkcs8/test/no_encryption.p12",
-    "src/crypto/pkcs8/test/nss.p12",
-    "src/crypto/pkcs8/test/null_password.p12",
-    "src/crypto/pkcs8/test/openssl.p12",
-    "src/crypto/pkcs8/test/pbes2_sha1.p12",
-    "src/crypto/pkcs8/test/pbes2_sha256.p12",
-    "src/crypto/pkcs8/test/unicode_password.p12",
-    "src/crypto/pkcs8/test/windows.p12",
-    "src/crypto/poly1305/poly1305_tests.txt",
-    "src/crypto/siphash/siphash_tests.txt",
-    "src/crypto/slhdsa/slhdsa_keygen.txt",
-    "src/crypto/slhdsa/slhdsa_prehash.txt",
-    "src/crypto/slhdsa/slhdsa_siggen.txt",
-    "src/crypto/slhdsa/slhdsa_sigver.txt",
-    "src/crypto/x509/test/basic_constraints_ca.pem",
-    "src/crypto/x509/test/basic_constraints_ca_pathlen_0.pem",
-    "src/crypto/x509/test/basic_constraints_ca_pathlen_1.pem",
-    "src/crypto/x509/test/basic_constraints_ca_pathlen_10.pem",
-    "src/crypto/x509/test/basic_constraints_leaf.pem",
-    "src/crypto/x509/test/basic_constraints_none.pem",
-    "src/crypto/x509/test/invalid_extension_intermediate.pem",
-    "src/crypto/x509/test/invalid_extension_intermediate_authority_key_identifier.pem",
-    "src/crypto/x509/test/invalid_extension_intermediate_basic_constraints.pem",
-    "src/crypto/x509/test/invalid_extension_intermediate_ext_key_usage.pem",
-    "src/crypto/x509/test/invalid_extension_intermediate_key_usage.pem",
-    "src/crypto/x509/test/invalid_extension_intermediate_name_constraints.pem",
-    "src/crypto/x509/test/invalid_extension_intermediate_subject_alt_name.pem",
-    "src/crypto/x509/test/invalid_extension_intermediate_subject_key_identifier.pem",
-    "src/crypto/x509/test/invalid_extension_leaf.pem",
-    "src/crypto/x509/test/invalid_extension_leaf_authority_key_identifier.pem",
-    "src/crypto/x509/test/invalid_extension_leaf_basic_constraints.pem",
-    "src/crypto/x509/test/invalid_extension_leaf_ext_key_usage.pem",
-    "src/crypto/x509/test/invalid_extension_leaf_key_usage.pem",
-    "src/crypto/x509/test/invalid_extension_leaf_name_constraints.pem",
-    "src/crypto/x509/test/invalid_extension_leaf_subject_alt_name.pem",
-    "src/crypto/x509/test/invalid_extension_leaf_subject_key_identifier.pem",
-    "src/crypto/x509/test/invalid_extension_root.pem",
-    "src/crypto/x509/test/invalid_extension_root_authority_key_identifier.pem",
-    "src/crypto/x509/test/invalid_extension_root_basic_constraints.pem",
-    "src/crypto/x509/test/invalid_extension_root_ext_key_usage.pem",
-    "src/crypto/x509/test/invalid_extension_root_key_usage.pem",
-    "src/crypto/x509/test/invalid_extension_root_name_constraints.pem",
-    "src/crypto/x509/test/invalid_extension_root_subject_alt_name.pem",
-    "src/crypto/x509/test/invalid_extension_root_subject_key_identifier.pem",
-    "src/crypto/x509/test/many_constraints.pem",
-    "src/crypto/x509/test/many_names1.pem",
-    "src/crypto/x509/test/many_names2.pem",
-    "src/crypto/x509/test/many_names3.pem",
-    "src/crypto/x509/test/policy_intermediate.pem",
-    "src/crypto/x509/test/policy_intermediate_any.pem",
-    "src/crypto/x509/test/policy_intermediate_duplicate.pem",
-    "src/crypto/x509/test/policy_intermediate_invalid.pem",
-    "src/crypto/x509/test/policy_intermediate_mapped.pem",
-    "src/crypto/x509/test/policy_intermediate_mapped_any.pem",
-    "src/crypto/x509/test/policy_intermediate_mapped_oid3.pem",
-    "src/crypto/x509/test/policy_intermediate_require.pem",
-    "src/crypto/x509/test/policy_intermediate_require1.pem",
-    "src/crypto/x509/test/policy_intermediate_require2.pem",
-    "src/crypto/x509/test/policy_intermediate_require_duplicate.pem",
-    "src/crypto/x509/test/policy_intermediate_require_no_policies.pem",
-    "src/crypto/x509/test/policy_leaf.pem",
-    "src/crypto/x509/test/policy_leaf_any.pem",
-    "src/crypto/x509/test/policy_leaf_duplicate.pem",
-    "src/crypto/x509/test/policy_leaf_invalid.pem",
-    "src/crypto/x509/test/policy_leaf_none.pem",
-    "src/crypto/x509/test/policy_leaf_oid1.pem",
-    "src/crypto/x509/test/policy_leaf_oid2.pem",
-    "src/crypto/x509/test/policy_leaf_oid3.pem",
-    "src/crypto/x509/test/policy_leaf_oid4.pem",
-    "src/crypto/x509/test/policy_leaf_oid5.pem",
-    "src/crypto/x509/test/policy_leaf_require.pem",
-    "src/crypto/x509/test/policy_leaf_require1.pem",
-    "src/crypto/x509/test/policy_root.pem",
-    "src/crypto/x509/test/policy_root2.pem",
-    "src/crypto/x509/test/policy_root_cross_inhibit_mapping.pem",
-    "src/crypto/x509/test/pss_sha1.pem",
-    "src/crypto/x509/test/pss_sha1_explicit.pem",
-    "src/crypto/x509/test/pss_sha1_mgf1_syntax_error.pem",
-    "src/crypto/x509/test/pss_sha224.pem",
-    "src/crypto/x509/test/pss_sha256.pem",
-    "src/crypto/x509/test/pss_sha256_explicit_trailer.pem",
-    "src/crypto/x509/test/pss_sha256_mgf1_sha384.pem",
-    "src/crypto/x509/test/pss_sha256_mgf1_syntax_error.pem",
-    "src/crypto/x509/test/pss_sha256_omit_nulls.pem",
-    "src/crypto/x509/test/pss_sha256_salt31.pem",
-    "src/crypto/x509/test/pss_sha256_salt_overflow.pem",
-    "src/crypto/x509/test/pss_sha256_unknown_mgf.pem",
-    "src/crypto/x509/test/pss_sha256_wrong_trailer.pem",
-    "src/crypto/x509/test/pss_sha384.pem",
-    "src/crypto/x509/test/pss_sha512.pem",
-    "src/crypto/x509/test/some_names1.pem",
-    "src/crypto/x509/test/some_names2.pem",
-    "src/crypto/x509/test/some_names3.pem",
-    "src/crypto/x509/test/trailing_data_leaf_authority_key_identifier.pem",
-    "src/crypto/x509/test/trailing_data_leaf_basic_constraints.pem",
-    "src/crypto/x509/test/trailing_data_leaf_ext_key_usage.pem",
-    "src/crypto/x509/test/trailing_data_leaf_key_usage.pem",
-    "src/crypto/x509/test/trailing_data_leaf_name_constraints.pem",
-    "src/crypto/x509/test/trailing_data_leaf_subject_alt_name.pem",
-    "src/crypto/x509/test/trailing_data_leaf_subject_key_identifier.pem",
-    "src/third_party/wycheproof_testvectors/aes_cbc_pkcs5_test.txt",
-    "src/third_party/wycheproof_testvectors/aes_cmac_test.txt",
-    "src/third_party/wycheproof_testvectors/aes_eax_test.txt",
-    "src/third_party/wycheproof_testvectors/aes_gcm_siv_test.txt",
-    "src/third_party/wycheproof_testvectors/aes_gcm_test.txt",
-    "src/third_party/wycheproof_testvectors/chacha20_poly1305_test.txt",
-    "src/third_party/wycheproof_testvectors/dsa_test.txt",
-    "src/third_party/wycheproof_testvectors/ecdh_secp224r1_test.txt",
-    "src/third_party/wycheproof_testvectors/ecdh_secp256r1_test.txt",
-    "src/third_party/wycheproof_testvectors/ecdh_secp384r1_test.txt",
-    "src/third_party/wycheproof_testvectors/ecdh_secp521r1_test.txt",
-    "src/third_party/wycheproof_testvectors/ecdsa_secp224r1_sha224_test.txt",
-    "src/third_party/wycheproof_testvectors/ecdsa_secp224r1_sha256_test.txt",
-    "src/third_party/wycheproof_testvectors/ecdsa_secp224r1_sha512_test.txt",
-    "src/third_party/wycheproof_testvectors/ecdsa_secp256r1_sha256_test.txt",
-    "src/third_party/wycheproof_testvectors/ecdsa_secp256r1_sha512_test.txt",
-    "src/third_party/wycheproof_testvectors/ecdsa_secp384r1_sha384_test.txt",
-    "src/third_party/wycheproof_testvectors/ecdsa_secp384r1_sha512_test.txt",
-    "src/third_party/wycheproof_testvectors/ecdsa_secp521r1_sha512_test.txt",
-    "src/third_party/wycheproof_testvectors/eddsa_test.txt",
-    "src/third_party/wycheproof_testvectors/hkdf_sha1_test.txt",
-    "src/third_party/wycheproof_testvectors/hkdf_sha256_test.txt",
-    "src/third_party/wycheproof_testvectors/hkdf_sha384_test.txt",
-    "src/third_party/wycheproof_testvectors/hkdf_sha512_test.txt",
-    "src/third_party/wycheproof_testvectors/hmac_sha1_test.txt",
-    "src/third_party/wycheproof_testvectors/hmac_sha224_test.txt",
-    "src/third_party/wycheproof_testvectors/hmac_sha256_test.txt",
-    "src/third_party/wycheproof_testvectors/hmac_sha384_test.txt",
-    "src/third_party/wycheproof_testvectors/hmac_sha512_test.txt",
-    "src/third_party/wycheproof_testvectors/kw_test.txt",
-    "src/third_party/wycheproof_testvectors/kwp_test.txt",
-    "src/third_party/wycheproof_testvectors/mldsa_65_standard_sign_test.txt",
-    "src/third_party/wycheproof_testvectors/mldsa_65_standard_verify_test.txt",
-    "src/third_party/wycheproof_testvectors/mldsa_87_standard_sign_test.txt",
-    "src/third_party/wycheproof_testvectors/mldsa_87_standard_verify_test.txt",
-    "src/third_party/wycheproof_testvectors/primality_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_oaep_2048_sha1_mgf1sha1_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_oaep_2048_sha224_mgf1sha1_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_oaep_2048_sha224_mgf1sha224_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_oaep_2048_sha256_mgf1sha1_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_oaep_2048_sha256_mgf1sha256_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_oaep_2048_sha384_mgf1sha1_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_oaep_2048_sha384_mgf1sha384_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_oaep_2048_sha512_mgf1sha1_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_oaep_2048_sha512_mgf1sha512_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_oaep_3072_sha256_mgf1sha1_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_oaep_3072_sha256_mgf1sha256_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_oaep_3072_sha512_mgf1sha1_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_oaep_3072_sha512_mgf1sha512_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_oaep_4096_sha256_mgf1sha1_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_oaep_4096_sha256_mgf1sha256_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_oaep_4096_sha512_mgf1sha1_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_oaep_4096_sha512_mgf1sha512_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_oaep_misc_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_pkcs1_2048_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_pkcs1_3072_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_pkcs1_4096_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_pss_2048_sha1_mgf1_20_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_pss_2048_sha256_mgf1_0_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_pss_2048_sha256_mgf1_32_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_pss_3072_sha256_mgf1_32_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_pss_4096_sha256_mgf1_32_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_pss_4096_sha512_mgf1_32_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_pss_misc_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_sig_gen_misc_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_signature_2048_sha224_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_signature_2048_sha256_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_signature_2048_sha384_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_signature_2048_sha512_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_signature_3072_sha256_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_signature_3072_sha384_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_signature_3072_sha512_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_signature_4096_sha384_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_signature_4096_sha512_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_signature_test.txt",
-    "src/third_party/wycheproof_testvectors/x25519_test.txt",
-    "src/third_party/wycheproof_testvectors/xchacha20_poly1305_test.txt",
-]
-
-pki_test_data = [
-    "src/pki/testdata/cert_issuer_source_static_unittest/c1.pem",
-    "src/pki/testdata/cert_issuer_source_static_unittest/c2.pem",
-    "src/pki/testdata/cert_issuer_source_static_unittest/d.pem",
-    "src/pki/testdata/cert_issuer_source_static_unittest/e1.pem",
-    "src/pki/testdata/cert_issuer_source_static_unittest/e2.pem",
-    "src/pki/testdata/cert_issuer_source_static_unittest/i1_1.pem",
-    "src/pki/testdata/cert_issuer_source_static_unittest/i1_2.pem",
-    "src/pki/testdata/cert_issuer_source_static_unittest/i2.pem",
-    "src/pki/testdata/cert_issuer_source_static_unittest/i3_1.pem",
-    "src/pki/testdata/cert_issuer_source_static_unittest/i3_2.pem",
-    "src/pki/testdata/cert_issuer_source_static_unittest/root.pem",
-    "src/pki/testdata/certificate_policies_unittest/anypolicy.pem",
-    "src/pki/testdata/certificate_policies_unittest/anypolicy_with_qualifier.pem",
-    "src/pki/testdata/certificate_policies_unittest/invalid-anypolicy_with_custom_qualifier.pem",
-    "src/pki/testdata/certificate_policies_unittest/invalid-empty.pem",
-    "src/pki/testdata/certificate_policies_unittest/invalid-policy_1_2_3_dupe.pem",
-    "src/pki/testdata/certificate_policies_unittest/invalid-policy_1_2_3_policyinformation_unconsumed_data.pem",
-    "src/pki/testdata/certificate_policies_unittest/invalid-policy_1_2_3_policyqualifierinfo_unconsumed_data.pem",
-    "src/pki/testdata/certificate_policies_unittest/invalid-policy_1_2_3_with_empty_qualifiers_sequence.pem",
-    "src/pki/testdata/certificate_policies_unittest/invalid-policy_identifier_not_oid.pem",
-    "src/pki/testdata/certificate_policies_unittest/policy_1_2_3.pem",
-    "src/pki/testdata/certificate_policies_unittest/policy_1_2_3_and_1_2_4.pem",
-    "src/pki/testdata/certificate_policies_unittest/policy_1_2_3_and_1_2_4_with_qualifiers.pem",
-    "src/pki/testdata/certificate_policies_unittest/policy_1_2_3_with_custom_qualifier.pem",
-    "src/pki/testdata/certificate_policies_unittest/policy_1_2_3_with_qualifier.pem",
-    "src/pki/testdata/crl_unittest/bad_crldp_has_crlissuer.pem",
-    "src/pki/testdata/crl_unittest/bad_fake_critical_crlentryextension.pem",
-    "src/pki/testdata/crl_unittest/bad_fake_critical_extension.pem",
-    "src/pki/testdata/crl_unittest/bad_idp_contains_wrong_uri.pem",
-    "src/pki/testdata/crl_unittest/bad_idp_indirectcrl.pem",
-    "src/pki/testdata/crl_unittest/bad_idp_onlycontainscacerts.pem",
-    "src/pki/testdata/crl_unittest/bad_idp_onlycontainscacerts_no_basic_constraints.pem",
-    "src/pki/testdata/crl_unittest/bad_idp_onlycontainsusercerts.pem",
-    "src/pki/testdata/crl_unittest/bad_idp_uri_and_onlycontainscacerts.pem",
-    "src/pki/testdata/crl_unittest/bad_idp_uri_and_onlycontainsusercerts.pem",
-    "src/pki/testdata/crl_unittest/bad_key_rollover_signature.pem",
-    "src/pki/testdata/crl_unittest/bad_nextupdate_too_old.pem",
-    "src/pki/testdata/crl_unittest/bad_signature.pem",
-    "src/pki/testdata/crl_unittest/bad_thisupdate_in_future.pem",
-    "src/pki/testdata/crl_unittest/bad_thisupdate_too_old.pem",
-    "src/pki/testdata/crl_unittest/bad_wrong_issuer.pem",
-    "src/pki/testdata/crl_unittest/good.pem",
-    "src/pki/testdata/crl_unittest/good_fake_extension.pem",
-    "src/pki/testdata/crl_unittest/good_fake_extension_no_nextupdate.pem",
-    "src/pki/testdata/crl_unittest/good_generalizedtime.pem",
-    "src/pki/testdata/crl_unittest/good_idp_contains_uri.pem",
-    "src/pki/testdata/crl_unittest/good_idp_onlycontainscacerts.pem",
-    "src/pki/testdata/crl_unittest/good_idp_onlycontainsusercerts.pem",
-    "src/pki/testdata/crl_unittest/good_idp_onlycontainsusercerts_no_basic_constraints.pem",
-    "src/pki/testdata/crl_unittest/good_idp_uri_and_onlycontainscacerts.pem",
-    "src/pki/testdata/crl_unittest/good_idp_uri_and_onlycontainsusercerts.pem",
-    "src/pki/testdata/crl_unittest/good_issuer_name_normalization.pem",
-    "src/pki/testdata/crl_unittest/good_issuer_no_keyusage.pem",
-    "src/pki/testdata/crl_unittest/good_key_rollover.pem",
-    "src/pki/testdata/crl_unittest/good_no_crldp.pem",
-    "src/pki/testdata/crl_unittest/good_no_nextupdate.pem",
-    "src/pki/testdata/crl_unittest/good_no_version.pem",
-    "src/pki/testdata/crl_unittest/invalid_garbage_after_crlentryextensions.pem",
-    "src/pki/testdata/crl_unittest/invalid_garbage_after_extensions.pem",
-    "src/pki/testdata/crl_unittest/invalid_garbage_after_nextupdate.pem",
-    "src/pki/testdata/crl_unittest/invalid_garbage_after_revocationdate.pem",
-    "src/pki/testdata/crl_unittest/invalid_garbage_after_revokedcerts.pem",
-    "src/pki/testdata/crl_unittest/invalid_garbage_after_signaturevalue.pem",
-    "src/pki/testdata/crl_unittest/invalid_garbage_after_thisupdate.pem",
-    "src/pki/testdata/crl_unittest/invalid_garbage_crlentry.pem",
-    "src/pki/testdata/crl_unittest/invalid_garbage_issuer_name.pem",
-    "src/pki/testdata/crl_unittest/invalid_garbage_revocationdate.pem",
-    "src/pki/testdata/crl_unittest/invalid_garbage_revoked_serial_number.pem",
-    "src/pki/testdata/crl_unittest/invalid_garbage_signaturealgorithm.pem",
-    "src/pki/testdata/crl_unittest/invalid_garbage_signaturevalue.pem",
-    "src/pki/testdata/crl_unittest/invalid_garbage_tbs_signature_algorithm.pem",
-    "src/pki/testdata/crl_unittest/invalid_garbage_tbscertlist.pem",
-    "src/pki/testdata/crl_unittest/invalid_garbage_thisupdate.pem",
-    "src/pki/testdata/crl_unittest/invalid_garbage_version.pem",
-    "src/pki/testdata/crl_unittest/invalid_idp_dpname_choice_extra_data.pem",
-    "src/pki/testdata/crl_unittest/invalid_idp_empty_sequence.pem",
-    "src/pki/testdata/crl_unittest/invalid_idp_onlycontains_user_and_ca_certs.pem",
-    "src/pki/testdata/crl_unittest/invalid_idp_onlycontainsusercerts_v1_leaf.pem",
-    "src/pki/testdata/crl_unittest/invalid_issuer_keyusage_no_crlsign.pem",
-    "src/pki/testdata/crl_unittest/invalid_key_rollover_issuer_keyusage_no_crlsign.pem",
-    "src/pki/testdata/crl_unittest/invalid_mismatched_signature_algorithm.pem",
-    "src/pki/testdata/crl_unittest/invalid_revoked_empty_sequence.pem",
-    "src/pki/testdata/crl_unittest/invalid_v1_explicit.pem",
-    "src/pki/testdata/crl_unittest/invalid_v1_with_crlentryextension.pem",
-    "src/pki/testdata/crl_unittest/invalid_v1_with_extension.pem",
-    "src/pki/testdata/crl_unittest/invalid_v3.pem",
-    "src/pki/testdata/crl_unittest/revoked.pem",
-    "src/pki/testdata/crl_unittest/revoked_fake_crlentryextension.pem",
-    "src/pki/testdata/crl_unittest/revoked_generalized_revocationdate.pem",
-    "src/pki/testdata/crl_unittest/revoked_key_rollover.pem",
-    "src/pki/testdata/crl_unittest/revoked_no_nextupdate.pem",
-    "src/pki/testdata/name_constraints_unittest/directoryname-excludeall.pem",
-    "src/pki/testdata/name_constraints_unittest/directoryname-excluded.pem",
-    "src/pki/testdata/name_constraints_unittest/directoryname.pem",
-    "src/pki/testdata/name_constraints_unittest/directoryname_and_dnsname.pem",
-    "src/pki/testdata/name_constraints_unittest/directoryname_and_dnsname_and_ipaddress.pem",
-    "src/pki/testdata/name_constraints_unittest/dnsname-exclude_dot.pem",
-    "src/pki/testdata/name_constraints_unittest/dnsname-excludeall.pem",
-    "src/pki/testdata/name_constraints_unittest/dnsname-excluded.pem",
-    "src/pki/testdata/name_constraints_unittest/dnsname-excluded_with_leading_dot.pem",
-    "src/pki/testdata/name_constraints_unittest/dnsname-permitted_two_dot.pem",
-    "src/pki/testdata/name_constraints_unittest/dnsname-permitted_with_leading_dot.pem",
-    "src/pki/testdata/name_constraints_unittest/dnsname-with_max.pem",
-    "src/pki/testdata/name_constraints_unittest/dnsname-with_min_0.pem",
-    "src/pki/testdata/name_constraints_unittest/dnsname-with_min_0_and_max.pem",
-    "src/pki/testdata/name_constraints_unittest/dnsname-with_min_1.pem",
-    "src/pki/testdata/name_constraints_unittest/dnsname-with_min_1_and_max.pem",
-    "src/pki/testdata/name_constraints_unittest/dnsname.pem",
-    "src/pki/testdata/name_constraints_unittest/dnsname2.pem",
-    "src/pki/testdata/name_constraints_unittest/edipartyname-excluded.pem",
-    "src/pki/testdata/name_constraints_unittest/edipartyname-permitted.pem",
-    "src/pki/testdata/name_constraints_unittest/invalid-empty_excluded_subtree.pem",
-    "src/pki/testdata/name_constraints_unittest/invalid-empty_permitted_subtree.pem",
-    "src/pki/testdata/name_constraints_unittest/invalid-no_subtrees.pem",
-    "src/pki/testdata/name_constraints_unittest/ipaddress-excludeall.pem",
-    "src/pki/testdata/name_constraints_unittest/ipaddress-excluded.pem",
-    "src/pki/testdata/name_constraints_unittest/ipaddress-invalid_addr.pem",
-    "src/pki/testdata/name_constraints_unittest/ipaddress-invalid_mask_not_contiguous_1.pem",
-    "src/pki/testdata/name_constraints_unittest/ipaddress-invalid_mask_not_contiguous_2.pem",
-    "src/pki/testdata/name_constraints_unittest/ipaddress-invalid_mask_not_contiguous_3.pem",
-    "src/pki/testdata/name_constraints_unittest/ipaddress-invalid_mask_not_contiguous_4.pem",
-    "src/pki/testdata/name_constraints_unittest/ipaddress-mapped_addrs.pem",
-    "src/pki/testdata/name_constraints_unittest/ipaddress-permit_all.pem",
-    "src/pki/testdata/name_constraints_unittest/ipaddress-permit_prefix1.pem",
-    "src/pki/testdata/name_constraints_unittest/ipaddress-permit_prefix31.pem",
-    "src/pki/testdata/name_constraints_unittest/ipaddress-permit_singlehost.pem",
-    "src/pki/testdata/name_constraints_unittest/ipaddress.pem",
-    "src/pki/testdata/name_constraints_unittest/name-ca.pem",
-    "src/pki/testdata/name_constraints_unittest/name-de.pem",
-    "src/pki/testdata/name_constraints_unittest/name-empty.pem",
-    "src/pki/testdata/name_constraints_unittest/name-jp-tokyo.pem",
-    "src/pki/testdata/name_constraints_unittest/name-jp.pem",
-    "src/pki/testdata/name_constraints_unittest/name-us-arizona-1.1.1.1.pem",
-    "src/pki/testdata/name_constraints_unittest/name-us-arizona-192.168.1.1.pem",
-    "src/pki/testdata/name_constraints_unittest/name-us-arizona-email-invalidstring.pem",
-    "src/pki/testdata/name_constraints_unittest/name-us-arizona-email-localpartcase.pem",
-    "src/pki/testdata/name_constraints_unittest/name-us-arizona-email-multiple.pem",
-    "src/pki/testdata/name_constraints_unittest/name-us-arizona-email.pem",
-    "src/pki/testdata/name_constraints_unittest/name-us-arizona-foo.com.pem",
-    "src/pki/testdata/name_constraints_unittest/name-us-arizona-ipv6.pem",
-    "src/pki/testdata/name_constraints_unittest/name-us-arizona-permitted.example.com.pem",
-    "src/pki/testdata/name_constraints_unittest/name-us-arizona.pem",
-    "src/pki/testdata/name_constraints_unittest/name-us-california-192.168.1.1.pem",
-    "src/pki/testdata/name_constraints_unittest/name-us-california-mountain_view.pem",
-    "src/pki/testdata/name_constraints_unittest/name-us-california-permitted.example.com.pem",
-    "src/pki/testdata/name_constraints_unittest/name-us-california.pem",
-    "src/pki/testdata/name_constraints_unittest/name-us.pem",
-    "src/pki/testdata/name_constraints_unittest/othername-excluded.pem",
-    "src/pki/testdata/name_constraints_unittest/othername-permitted.pem",
-    "src/pki/testdata/name_constraints_unittest/registeredid-excluded.pem",
-    "src/pki/testdata/name_constraints_unittest/registeredid-permitted.pem",
-    "src/pki/testdata/name_constraints_unittest/rfc822name-excluded-empty.pem",
-    "src/pki/testdata/name_constraints_unittest/rfc822name-excluded-hostname.pem",
-    "src/pki/testdata/name_constraints_unittest/rfc822name-excluded-hostnamewithat.pem",
-    "src/pki/testdata/name_constraints_unittest/rfc822name-excluded-ipv4.pem",
-    "src/pki/testdata/name_constraints_unittest/rfc822name-excluded-quoted.pem",
-    "src/pki/testdata/name_constraints_unittest/rfc822name-excluded-subdomains.pem",
-    "src/pki/testdata/name_constraints_unittest/rfc822name-excluded.pem",
-    "src/pki/testdata/name_constraints_unittest/rfc822name-permitted-empty.pem",
-    "src/pki/testdata/name_constraints_unittest/rfc822name-permitted-hostname.pem",
-    "src/pki/testdata/name_constraints_unittest/rfc822name-permitted-hostnamewithat.pem",
-    "src/pki/testdata/name_constraints_unittest/rfc822name-permitted-ipv4.pem",
-    "src/pki/testdata/name_constraints_unittest/rfc822name-permitted-quoted.pem",
-    "src/pki/testdata/name_constraints_unittest/rfc822name-permitted-subdomains.pem",
-    "src/pki/testdata/name_constraints_unittest/rfc822name-permitted.pem",
-    "src/pki/testdata/name_constraints_unittest/san-directoryname.pem",
-    "src/pki/testdata/name_constraints_unittest/san-dnsname.pem",
-    "src/pki/testdata/name_constraints_unittest/san-edipartyname.pem",
-    "src/pki/testdata/name_constraints_unittest/san-excluded-directoryname.pem",
-    "src/pki/testdata/name_constraints_unittest/san-excluded-dnsname.pem",
-    "src/pki/testdata/name_constraints_unittest/san-excluded-ipaddress.pem",
-    "src/pki/testdata/name_constraints_unittest/san-invalid-empty.pem",
-    "src/pki/testdata/name_constraints_unittest/san-invalid-ipaddress.pem",
-    "src/pki/testdata/name_constraints_unittest/san-ipaddress4.pem",
-    "src/pki/testdata/name_constraints_unittest/san-ipaddress6.pem",
-    "src/pki/testdata/name_constraints_unittest/san-othername.pem",
-    "src/pki/testdata/name_constraints_unittest/san-permitted.pem",
-    "src/pki/testdata/name_constraints_unittest/san-registeredid.pem",
-    "src/pki/testdata/name_constraints_unittest/san-rfc822name-domaincase.pem",
-    "src/pki/testdata/name_constraints_unittest/san-rfc822name-empty-localpart.pem",
-    "src/pki/testdata/name_constraints_unittest/san-rfc822name-empty.pem",
-    "src/pki/testdata/name_constraints_unittest/san-rfc822name-ipv4.pem",
-    "src/pki/testdata/name_constraints_unittest/san-rfc822name-localpartcase.pem",
-    "src/pki/testdata/name_constraints_unittest/san-rfc822name-multiple.pem",
-    "src/pki/testdata/name_constraints_unittest/san-rfc822name-no-at.pem",
-    "src/pki/testdata/name_constraints_unittest/san-rfc822name-quoted.pem",
-    "src/pki/testdata/name_constraints_unittest/san-rfc822name-subdomain-no-at.pem",
-    "src/pki/testdata/name_constraints_unittest/san-rfc822name-subdomain-two-ats.pem",
-    "src/pki/testdata/name_constraints_unittest/san-rfc822name-subdomain.pem",
-    "src/pki/testdata/name_constraints_unittest/san-rfc822name-subdomaincase.pem",
-    "src/pki/testdata/name_constraints_unittest/san-rfc822name-two-ats.pem",
-    "src/pki/testdata/name_constraints_unittest/san-rfc822name.pem",
-    "src/pki/testdata/name_constraints_unittest/san-uri.pem",
-    "src/pki/testdata/name_constraints_unittest/san-x400address.pem",
-    "src/pki/testdata/name_constraints_unittest/uri-excluded.pem",
-    "src/pki/testdata/name_constraints_unittest/uri-permitted.pem",
-    "src/pki/testdata/name_constraints_unittest/x400address-excluded.pem",
-    "src/pki/testdata/name_constraints_unittest/x400address-permitted.pem",
-    "src/pki/testdata/nist-pkits/certs/AllCertificatesNoPoliciesTest2EE.crt",
-    "src/pki/testdata/nist-pkits/certs/AllCertificatesSamePoliciesTest10EE.crt",
-    "src/pki/testdata/nist-pkits/certs/AllCertificatesSamePoliciesTest13EE.crt",
-    "src/pki/testdata/nist-pkits/certs/AllCertificatesanyPolicyTest11EE.crt",
-    "src/pki/testdata/nist-pkits/certs/AnyPolicyTest14EE.crt",
-    "src/pki/testdata/nist-pkits/certs/BadCRLIssuerNameCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/BadCRLSignatureCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/BadSignedCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/BadnotAfterDateCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/BadnotBeforeDateCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/BasicSelfIssuedCRLSigningKeyCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/BasicSelfIssuedCRLSigningKeyCRLCert.crt",
-    "src/pki/testdata/nist-pkits/certs/BasicSelfIssuedNewKeyCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/BasicSelfIssuedNewKeyOldWithNewCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/BasicSelfIssuedOldKeyCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/BasicSelfIssuedOldKeyNewWithOldCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/CPSPointerQualifierTest20EE.crt",
-    "src/pki/testdata/nist-pkits/certs/DSACACert.crt",
-    "src/pki/testdata/nist-pkits/certs/DSAParametersInheritedCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/DifferentPoliciesTest12EE.crt",
-    "src/pki/testdata/nist-pkits/certs/DifferentPoliciesTest3EE.crt",
-    "src/pki/testdata/nist-pkits/certs/DifferentPoliciesTest4EE.crt",
-    "src/pki/testdata/nist-pkits/certs/DifferentPoliciesTest5EE.crt",
-    "src/pki/testdata/nist-pkits/certs/DifferentPoliciesTest7EE.crt",
-    "src/pki/testdata/nist-pkits/certs/DifferentPoliciesTest8EE.crt",
-    "src/pki/testdata/nist-pkits/certs/DifferentPoliciesTest9EE.crt",
-    "src/pki/testdata/nist-pkits/certs/GeneralizedTimeCRLnextUpdateCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/GoodCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/GoodsubCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/GoodsubCAPanyPolicyMapping1to2CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidBadCRLIssuerNameTest5EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidBadCRLSignatureTest4EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidBasicSelfIssuedCRLSigningKeyTest7EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidBasicSelfIssuedCRLSigningKeyTest8EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidBasicSelfIssuedNewWithOldTest5EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidBasicSelfIssuedOldWithNewTest2EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidCASignatureTest2EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidCAnotAfterDateTest5EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidCAnotBeforeDateTest1EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidDNSnameConstraintsTest31EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidDNSnameConstraintsTest33EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidDNSnameConstraintsTest38EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidDNandRFC822nameConstraintsTest28EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidDNandRFC822nameConstraintsTest29EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidDNnameConstraintsTest10EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidDNnameConstraintsTest12EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidDNnameConstraintsTest13EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidDNnameConstraintsTest15EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidDNnameConstraintsTest16EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidDNnameConstraintsTest17EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidDNnameConstraintsTest20EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidDNnameConstraintsTest2EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidDNnameConstraintsTest3EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidDNnameConstraintsTest7EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidDNnameConstraintsTest8EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidDNnameConstraintsTest9EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidDSASignatureTest6EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidEESignatureTest3EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidEEnotAfterDateTest6EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidEEnotBeforeDateTest2EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidIDPwithindirectCRLTest23EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidIDPwithindirectCRLTest26EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidLongSerialNumberTest18EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidMappingFromanyPolicyTest7EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidMappingToanyPolicyTest8EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidMissingCRLTest1EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidMissingbasicConstraintsTest1EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidNameChainingOrderTest2EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidNameChainingTest1EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidNegativeSerialNumberTest15EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidOldCRLnextUpdateTest11EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidPolicyMappingTest10EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidPolicyMappingTest2EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidPolicyMappingTest4EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidRFC822nameConstraintsTest22EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidRFC822nameConstraintsTest24EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidRFC822nameConstraintsTest26EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidRevokedCATest2EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidRevokedEETest3EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidSelfIssuedinhibitAnyPolicyTest10EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidSelfIssuedinhibitAnyPolicyTest8EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidSelfIssuedinhibitPolicyMappingTest10EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidSelfIssuedinhibitPolicyMappingTest11EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidSelfIssuedinhibitPolicyMappingTest8EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidSelfIssuedinhibitPolicyMappingTest9EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidSelfIssuedpathLenConstraintTest16EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidSelfIssuedrequireExplicitPolicyTest7EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidSelfIssuedrequireExplicitPolicyTest8EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidSeparateCertificateandCRLKeysTest20EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidSeparateCertificateandCRLKeysTest21EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidURInameConstraintsTest35EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidURInameConstraintsTest37EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidUnknownCRLEntryExtensionTest8EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidUnknownCRLExtensionTest10EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidUnknownCRLExtensionTest9EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidUnknownCriticalCertificateExtensionTest2EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidWrongCRLTest6EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidcAFalseTest2EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidcAFalseTest3EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidcRLIssuerTest27EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidcRLIssuerTest31EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidcRLIssuerTest32EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidcRLIssuerTest34EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidcRLIssuerTest35EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvaliddeltaCRLIndicatorNoBaseTest1EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvaliddeltaCRLTest10EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvaliddeltaCRLTest3EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvaliddeltaCRLTest4EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvaliddeltaCRLTest6EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvaliddeltaCRLTest9EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvaliddistributionPointTest2EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvaliddistributionPointTest3EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvaliddistributionPointTest6EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvaliddistributionPointTest8EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvaliddistributionPointTest9EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidinhibitAnyPolicyTest1EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidinhibitAnyPolicyTest4EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidinhibitAnyPolicyTest5EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidinhibitAnyPolicyTest6EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidinhibitPolicyMappingTest1EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidinhibitPolicyMappingTest3EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidinhibitPolicyMappingTest5EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidinhibitPolicyMappingTest6EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidkeyUsageCriticalcRLSignFalseTest4EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidkeyUsageCriticalkeyCertSignFalseTest1EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidkeyUsageNotCriticalcRLSignFalseTest5EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidkeyUsageNotCriticalkeyCertSignFalseTest2EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidonlyContainsAttributeCertsTest14EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidonlyContainsCACertsTest12EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidonlyContainsUserCertsTest11EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidonlySomeReasonsTest15EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidonlySomeReasonsTest16EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidonlySomeReasonsTest17EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidonlySomeReasonsTest20EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidonlySomeReasonsTest21EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidpathLenConstraintTest10EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidpathLenConstraintTest11EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidpathLenConstraintTest12EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidpathLenConstraintTest5EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidpathLenConstraintTest6EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidpathLenConstraintTest9EE.crt",
-    "src/pki/testdata/nist-pkits/certs/Invalidpre2000CRLnextUpdateTest12EE.crt",
-    "src/pki/testdata/nist-pkits/certs/Invalidpre2000UTCEEnotAfterDateTest7EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidrequireExplicitPolicyTest3EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidrequireExplicitPolicyTest5EE.crt",
-    "src/pki/testdata/nist-pkits/certs/LongSerialNumberCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/Mapping1to2CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/MappingFromanyPolicyCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/MappingToanyPolicyCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/MissingbasicConstraintsCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/NameOrderingCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/NegativeSerialNumberCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/NoCRLCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/NoPoliciesCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/NoissuingDistributionPointCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/OldCRLnextUpdateCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/OverlappingPoliciesTest6EE.crt",
-    "src/pki/testdata/nist-pkits/certs/P12Mapping1to3CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/P12Mapping1to3subCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/P12Mapping1to3subsubCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/P1Mapping1to234CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/P1Mapping1to234subCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/P1anyPolicyMapping1to2CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/PanyPolicyMapping1to2CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/PoliciesP1234CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/PoliciesP1234subCAP123Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/PoliciesP1234subsubCAP123P12Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/PoliciesP123CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/PoliciesP123subCAP12Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/PoliciesP123subsubCAP12P1Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/PoliciesP123subsubCAP12P2Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/PoliciesP123subsubsubCAP12P2P1Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/PoliciesP12CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/PoliciesP12subCAP1Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/PoliciesP12subsubCAP1P2Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/PoliciesP2subCA2Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/PoliciesP2subCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/PoliciesP3CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/RFC3280MandatoryAttributeTypesCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/RFC3280OptionalAttributeTypesCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/RevokedsubCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/RolloverfromPrintableStringtoUTF8StringCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/SeparateCertificateandCRLKeysCA2CRLSigningCert.crt",
-    "src/pki/testdata/nist-pkits/certs/SeparateCertificateandCRLKeysCA2CertificateSigningCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/SeparateCertificateandCRLKeysCRLSigningCert.crt",
-    "src/pki/testdata/nist-pkits/certs/SeparateCertificateandCRLKeysCertificateSigningCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/TrustAnchorRootCertificate.crt",
-    "src/pki/testdata/nist-pkits/certs/TwoCRLsCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/UIDCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/UTF8StringCaseInsensitiveMatchCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/UTF8StringEncodedNamesCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/UnknownCRLEntryExtensionCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/UnknownCRLExtensionCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/UserNoticeQualifierTest15EE.crt",
-    "src/pki/testdata/nist-pkits/certs/UserNoticeQualifierTest16EE.crt",
-    "src/pki/testdata/nist-pkits/certs/UserNoticeQualifierTest17EE.crt",
-    "src/pki/testdata/nist-pkits/certs/UserNoticeQualifierTest18EE.crt",
-    "src/pki/testdata/nist-pkits/certs/UserNoticeQualifierTest19EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidBasicSelfIssuedCRLSigningKeyTest6EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidBasicSelfIssuedNewWithOldTest3EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidBasicSelfIssuedNewWithOldTest4EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidBasicSelfIssuedOldWithNewTest1EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidCertificatePathTest1EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidDNSnameConstraintsTest30EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidDNSnameConstraintsTest32EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidDNandRFC822nameConstraintsTest27EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidDNnameConstraintsTest11EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidDNnameConstraintsTest14EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidDNnameConstraintsTest18EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidDNnameConstraintsTest19EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidDNnameConstraintsTest1EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidDNnameConstraintsTest4EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidDNnameConstraintsTest5EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidDNnameConstraintsTest6EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidDSAParameterInheritanceTest5EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidDSASignaturesTest4EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidGeneralizedTimeCRLnextUpdateTest13EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidGeneralizedTimenotAfterDateTest8EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidGeneralizedTimenotBeforeDateTest4EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidIDPwithindirectCRLTest22EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidIDPwithindirectCRLTest24EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidIDPwithindirectCRLTest25EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidLongSerialNumberTest16EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidLongSerialNumberTest17EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidNameChainingCapitalizationTest5EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidNameChainingWhitespaceTest3EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidNameChainingWhitespaceTest4EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidNameUIDsTest6EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidNegativeSerialNumberTest14EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidNoissuingDistributionPointTest10EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidPolicyMappingTest11EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidPolicyMappingTest12EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidPolicyMappingTest13EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidPolicyMappingTest14EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidPolicyMappingTest1EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidPolicyMappingTest3EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidPolicyMappingTest5EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidPolicyMappingTest6EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidPolicyMappingTest9EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidRFC3280MandatoryAttributeTypesTest7EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidRFC3280OptionalAttributeTypesTest8EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidRFC822nameConstraintsTest21EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidRFC822nameConstraintsTest23EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidRFC822nameConstraintsTest25EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidRolloverfromPrintableStringtoUTF8StringTest10EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidSelfIssuedinhibitAnyPolicyTest7EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidSelfIssuedinhibitAnyPolicyTest9EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidSelfIssuedinhibitPolicyMappingTest7EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidSelfIssuedpathLenConstraintTest15EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidSelfIssuedpathLenConstraintTest17EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidSelfIssuedrequireExplicitPolicyTest6EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidSeparateCertificateandCRLKeysTest19EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidTwoCRLsTest7EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidURInameConstraintsTest34EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidURInameConstraintsTest36EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidUTF8StringCaseInsensitiveMatchTest11EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidUTF8StringEncodedNamesTest9EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidUnknownNotCriticalCertificateExtensionTest1EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidbasicConstraintsNotCriticalTest4EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidcRLIssuerTest28EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidcRLIssuerTest29EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidcRLIssuerTest30EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidcRLIssuerTest33EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValiddeltaCRLTest2EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValiddeltaCRLTest5EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValiddeltaCRLTest7EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValiddeltaCRLTest8EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValiddistributionPointTest1EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValiddistributionPointTest4EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValiddistributionPointTest5EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValiddistributionPointTest7EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidinhibitAnyPolicyTest2EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidinhibitPolicyMappingTest2EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidinhibitPolicyMappingTest4EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidkeyUsageNotCriticalTest3EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidonlyContainsCACertsTest13EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidonlySomeReasonsTest18EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidonlySomeReasonsTest19EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidpathLenConstraintTest13EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidpathLenConstraintTest14EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidpathLenConstraintTest7EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidpathLenConstraintTest8EE.crt",
-    "src/pki/testdata/nist-pkits/certs/Validpre2000UTCnotBeforeDateTest3EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidrequireExplicitPolicyTest1EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidrequireExplicitPolicyTest2EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidrequireExplicitPolicyTest4EE.crt",
-    "src/pki/testdata/nist-pkits/certs/WrongCRLCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/anyPolicyCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/basicConstraintsCriticalcAFalseCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/basicConstraintsNotCriticalCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/basicConstraintsNotCriticalcAFalseCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/deltaCRLCA1Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/deltaCRLCA2Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/deltaCRLCA3Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/deltaCRLIndicatorNoBaseCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/distributionPoint1CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/distributionPoint2CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/indirectCRLCA1Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/indirectCRLCA2Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/indirectCRLCA3Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/indirectCRLCA3cRLIssuerCert.crt",
-    "src/pki/testdata/nist-pkits/certs/indirectCRLCA4Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/indirectCRLCA4cRLIssuerCert.crt",
-    "src/pki/testdata/nist-pkits/certs/indirectCRLCA5Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/indirectCRLCA6Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/inhibitAnyPolicy0CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/inhibitAnyPolicy1CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/inhibitAnyPolicy1SelfIssuedCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/inhibitAnyPolicy1SelfIssuedsubCA2Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/inhibitAnyPolicy1subCA1Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/inhibitAnyPolicy1subCA2Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/inhibitAnyPolicy1subCAIAP5Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/inhibitAnyPolicy1subsubCA2Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/inhibitAnyPolicy5CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/inhibitAnyPolicy5subCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/inhibitAnyPolicy5subsubCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/inhibitAnyPolicyTest3EE.crt",
-    "src/pki/testdata/nist-pkits/certs/inhibitPolicyMapping0CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/inhibitPolicyMapping0subCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/inhibitPolicyMapping1P12CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/inhibitPolicyMapping1P12subCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/inhibitPolicyMapping1P12subCAIPM5Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/inhibitPolicyMapping1P12subsubCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/inhibitPolicyMapping1P12subsubCAIPM5Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/inhibitPolicyMapping1P1CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/inhibitPolicyMapping1P1SelfIssuedCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/inhibitPolicyMapping1P1SelfIssuedsubCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/inhibitPolicyMapping1P1subCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/inhibitPolicyMapping1P1subsubCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/inhibitPolicyMapping5CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/inhibitPolicyMapping5subCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/inhibitPolicyMapping5subsubCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/inhibitPolicyMapping5subsubsubCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/keyUsageCriticalcRLSignFalseCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/keyUsageCriticalkeyCertSignFalseCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/keyUsageNotCriticalCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/keyUsageNotCriticalcRLSignFalseCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/keyUsageNotCriticalkeyCertSignFalseCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/nameConstraintsDN1CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/nameConstraintsDN1SelfIssuedCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/nameConstraintsDN1subCA1Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/nameConstraintsDN1subCA2Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/nameConstraintsDN1subCA3Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/nameConstraintsDN2CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/nameConstraintsDN3CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/nameConstraintsDN3subCA1Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/nameConstraintsDN3subCA2Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/nameConstraintsDN4CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/nameConstraintsDN5CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/nameConstraintsDNS1CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/nameConstraintsDNS2CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/nameConstraintsRFC822CA1Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/nameConstraintsRFC822CA2Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/nameConstraintsRFC822CA3Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/nameConstraintsURI1CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/nameConstraintsURI2CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/onlyContainsAttributeCertsCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/onlyContainsCACertsCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/onlyContainsUserCertsCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/onlySomeReasonsCA1Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/onlySomeReasonsCA2Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/onlySomeReasonsCA3Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/onlySomeReasonsCA4Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/pathLenConstraint0CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/pathLenConstraint0SelfIssuedCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/pathLenConstraint0subCA2Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/pathLenConstraint0subCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/pathLenConstraint1CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/pathLenConstraint1SelfIssuedCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/pathLenConstraint1SelfIssuedsubCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/pathLenConstraint1subCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/pathLenConstraint6CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/pathLenConstraint6subCA0Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/pathLenConstraint6subCA1Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/pathLenConstraint6subCA4Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/pathLenConstraint6subsubCA00Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/pathLenConstraint6subsubCA11Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/pathLenConstraint6subsubCA41Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/pathLenConstraint6subsubsubCA11XCert.crt",
-    "src/pki/testdata/nist-pkits/certs/pathLenConstraint6subsubsubCA41XCert.crt",
-    "src/pki/testdata/nist-pkits/certs/pre2000CRLnextUpdateCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy0CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy0subCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy0subsubCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy0subsubsubCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy10CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy10subCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy10subsubCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy10subsubsubCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy2CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy2SelfIssuedCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy2SelfIssuedsubCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy2subCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy4CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy4subCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy4subsubCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy4subsubsubCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy5CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy5subCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy5subsubCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy5subsubsubCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy7CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy7subCARE2Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy7subsubCARE2RE4Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy7subsubsubCARE2RE4Cert.crt",
-    "src/pki/testdata/nist-pkits/crls/BadCRLIssuerNameCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/BadCRLSignatureCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/BadSignedCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/BadnotAfterDateCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/BadnotBeforeDateCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/BasicSelfIssuedCRLSigningKeyCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/BasicSelfIssuedCRLSigningKeyCRLCertCRL.crl",
-    "src/pki/testdata/nist-pkits/crls/BasicSelfIssuedNewKeyCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/BasicSelfIssuedOldKeyCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/BasicSelfIssuedOldKeySelfIssuedCertCRL.crl",
-    "src/pki/testdata/nist-pkits/crls/DSACACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/DSAParametersInheritedCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/GeneralizedTimeCRLnextUpdateCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/GoodCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/GoodsubCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/GoodsubCAPanyPolicyMapping1to2CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/LongSerialNumberCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/Mapping1to2CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/MappingFromanyPolicyCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/MappingToanyPolicyCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/MissingbasicConstraintsCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/NameOrderCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/NegativeSerialNumberCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/NoPoliciesCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/NoissuingDistributionPointCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/OldCRLnextUpdateCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/P12Mapping1to3CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/P12Mapping1to3subCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/P12Mapping1to3subsubCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/P1Mapping1to234CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/P1Mapping1to234subCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/P1anyPolicyMapping1to2CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/PanyPolicyMapping1to2CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/PoliciesP1234CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/PoliciesP1234subCAP123CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/PoliciesP1234subsubCAP123P12CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/PoliciesP123CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/PoliciesP123subCAP12CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/PoliciesP123subsubCAP12P1CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/PoliciesP123subsubCAP2P2CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/PoliciesP123subsubsubCAP12P2P1CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/PoliciesP12CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/PoliciesP12subCAP1CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/PoliciesP12subsubCAP1P2CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/PoliciesP2subCA2CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/PoliciesP2subCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/PoliciesP3CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/RFC3280MandatoryAttributeTypesCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/RFC3280OptionalAttributeTypesCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/RevokedsubCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/RolloverfromPrintableStringtoUTF8StringCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/SeparateCertificateandCRLKeysCA2CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/SeparateCertificateandCRLKeysCRL.crl",
-    "src/pki/testdata/nist-pkits/crls/TrustAnchorRootCRL.crl",
-    "src/pki/testdata/nist-pkits/crls/TwoCRLsCABadCRL.crl",
-    "src/pki/testdata/nist-pkits/crls/TwoCRLsCAGoodCRL.crl",
-    "src/pki/testdata/nist-pkits/crls/UIDCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/UTF8StringCaseInsensitiveMatchCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/UTF8StringEncodedNamesCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/UnknownCRLEntryExtensionCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/UnknownCRLExtensionCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/WrongCRLCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/anyPolicyCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/basicConstraintsCriticalcAFalseCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/basicConstraintsNotCriticalCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/basicConstraintsNotCriticalcAFalseCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/deltaCRLCA1CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/deltaCRLCA1deltaCRL.crl",
-    "src/pki/testdata/nist-pkits/crls/deltaCRLCA2CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/deltaCRLCA2deltaCRL.crl",
-    "src/pki/testdata/nist-pkits/crls/deltaCRLCA3CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/deltaCRLCA3deltaCRL.crl",
-    "src/pki/testdata/nist-pkits/crls/deltaCRLIndicatorNoBaseCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/distributionPoint1CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/distributionPoint2CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/indirectCRLCA1CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/indirectCRLCA3CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/indirectCRLCA3cRLIssuerCRL.crl",
-    "src/pki/testdata/nist-pkits/crls/indirectCRLCA4cRLIssuerCRL.crl",
-    "src/pki/testdata/nist-pkits/crls/indirectCRLCA5CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/inhibitAnyPolicy0CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/inhibitAnyPolicy1CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/inhibitAnyPolicy1subCA1CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/inhibitAnyPolicy1subCA2CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/inhibitAnyPolicy1subCAIAP5CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/inhibitAnyPolicy1subsubCA2CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/inhibitAnyPolicy5CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/inhibitAnyPolicy5subCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/inhibitAnyPolicy5subsubCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/inhibitPolicyMapping0CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/inhibitPolicyMapping0subCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/inhibitPolicyMapping1P12CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/inhibitPolicyMapping1P12subCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/inhibitPolicyMapping1P12subCAIPM5CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/inhibitPolicyMapping1P12subsubCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/inhibitPolicyMapping1P12subsubCAIPM5CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/inhibitPolicyMapping1P1CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/inhibitPolicyMapping1P1subCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/inhibitPolicyMapping1P1subsubCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/inhibitPolicyMapping5CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/inhibitPolicyMapping5subCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/inhibitPolicyMapping5subsubCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/inhibitPolicyMapping5subsubsubCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/keyUsageCriticalcRLSignFalseCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/keyUsageCriticalkeyCertSignFalseCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/keyUsageNotCriticalCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/keyUsageNotCriticalcRLSignFalseCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/keyUsageNotCriticalkeyCertSignFalseCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/nameConstraintsDN1CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/nameConstraintsDN1subCA1CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/nameConstraintsDN1subCA2CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/nameConstraintsDN1subCA3CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/nameConstraintsDN2CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/nameConstraintsDN3CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/nameConstraintsDN3subCA1CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/nameConstraintsDN3subCA2CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/nameConstraintsDN4CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/nameConstraintsDN5CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/nameConstraintsDNS1CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/nameConstraintsDNS2CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/nameConstraintsRFC822CA1CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/nameConstraintsRFC822CA2CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/nameConstraintsRFC822CA3CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/nameConstraintsURI1CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/nameConstraintsURI2CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/onlyContainsAttributeCertsCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/onlyContainsCACertsCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/onlyContainsUserCertsCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/onlySomeReasonsCA1compromiseCRL.crl",
-    "src/pki/testdata/nist-pkits/crls/onlySomeReasonsCA1otherreasonsCRL.crl",
-    "src/pki/testdata/nist-pkits/crls/onlySomeReasonsCA2CRL1.crl",
-    "src/pki/testdata/nist-pkits/crls/onlySomeReasonsCA2CRL2.crl",
-    "src/pki/testdata/nist-pkits/crls/onlySomeReasonsCA3compromiseCRL.crl",
-    "src/pki/testdata/nist-pkits/crls/onlySomeReasonsCA3otherreasonsCRL.crl",
-    "src/pki/testdata/nist-pkits/crls/onlySomeReasonsCA4compromiseCRL.crl",
-    "src/pki/testdata/nist-pkits/crls/onlySomeReasonsCA4otherreasonsCRL.crl",
-    "src/pki/testdata/nist-pkits/crls/pathLenConstraint0CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/pathLenConstraint0subCA2CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/pathLenConstraint0subCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/pathLenConstraint1CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/pathLenConstraint1subCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/pathLenConstraint6CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/pathLenConstraint6subCA0CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/pathLenConstraint6subCA1CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/pathLenConstraint6subCA4CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/pathLenConstraint6subsubCA00CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/pathLenConstraint6subsubCA11CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/pathLenConstraint6subsubCA41CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/pathLenConstraint6subsubsubCA11XCRL.crl",
-    "src/pki/testdata/nist-pkits/crls/pathLenConstraint6subsubsubCA41XCRL.crl",
-    "src/pki/testdata/nist-pkits/crls/pre2000CRLnextUpdateCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy0CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy0subCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy0subsubCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy0subsubsubCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy10CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy10subCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy10subsubCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy10subsubsubCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy2CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy2subCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy4CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy4subCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy4subsubCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy4subsubsubCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy5CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy5subCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy5subsubCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy5subsubsubCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy7CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy7subCARE2CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy7subsubCARE2RE4CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy7subsubsubCARE2RE4CRL.crl",
-    "src/pki/testdata/ocsp_unittest/bad_ocsp_type.pem",
-    "src/pki/testdata/ocsp_unittest/bad_signature.pem",
-    "src/pki/testdata/ocsp_unittest/bad_status.pem",
-    "src/pki/testdata/ocsp_unittest/good_response.pem",
-    "src/pki/testdata/ocsp_unittest/good_response_next_update.pem",
-    "src/pki/testdata/ocsp_unittest/good_response_sha256.pem",
-    "src/pki/testdata/ocsp_unittest/has_critical_ct_extension.pem",
-    "src/pki/testdata/ocsp_unittest/has_critical_response_extension.pem",
-    "src/pki/testdata/ocsp_unittest/has_critical_single_extension.pem",
-    "src/pki/testdata/ocsp_unittest/has_extension.pem",
-    "src/pki/testdata/ocsp_unittest/has_single_extension.pem",
-    "src/pki/testdata/ocsp_unittest/has_version.pem",
-    "src/pki/testdata/ocsp_unittest/malformed_request.pem",
-    "src/pki/testdata/ocsp_unittest/missing_response.pem",
-    "src/pki/testdata/ocsp_unittest/multiple_response.pem",
-    "src/pki/testdata/ocsp_unittest/no_response.pem",
-    "src/pki/testdata/ocsp_unittest/ocsp_extra_certs.pem",
-    "src/pki/testdata/ocsp_unittest/ocsp_sign_bad_indirect.pem",
-    "src/pki/testdata/ocsp_unittest/ocsp_sign_direct.pem",
-    "src/pki/testdata/ocsp_unittest/ocsp_sign_indirect.pem",
-    "src/pki/testdata/ocsp_unittest/ocsp_sign_indirect_missing.pem",
-    "src/pki/testdata/ocsp_unittest/other_response.pem",
-    "src/pki/testdata/ocsp_unittest/responder_id.pem",
-    "src/pki/testdata/ocsp_unittest/responder_name.pem",
-    "src/pki/testdata/ocsp_unittest/revoke_response.pem",
-    "src/pki/testdata/ocsp_unittest/revoke_response_reason.pem",
-    "src/pki/testdata/ocsp_unittest/unknown_response.pem",
-    "src/pki/testdata/parse_certificate_unittest/authority_key_identifier/empty_sequence.pem",
-    "src/pki/testdata/parse_certificate_unittest/authority_key_identifier/extra_contents_after_extension_sequence.pem",
-    "src/pki/testdata/parse_certificate_unittest/authority_key_identifier/extra_contents_after_issuer_and_serial.pem",
-    "src/pki/testdata/parse_certificate_unittest/authority_key_identifier/invalid_contents.pem",
-    "src/pki/testdata/parse_certificate_unittest/authority_key_identifier/invalid_issuer.pem",
-    "src/pki/testdata/parse_certificate_unittest/authority_key_identifier/invalid_key_identifier.pem",
-    "src/pki/testdata/parse_certificate_unittest/authority_key_identifier/invalid_serial.pem",
-    "src/pki/testdata/parse_certificate_unittest/authority_key_identifier/issuer_and_serial.pem",
-    "src/pki/testdata/parse_certificate_unittest/authority_key_identifier/issuer_only.pem",
-    "src/pki/testdata/parse_certificate_unittest/authority_key_identifier/key_identifier.pem",
-    "src/pki/testdata/parse_certificate_unittest/authority_key_identifier/key_identifier_and_issuer_and_serial.pem",
-    "src/pki/testdata/parse_certificate_unittest/authority_key_identifier/serial_only.pem",
-    "src/pki/testdata/parse_certificate_unittest/authority_key_identifier/url_issuer_and_serial.pem",
-    "src/pki/testdata/parse_certificate_unittest/authority_key_identifier_not_sequence.pem",
-    "src/pki/testdata/parse_certificate_unittest/bad_key_usage.pem",
-    "src/pki/testdata/parse_certificate_unittest/bad_policy_qualifiers.pem",
-    "src/pki/testdata/parse_certificate_unittest/bad_signature_algorithm_oid.pem",
-    "src/pki/testdata/parse_certificate_unittest/bad_validity.pem",
-    "src/pki/testdata/parse_certificate_unittest/basic_constraints_ca_false.pem",
-    "src/pki/testdata/parse_certificate_unittest/basic_constraints_ca_no_path.pem",
-    "src/pki/testdata/parse_certificate_unittest/basic_constraints_ca_path_9.pem",
-    "src/pki/testdata/parse_certificate_unittest/basic_constraints_negative_path.pem",
-    "src/pki/testdata/parse_certificate_unittest/basic_constraints_not_ca.pem",
-    "src/pki/testdata/parse_certificate_unittest/basic_constraints_path_too_large.pem",
-    "src/pki/testdata/parse_certificate_unittest/basic_constraints_pathlen_255.pem",
-    "src/pki/testdata/parse_certificate_unittest/basic_constraints_pathlen_256.pem",
-    "src/pki/testdata/parse_certificate_unittest/basic_constraints_pathlen_not_ca.pem",
-    "src/pki/testdata/parse_certificate_unittest/basic_constraints_unconsumed_data.pem",
-    "src/pki/testdata/parse_certificate_unittest/cert_algorithm_not_sequence.pem",
-    "src/pki/testdata/parse_certificate_unittest/cert_data_after_signature.pem",
-    "src/pki/testdata/parse_certificate_unittest/cert_empty_sequence.pem",
-    "src/pki/testdata/parse_certificate_unittest/cert_missing_signature.pem",
-    "src/pki/testdata/parse_certificate_unittest/cert_not_sequence.pem",
-    "src/pki/testdata/parse_certificate_unittest/cert_signature_not_bit_string.pem",
-    "src/pki/testdata/parse_certificate_unittest/cert_skeleton.pem",
-    "src/pki/testdata/parse_certificate_unittest/cert_version3.pem",
-    "src/pki/testdata/parse_certificate_unittest/crldp_1uri_noissuer.pem",
-    "src/pki/testdata/parse_certificate_unittest/crldp_3uri_noissuer.pem",
-    "src/pki/testdata/parse_certificate_unittest/crldp_full_name_as_dirname.pem",
-    "src/pki/testdata/parse_certificate_unittest/crldp_issuer_as_dirname.pem",
-    "src/pki/testdata/parse_certificate_unittest/extended_key_usage.pem",
-    "src/pki/testdata/parse_certificate_unittest/extension_critical.pem",
-    "src/pki/testdata/parse_certificate_unittest/extension_critical_0.pem",
-    "src/pki/testdata/parse_certificate_unittest/extension_critical_3.pem",
-    "src/pki/testdata/parse_certificate_unittest/extension_not_critical.pem",
-    "src/pki/testdata/parse_certificate_unittest/extensions_data_after_sequence.pem",
-    "src/pki/testdata/parse_certificate_unittest/extensions_duplicate_key_usage.pem",
-    "src/pki/testdata/parse_certificate_unittest/extensions_empty_sequence.pem",
-    "src/pki/testdata/parse_certificate_unittest/extensions_not_sequence.pem",
-    "src/pki/testdata/parse_certificate_unittest/extensions_real.pem",
-    "src/pki/testdata/parse_certificate_unittest/failed_signature_algorithm.pem",
-    "src/pki/testdata/parse_certificate_unittest/inhibit_any_policy.pem",
-    "src/pki/testdata/parse_certificate_unittest/issuer_bad_printable_string.pem",
-    "src/pki/testdata/parse_certificate_unittest/key_usage.pem",
-    "src/pki/testdata/parse_certificate_unittest/name_constraints_bad_ip.pem",
-    "src/pki/testdata/parse_certificate_unittest/policies.pem",
-    "src/pki/testdata/parse_certificate_unittest/policy_constraints_empty.pem",
-    "src/pki/testdata/parse_certificate_unittest/policy_constraints_inhibit.pem",
-    "src/pki/testdata/parse_certificate_unittest/policy_constraints_inhibit_require.pem",
-    "src/pki/testdata/parse_certificate_unittest/policy_constraints_require.pem",
-    "src/pki/testdata/parse_certificate_unittest/policy_qualifiers_empty_sequence.pem",
-    "src/pki/testdata/parse_certificate_unittest/serial_37_bytes.pem",
-    "src/pki/testdata/parse_certificate_unittest/serial_negative.pem",
-    "src/pki/testdata/parse_certificate_unittest/serial_not_minimal.pem",
-    "src/pki/testdata/parse_certificate_unittest/serial_not_number.pem",
-    "src/pki/testdata/parse_certificate_unittest/serial_zero.pem",
-    "src/pki/testdata/parse_certificate_unittest/serial_zero_padded.pem",
-    "src/pki/testdata/parse_certificate_unittest/serial_zero_padded_21_bytes.pem",
-    "src/pki/testdata/parse_certificate_unittest/signature_algorithm_null.pem",
-    "src/pki/testdata/parse_certificate_unittest/subject_alt_name.pem",
-    "src/pki/testdata/parse_certificate_unittest/subject_blank_subjectaltname_not_critical.pem",
-    "src/pki/testdata/parse_certificate_unittest/subject_key_identifier_not_octet_string.pem",
-    "src/pki/testdata/parse_certificate_unittest/subject_not_ascii.pem",
-    "src/pki/testdata/parse_certificate_unittest/subject_not_printable_string.pem",
-    "src/pki/testdata/parse_certificate_unittest/subject_printable_string_containing_utf8_client_cert.pem",
-    "src/pki/testdata/parse_certificate_unittest/subject_t61string.pem",
-    "src/pki/testdata/parse_certificate_unittest/subject_t61string_1-32.pem",
-    "src/pki/testdata/parse_certificate_unittest/subject_t61string_126-160.pem",
-    "src/pki/testdata/parse_certificate_unittest/subject_t61string_actual.pem",
-    "src/pki/testdata/parse_certificate_unittest/subjectaltname_bad_ip.pem",
-    "src/pki/testdata/parse_certificate_unittest/subjectaltname_dns_not_ascii.pem",
-    "src/pki/testdata/parse_certificate_unittest/subjectaltname_general_names_empty_sequence.pem",
-    "src/pki/testdata/parse_certificate_unittest/subjectaltname_trailing_data.pem",
-    "src/pki/testdata/parse_certificate_unittest/tbs_explicit_v1.pem",
-    "src/pki/testdata/parse_certificate_unittest/tbs_v1.pem",
-    "src/pki/testdata/parse_certificate_unittest/tbs_v1_extensions.pem",
-    "src/pki/testdata/parse_certificate_unittest/tbs_v2_extensions.pem",
-    "src/pki/testdata/parse_certificate_unittest/tbs_v2_issuer_and_subject_unique_id.pem",
-    "src/pki/testdata/parse_certificate_unittest/tbs_v2_issuer_unique_id.pem",
-    "src/pki/testdata/parse_certificate_unittest/tbs_v2_no_optionals.pem",
-    "src/pki/testdata/parse_certificate_unittest/tbs_v3_all_optionals.pem",
-    "src/pki/testdata/parse_certificate_unittest/tbs_v3_data_after_extensions.pem",
-    "src/pki/testdata/parse_certificate_unittest/tbs_v3_extensions.pem",
-    "src/pki/testdata/parse_certificate_unittest/tbs_v3_extensions_not_sequence.pem",
-    "src/pki/testdata/parse_certificate_unittest/tbs_v3_no_optionals.pem",
-    "src/pki/testdata/parse_certificate_unittest/tbs_v3_real.pem",
-    "src/pki/testdata/parse_certificate_unittest/tbs_v4.pem",
-    "src/pki/testdata/parse_certificate_unittest/tbs_validity_both_generalized_time.pem",
-    "src/pki/testdata/parse_certificate_unittest/tbs_validity_both_utc_time.pem",
-    "src/pki/testdata/parse_certificate_unittest/tbs_validity_generalized_time_and_utc_time.pem",
-    "src/pki/testdata/parse_certificate_unittest/tbs_validity_relaxed.pem",
-    "src/pki/testdata/parse_certificate_unittest/tbs_validity_utc_time_and_generalized_time.pem",
-    "src/pki/testdata/parse_certificate_unittest/v1_explicit_version.pem",
-    "src/pki/testdata/path_builder_unittest/key_id_name_and_serial_prioritization/int_match_name_only.pem",
-    "src/pki/testdata/path_builder_unittest/key_id_name_and_serial_prioritization/int_matching.pem",
-    "src/pki/testdata/path_builder_unittest/key_id_name_and_serial_prioritization/int_mismatch.pem",
-    "src/pki/testdata/path_builder_unittest/key_id_name_and_serial_prioritization/root.pem",
-    "src/pki/testdata/path_builder_unittest/key_id_name_and_serial_prioritization/root2.pem",
-    "src/pki/testdata/path_builder_unittest/key_id_name_and_serial_prioritization/target.pem",
-    "src/pki/testdata/path_builder_unittest/key_id_prioritization/int_different_ski_a.pem",
-    "src/pki/testdata/path_builder_unittest/key_id_prioritization/int_different_ski_b.pem",
-    "src/pki/testdata/path_builder_unittest/key_id_prioritization/int_different_ski_c.pem",
-    "src/pki/testdata/path_builder_unittest/key_id_prioritization/int_matching_ski_a.pem",
-    "src/pki/testdata/path_builder_unittest/key_id_prioritization/int_matching_ski_b.pem",
-    "src/pki/testdata/path_builder_unittest/key_id_prioritization/int_matching_ski_c.pem",
-    "src/pki/testdata/path_builder_unittest/key_id_prioritization/int_no_ski_a.pem",
-    "src/pki/testdata/path_builder_unittest/key_id_prioritization/int_no_ski_b.pem",
-    "src/pki/testdata/path_builder_unittest/key_id_prioritization/int_no_ski_c.pem",
-    "src/pki/testdata/path_builder_unittest/key_id_prioritization/root.pem",
-    "src/pki/testdata/path_builder_unittest/key_id_prioritization/target.pem",
-    "src/pki/testdata/path_builder_unittest/multi-root-A-by-B.pem",
-    "src/pki/testdata/path_builder_unittest/multi-root-B-by-C.pem",
-    "src/pki/testdata/path_builder_unittest/multi-root-B-by-F.pem",
-    "src/pki/testdata/path_builder_unittest/multi-root-C-by-D.pem",
-    "src/pki/testdata/path_builder_unittest/multi-root-C-by-E.pem",
-    "src/pki/testdata/path_builder_unittest/multi-root-D-by-D.pem",
-    "src/pki/testdata/path_builder_unittest/multi-root-E-by-E.pem",
-    "src/pki/testdata/path_builder_unittest/multi-root-F-by-E.pem",
-    "src/pki/testdata/path_builder_unittest/precertificate/precertificate.pem",
-    "src/pki/testdata/path_builder_unittest/precertificate/root.pem",
-    "src/pki/testdata/path_builder_unittest/self_issued_prioritization/root1.pem",
-    "src/pki/testdata/path_builder_unittest/self_issued_prioritization/root1_cross.pem",
-    "src/pki/testdata/path_builder_unittest/self_issued_prioritization/root2.pem",
-    "src/pki/testdata/path_builder_unittest/self_issued_prioritization/target.pem",
-    "src/pki/testdata/path_builder_unittest/validity_date_prioritization/int_ac.pem",
-    "src/pki/testdata/path_builder_unittest/validity_date_prioritization/int_ad.pem",
-    "src/pki/testdata/path_builder_unittest/validity_date_prioritization/int_bc.pem",
-    "src/pki/testdata/path_builder_unittest/validity_date_prioritization/int_bd.pem",
-    "src/pki/testdata/path_builder_unittest/validity_date_prioritization/root.pem",
-    "src/pki/testdata/path_builder_unittest/validity_date_prioritization/target.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/basic-constraints-pathlen-0-self-issued/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/basic-constraints-pathlen-0-self-issued/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/expired-intermediate/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/expired-intermediate/not-after.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/expired-intermediate/not-before.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/expired-root/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/expired-root/not-after-ta-with-constraints.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/expired-root/not-after-ta-with-expiration-and-constraints.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/expired-root/not-after-ta-with-expiration.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/expired-root/not-after.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/expired-root/not-before-ta-with-expiration.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/expired-root/not-before.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/expired-target/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/expired-target/not-after.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/expired-target/not-before.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/incorrect-trust-anchor/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/incorrect-trust-anchor/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-and-target-wrong-signature/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-and-target-wrong-signature/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-basic-constraints-ca-false/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-basic-constraints-ca-false/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-basic-constraints-not-critical/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-basic-constraints-not-critical/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-any-and-clientauth/any.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-any-and-clientauth/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-any-and-clientauth/clientauth-strict-leaf.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-any-and-clientauth/clientauth-strict.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-any-and-clientauth/clientauth.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-any-and-clientauth/serverauth-strict-leaf.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-any-and-clientauth/serverauth-strict.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-any-and-clientauth/serverauth.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-c2pamanifest/any.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-c2pamanifest/c2pamanifest.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-c2pamanifest/c2patimestamp.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-c2pamanifest/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-c2pamanifest/clientauth.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-c2pamanifest/serverauth.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-c2patimestamping/any.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-c2patimestamping/c2pamanifest.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-c2patimestamping/c2patimestamp.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-c2patimestamping/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-c2patimestamping/clientauth.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-c2patimestamping/serverauth.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-clientauth/any.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-clientauth/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-clientauth/clientauth-strict-leaf.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-clientauth/clientauth-strict.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-clientauth/clientauth.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-clientauth/serverauth-strict-leaf.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-clientauth/serverauth-strict.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-clientauth/serverauth.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-mlsclientauth-extra/any.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-mlsclientauth-extra/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-mlsclientauth-extra/mlsclientauth.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-mlsclientauth/any.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-mlsclientauth/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-mlsclientauth/clientauth.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-mlsclientauth/mlsclientauth.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-mlsclientauth/serverauth.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-server-gated-crypto/sha1-chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-server-gated-crypto/sha1-eku-any.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-server-gated-crypto/sha1-eku-clientAuth-strict.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-server-gated-crypto/sha1-eku-clientAuth.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-server-gated-crypto/sha1-eku-serverAuth-strict.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-server-gated-crypto/sha1-eku-serverAuth.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-server-gated-crypto/sha256-chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-server-gated-crypto/sha256-eku-any.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-server-gated-crypto/sha256-eku-clientAuth-strict.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-server-gated-crypto/sha256-eku-clientAuth.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-server-gated-crypto/sha256-eku-serverAuth-strict.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-server-gated-crypto/sha256-eku-serverAuth.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-invalid-spki/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-invalid-spki/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-lacks-basic-constraints/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-lacks-basic-constraints/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-lacks-signing-key-usage/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-lacks-signing-key-usage/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-signed-with-sha1/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-signed-with-sha1/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-unknown-critical-extension/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-unknown-critical-extension/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-unknown-non-critical-extension/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-unknown-non-critical-extension/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-wrong-signature-no-authority-key-identifier/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-wrong-signature-no-authority-key-identifier/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/issuer-and-subject-not-byte-for-byte-equal/anchor.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/issuer-and-subject-not-byte-for-byte-equal/anchor.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/issuer-and-subject-not-byte-for-byte-equal/target.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/issuer-and-subject-not-byte-for-byte-equal/target.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/key-rollover/longrolloverchain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/key-rollover/longrolloverchain.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/key-rollover/newchain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/key-rollover/newchain.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/key-rollover/oldchain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/key-rollover/oldchain.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/key-rollover/rolloverchain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/key-rollover/rolloverchain.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/many-names/ok-all-types.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/many-names/ok-all-types.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/many-names/toomany-all-types.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/many-names/toomany-all-types.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/many-names/toomany-dirnames-excluded.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/many-names/toomany-dirnames-excluded.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/many-names/toomany-dirnames-permitted.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/many-names/toomany-dirnames-permitted.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/many-names/toomany-dns-excluded.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/many-names/toomany-dns-excluded.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/many-names/toomany-dns-permitted.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/many-names/toomany-dns-permitted.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/many-names/toomany-ips-excluded.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/many-names/toomany-ips-excluded.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/many-names/toomany-ips-permitted.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/many-names/toomany-ips-permitted.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/non-self-signed-root/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/non-self-signed-root/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/non-self-signed-root/ta-with-constraints.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.1.2.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.1.3.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.1.4.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.1.5.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.1.6.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.10.1.2.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.10.1.3.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.10.10.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.10.13.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.10.2.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.10.3.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.10.4.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.10.5.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.10.6.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.10.7.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.10.8.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.11.1.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.11.10.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.11.11.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.11.3.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.11.5.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.11.6.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.11.8.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.11.9.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.12.1.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.12.10.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.12.3.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.12.4.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.12.5.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.12.6.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.12.8.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.10.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.12.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.13.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.15.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.16.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.17.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.2.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.20.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.21.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.22.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.23.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.24.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.25.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.26.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.27.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.28.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.29.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.3.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.31.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.33.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.34.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.35.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.36.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.37.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.38.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.7.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.8.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.9.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.16.2.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.2.1.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.2.2.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.2.5.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.2.6.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.2.7.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.3.1.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.3.2.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.6.1.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.6.10.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.6.11.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.6.12.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.6.16.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.6.2.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.6.3.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.6.5.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.6.6.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.6.9.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.7.1.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.7.2.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.8.1.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.8.12.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.8.14.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.8.2.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.8.3.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.8.4.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.8.5.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.8.6.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.8.7.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.8.8.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.8.9.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.9.3.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.9.5.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.9.7.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.9.8.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/policies-inhibit-anypolicy-by-root-fail/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/policies-inhibit-anypolicy-by-root-fail/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/policies-inhibit-anypolicy-by-root-fail/ta-with-constraints.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/policies-inhibit-anypolicy-by-root-ok/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/policies-inhibit-anypolicy-by-root-ok/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/policies-inhibit-anypolicy-by-root-ok/ta-with-constraints.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/policies-inhibit-mapping-by-root-fail/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/policies-inhibit-mapping-by-root-fail/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/policies-inhibit-mapping-by-root-fail/ta-with-constraints.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/policies-inhibit-mapping-by-root-ok/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/policies-inhibit-mapping-by-root-ok/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/policies-inhibit-mapping-by-root-ok/ta-with-constraints.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/policies-ok/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/policies-ok/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/policies-ok/ta-with-constraints.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/policies-on-root-ok/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/policies-on-root-ok/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/policies-on-root-ok/ta-with-constraints.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/policies-on-root-wrong/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/policies-on-root-wrong/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/policies-on-root-wrong/ta-with-constraints.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/policies-required-by-root-fail/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/policies-required-by-root-fail/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/policies-required-by-root-fail/ta-with-constraints.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/policies-required-by-root-ok/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/policies-required-by-root-ok/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/policies-required-by-root-ok/ta-with-constraints.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/policy-mappings-on-root-fail/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/policy-mappings-on-root-fail/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/policy-mappings-on-root-fail/ta-with-constraints.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/policy-mappings-on-root-ok/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/policy-mappings-on-root-ok/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/policy-mappings-on-root-ok/ta-with-constraints.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/root-basic-constraints-ca-false/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/root-basic-constraints-ca-false/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/root-basic-constraints-ca-false/ta-with-constraints.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/root-eku-clientauth/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/root-eku-clientauth/serverauth-strict.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/root-eku-clientauth/serverauth-ta-with-constraints-strict.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/root-eku-clientauth/serverauth-ta-with-constraints.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/root-eku-clientauth/serverauth-ta-with-expiration-and-constraints.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/root-eku-clientauth/serverauth-ta-with-expiration.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/root-eku-clientauth/serverauth.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/root-lacks-basic-constraints/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/root-lacks-basic-constraints/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/root-lacks-basic-constraints/ta-with-constraints-require-basic-constraints.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/root-lacks-basic-constraints/ta-with-constraints.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/root-lacks-basic-constraints/ta-with-require-basic-constraints.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/root-lacks-keycertsign-key-usage/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/root-lacks-keycertsign-key-usage/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/root-lacks-keycertsign-key-usage/ta-with-constraints.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-and-intermediate/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-and-intermediate/distrusted-root-expired.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-and-intermediate/distrusted-root.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-and-intermediate/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-and-intermediate/ta-with-constraints.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-and-intermediate/ta-with-expiration.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-and-intermediate/trusted_leaf-and-trust_anchor.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-and-intermediate/trusted_leaf-root.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-and-intermediate/unspecified-trust-root.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-any/any.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-any/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-any/clientauth-strict-leaf.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-any/clientauth-strict.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-any/clientauth.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-any/mlsclientauth.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-any/serverauth-strict-leaf.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-any/serverauth-strict.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-any/serverauth.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-clientauth/any.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-clientauth/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-clientauth/clientauth-strict.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-clientauth/clientauth.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-clientauth/serverauth-strict.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-clientauth/serverauth.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-many/any.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-many/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-many/clientauth-strict-leaf.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-many/clientauth-strict.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-many/clientauth.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-many/mlsclientauth.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-many/serverauth-strict-leaf.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-many/serverauth-strict.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-many/serverauth.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-none/any.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-none/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-none/clientauth-strict-leaf.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-none/clientauth-strict.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-none/clientauth.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-none/mlsclientauth.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-none/serverauth-strict.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-none/serverauth.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-has-512bit-rsa-key/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-has-512bit-rsa-key/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-has-ca-basic-constraints/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-has-ca-basic-constraints/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-has-ca-basic-constraints/strict.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-has-ca-basic-constraints/target_only-trusted_leaf-strict.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-has-ca-basic-constraints/target_only-trusted_leaf.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-has-ca-basic-constraints/target_only.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-has-keycertsign-but-not-ca/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-has-keycertsign-but-not-ca/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-has-pathlen-but-not-ca/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-has-pathlen-but-not-ca/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-msapplicationpolicies-and-eku/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-msapplicationpolicies-and-eku/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-msapplicationpolicies-no-eku/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-msapplicationpolicies-no-eku/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-not-end-entity/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-not-end-entity/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-not-end-entity/strict-leaf.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-not-end-entity/strict.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-only/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-only/trusted_anchor.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-only/trusted_leaf-and-trust_anchor.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-only/trusted_leaf-not_after.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-only/trusted_leaf-wrong_eku.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-only/trusted_leaf.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-only/trusted_leaf_require_self_signed.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-selfissued/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-selfissued/trusted_anchor.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-selfissued/trusted_leaf-and-trust_anchor.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-selfissued/trusted_leaf.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-selfissued/trusted_leaf_require_self_signed.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-selfsigned/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-selfsigned/trusted_leaf-and-trust_anchor.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-selfsigned/trusted_leaf-not_after.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-selfsigned/trusted_leaf-wrong_eku.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-selfsigned/trusted_leaf.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-selfsigned/trusted_leaf_require_self_signed.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-serverauth-various-keyusages/ec-decipherOnly.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-serverauth-various-keyusages/ec-decipherOnly.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-serverauth-various-keyusages/ec-digitalSignature.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-serverauth-various-keyusages/ec-digitalSignature.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-serverauth-various-keyusages/ec-keyAgreement.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-serverauth-various-keyusages/ec-keyAgreement.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-serverauth-various-keyusages/ec-keyEncipherment.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-serverauth-various-keyusages/ec-keyEncipherment.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-serverauth-various-keyusages/rsa-decipherOnly.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-serverauth-various-keyusages/rsa-decipherOnly.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-serverauth-various-keyusages/rsa-digitalSignature.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-serverauth-various-keyusages/rsa-digitalSignature.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-serverauth-various-keyusages/rsa-keyAgreement.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-serverauth-various-keyusages/rsa-keyAgreement.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-serverauth-various-keyusages/rsa-keyEncipherment.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-serverauth-various-keyusages/rsa-keyEncipherment.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-signed-by-512bit-rsa/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-signed-by-512bit-rsa/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-signed-using-ecdsa/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-signed-using-ecdsa/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-signed-with-sha1/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-signed-with-sha1/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-unknown-critical-extension/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-unknown-critical-extension/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-unknown-critical-extension/target_only-trusted_leaf.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-unknown-critical-extension/target_only.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-wrong-signature-no-authority-key-identifier/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-wrong-signature-no-authority-key-identifier/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-wrong-signature/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-wrong-signature/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/unknown-critical-policy-qualifier/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/unknown-critical-policy-qualifier/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/unknown-non-critical-policy-qualifier/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/unknown-non-critical-policy-qualifier/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/violates-basic-constraints-pathlen-0/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/violates-basic-constraints-pathlen-0/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/violates-pathlen-1-from-root/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/violates-pathlen-1-from-root/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/violates-pathlen-1-from-root/ta-with-constraints.test",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-BMPSTRING-case_swap-dupe_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-BMPSTRING-case_swap-extra_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-BMPSTRING-case_swap-extra_rdn.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-BMPSTRING-case_swap.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-BMPSTRING-extra_whitespace-dupe_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-BMPSTRING-extra_whitespace-extra_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-BMPSTRING-extra_whitespace-extra_rdn.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-BMPSTRING-extra_whitespace.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-BMPSTRING-unmangled-dupe_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-BMPSTRING-unmangled-extra_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-BMPSTRING-unmangled-extra_rdn.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-BMPSTRING-unmangled.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-PRINTABLESTRING-case_swap-dupe_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-PRINTABLESTRING-case_swap-extra_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-PRINTABLESTRING-case_swap-extra_rdn.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-PRINTABLESTRING-case_swap.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-PRINTABLESTRING-extra_whitespace-dupe_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-PRINTABLESTRING-extra_whitespace-extra_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-PRINTABLESTRING-extra_whitespace-extra_rdn.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-PRINTABLESTRING-extra_whitespace.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-PRINTABLESTRING-rdn_sorting_1.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-PRINTABLESTRING-rdn_sorting_2.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-PRINTABLESTRING-unmangled-dupe_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-PRINTABLESTRING-unmangled-extra_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-PRINTABLESTRING-unmangled-extra_rdn.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-PRINTABLESTRING-unmangled.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-T61STRING-case_swap-dupe_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-T61STRING-case_swap-extra_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-T61STRING-case_swap-extra_rdn.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-T61STRING-case_swap.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-T61STRING-extra_whitespace-dupe_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-T61STRING-extra_whitespace-extra_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-T61STRING-extra_whitespace-extra_rdn.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-T61STRING-extra_whitespace.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-T61STRING-unmangled-dupe_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-T61STRING-unmangled-extra_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-T61STRING-unmangled-extra_rdn.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-T61STRING-unmangled.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-UNIVERSALSTRING-case_swap-dupe_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-UNIVERSALSTRING-case_swap-extra_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-UNIVERSALSTRING-case_swap-extra_rdn.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-UNIVERSALSTRING-case_swap.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-UNIVERSALSTRING-extra_whitespace-dupe_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-UNIVERSALSTRING-extra_whitespace-extra_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-UNIVERSALSTRING-extra_whitespace-extra_rdn.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-UNIVERSALSTRING-extra_whitespace.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-UNIVERSALSTRING-unmangled-dupe_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-UNIVERSALSTRING-unmangled-extra_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-UNIVERSALSTRING-unmangled-extra_rdn.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-UNIVERSALSTRING-unmangled.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-UTF8-case_swap-dupe_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-UTF8-case_swap-extra_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-UTF8-case_swap-extra_rdn.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-UTF8-case_swap.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-UTF8-extra_whitespace-dupe_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-UTF8-extra_whitespace-extra_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-UTF8-extra_whitespace-extra_rdn.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-UTF8-extra_whitespace.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-UTF8-unmangled-dupe_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-UTF8-unmangled-extra_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-UTF8-unmangled-extra_rdn.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-UTF8-unmangled.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-mixed-rdn_dupetype_sorting_1.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-mixed-rdn_dupetype_sorting_2.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/custom-custom-normalized.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/invalid-AttributeTypeAndValue-badAttributeType.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/invalid-AttributeTypeAndValue-empty.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/invalid-AttributeTypeAndValue-extradata.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/invalid-AttributeTypeAndValue-onlyOneElement.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/invalid-AttributeTypeAndValue-setNotSequence.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/invalid-Name-setInsteadOfSequence.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/invalid-RDN-empty.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/invalid-RDN-sequenceInsteadOfSet.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/unicode-mixed-normalized.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/unicode-mixed-unnormalized.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/unicode_bmp-BMPSTRING-unmangled.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/unicode_bmp-UNIVERSALSTRING-unmangled.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/unicode_bmp-UTF8-unmangled.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/unicode_supplementary-UNIVERSALSTRING-unmangled.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/unicode_supplementary-UTF8-unmangled.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/valid-Name-empty.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/valid-minimal.pem",
-    "src/pki/testdata/verify_signed_data_unittest/ecdsa-prime256v1-sha512-spki-params-null.pem",
-    "src/pki/testdata/verify_signed_data_unittest/ecdsa-prime256v1-sha512-unused-bits-signature.pem",
-    "src/pki/testdata/verify_signed_data_unittest/ecdsa-prime256v1-sha512-using-ecdh-key.pem",
-    "src/pki/testdata/verify_signed_data_unittest/ecdsa-prime256v1-sha512-using-ecmqv-key.pem",
-    "src/pki/testdata/verify_signed_data_unittest/ecdsa-prime256v1-sha512-using-rsa-algorithm.pem",
-    "src/pki/testdata/verify_signed_data_unittest/ecdsa-prime256v1-sha512-wrong-signature-format.pem",
-    "src/pki/testdata/verify_signed_data_unittest/ecdsa-prime256v1-sha512.pem",
-    "src/pki/testdata/verify_signed_data_unittest/ecdsa-secp384r1-sha256-corrupted-data.pem",
-    "src/pki/testdata/verify_signed_data_unittest/ecdsa-secp384r1-sha256.pem",
-    "src/pki/testdata/verify_signed_data_unittest/ecdsa-using-rsa-key.pem",
-    "src/pki/testdata/verify_signed_data_unittest/rsa-pkcs1-sha1-bad-key-der-length.pem",
-    "src/pki/testdata/verify_signed_data_unittest/rsa-pkcs1-sha1-bad-key-der-null.pem",
-    "src/pki/testdata/verify_signed_data_unittest/rsa-pkcs1-sha1-key-params-absent.pem",
-    "src/pki/testdata/verify_signed_data_unittest/rsa-pkcs1-sha1-using-pss-key-no-params.pem",
-    "src/pki/testdata/verify_signed_data_unittest/rsa-pkcs1-sha1-wrong-algorithm.pem",
-    "src/pki/testdata/verify_signed_data_unittest/rsa-pkcs1-sha1.pem",
-    "src/pki/testdata/verify_signed_data_unittest/rsa-pkcs1-sha256-key-encoded-ber.pem",
-    "src/pki/testdata/verify_signed_data_unittest/rsa-pkcs1-sha256-spki-non-null-params.pem",
-    "src/pki/testdata/verify_signed_data_unittest/rsa-pkcs1-sha256-using-ecdsa-algorithm.pem",
-    "src/pki/testdata/verify_signed_data_unittest/rsa-pkcs1-sha256-using-id-ea-rsa.pem",
-    "src/pki/testdata/verify_signed_data_unittest/rsa-pkcs1-sha256.pem",
-    "src/pki/testdata/verify_signed_data_unittest/rsa-pss-sha256-using-pss-key-with-params.pem",
-    "src/pki/testdata/verify_signed_data_unittest/rsa-pss-sha256-wrong-salt.pem",
-    "src/pki/testdata/verify_signed_data_unittest/rsa-pss-sha256.pem",
-    "src/pki/testdata/verify_signed_data_unittest/rsa-using-ec-key.pem",
-    "src/pki/testdata/verify_signed_data_unittest/rsa2048-pkcs1-sha512.pem",
-    "src/pki/testdata/verify_unittest/google-intermediate1.der",
-    "src/pki/testdata/verify_unittest/google-intermediate2.der",
-    "src/pki/testdata/verify_unittest/google-leaf.der",
-    "src/pki/testdata/verify_unittest/lencr-intermediate-r3.der",
-    "src/pki/testdata/verify_unittest/lencr-leaf.der",
-    "src/pki/testdata/verify_unittest/lencr-root-dst-x3.der",
-    "src/pki/testdata/verify_unittest/lencr-root-x1-cross-signed.der",
-    "src/pki/testdata/verify_unittest/lencr-root-x1.der",
-    "src/pki/testdata/verify_unittest/mozilla_roots.der",
-    "src/pki/testdata/verify_unittest/self-issued.pem",
-]
-
-urandom_test_sources = [
-    "src/crypto/rand/urandom_test.cc",
-]
diff --git a/CMakeLists.txt b/CMakeLists.txt
deleted file mode 100644
index 0e8bd77..0000000
--- a/CMakeLists.txt
+++ /dev/null
@@ -1,595 +0,0 @@
-# Copyright 2015 The BoringSSL Authors
-#
-# 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
-#
-#     https://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 created by generate_build_files.py. Do not edit manually.
-
-cmake_minimum_required(VERSION 3.16)
-
-project(BoringSSL LANGUAGES C CXX)
-
-set(CMAKE_CXX_STANDARD 17)
-set(CMAKE_CXX_STANDARD_REQUIRED ON)
-set(CMAKE_C_STANDARD 11)
-set(CMAKE_C_STANDARD_REQUIRED ON)
-if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
-  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden -fno-common -fno-exceptions -fno-rtti")
-  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden -fno-common")
-endif()
-
-# pthread_rwlock_t requires a feature flag on glibc.
-if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
-  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_XOPEN_SOURCE=700")
-endif()
-
-if(WIN32)
-  add_definitions(-D_HAS_EXCEPTIONS=0)
-  add_definitions(-DWIN32_LEAN_AND_MEAN)
-  add_definitions(-DNOMINMAX)
-  # Allow use of fopen.
-  add_definitions(-D_CRT_SECURE_NO_WARNINGS)
-endif()
-
-add_definitions(-DBORINGSSL_IMPLEMENTATION)
-
-if(OPENSSL_NO_ASM)
-  add_definitions(-DOPENSSL_NO_ASM)
-else()
-  # On x86 and x86_64 Windows, we use the NASM output.
-  if(WIN32 AND CMAKE_SYSTEM_PROCESSOR MATCHES "AMD64|x86_64|amd64|x86|i[3-6]86")
-    enable_language(ASM_NASM)
-    set(OPENSSL_NASM TRUE)
-    set(CMAKE_ASM_NASM_FLAGS "${CMAKE_ASM_NASM_FLAGS} -gcv8")
-  else()
-    enable_language(ASM)
-    set(OPENSSL_ASM TRUE)
-    # Work around https://gitlab.kitware.com/cmake/cmake/-/issues/20771 in older
-    # CMake versions.
-    if(APPLE AND CMAKE_VERSION VERSION_LESS 3.19)
-      if(CMAKE_OSX_SYSROOT)
-        set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -isysroot \"${CMAKE_OSX_SYSROOT}\"")
-      endif()
-      foreach(arch ${CMAKE_OSX_ARCHITECTURES})
-        set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -arch ${arch}")
-      endforeach()
-    endif()
-    if(NOT WIN32)
-      set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -Wa,--noexecstack")
-    endif()
-    # Clang's integerated assembler does not support debug symbols.
-    if(NOT CMAKE_ASM_COMPILER_ID MATCHES "Clang")
-      set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -Wa,-g")
-    endif()
-  endif()
-endif()
-
-if(BUILD_SHARED_LIBS)
-  add_definitions(-DBORINGSSL_SHARED_LIBRARY)
-  # Enable position-independent code globally. This is needed because
-  # some library targets are OBJECT libraries.
-  set(CMAKE_POSITION_INDEPENDENT_CODE TRUE)
-endif()
-
-set(
-  CRYPTO_SOURCES_ASM
-
-  src/crypto/curve25519/asm/x25519-asm-arm.S
-  src/crypto/hrss/asm/poly_rq_mul.S
-  src/crypto/poly1305/poly1305_arm_asm.S
-  src/gen/bcm/aes-gcm-avx2-x86_64-apple.S
-  src/gen/bcm/aes-gcm-avx2-x86_64-linux.S
-  src/gen/bcm/aes-gcm-avx512-x86_64-apple.S
-  src/gen/bcm/aes-gcm-avx512-x86_64-linux.S
-  src/gen/bcm/aesni-gcm-x86_64-apple.S
-  src/gen/bcm/aesni-gcm-x86_64-linux.S
-  src/gen/bcm/aesni-x86-apple.S
-  src/gen/bcm/aesni-x86-linux.S
-  src/gen/bcm/aesni-x86_64-apple.S
-  src/gen/bcm/aesni-x86_64-linux.S
-  src/gen/bcm/aesv8-armv7-linux.S
-  src/gen/bcm/aesv8-armv8-apple.S
-  src/gen/bcm/aesv8-armv8-linux.S
-  src/gen/bcm/aesv8-armv8-win.S
-  src/gen/bcm/aesv8-gcm-armv8-apple.S
-  src/gen/bcm/aesv8-gcm-armv8-linux.S
-  src/gen/bcm/aesv8-gcm-armv8-win.S
-  src/gen/bcm/armv4-mont-linux.S
-  src/gen/bcm/armv8-mont-apple.S
-  src/gen/bcm/armv8-mont-linux.S
-  src/gen/bcm/armv8-mont-win.S
-  src/gen/bcm/bn-586-apple.S
-  src/gen/bcm/bn-586-linux.S
-  src/gen/bcm/bn-armv8-apple.S
-  src/gen/bcm/bn-armv8-linux.S
-  src/gen/bcm/bn-armv8-win.S
-  src/gen/bcm/bsaes-armv7-linux.S
-  src/gen/bcm/co-586-apple.S
-  src/gen/bcm/co-586-linux.S
-  src/gen/bcm/ghash-armv4-linux.S
-  src/gen/bcm/ghash-neon-armv8-apple.S
-  src/gen/bcm/ghash-neon-armv8-linux.S
-  src/gen/bcm/ghash-neon-armv8-win.S
-  src/gen/bcm/ghash-ssse3-x86-apple.S
-  src/gen/bcm/ghash-ssse3-x86-linux.S
-  src/gen/bcm/ghash-ssse3-x86_64-apple.S
-  src/gen/bcm/ghash-ssse3-x86_64-linux.S
-  src/gen/bcm/ghash-x86-apple.S
-  src/gen/bcm/ghash-x86-linux.S
-  src/gen/bcm/ghash-x86_64-apple.S
-  src/gen/bcm/ghash-x86_64-linux.S
-  src/gen/bcm/ghashv8-armv7-linux.S
-  src/gen/bcm/ghashv8-armv8-apple.S
-  src/gen/bcm/ghashv8-armv8-linux.S
-  src/gen/bcm/ghashv8-armv8-win.S
-  src/gen/bcm/p256-armv8-asm-apple.S
-  src/gen/bcm/p256-armv8-asm-linux.S
-  src/gen/bcm/p256-armv8-asm-win.S
-  src/gen/bcm/p256-x86_64-asm-apple.S
-  src/gen/bcm/p256-x86_64-asm-linux.S
-  src/gen/bcm/p256_beeu-armv8-asm-apple.S
-  src/gen/bcm/p256_beeu-armv8-asm-linux.S
-  src/gen/bcm/p256_beeu-armv8-asm-win.S
-  src/gen/bcm/p256_beeu-x86_64-asm-apple.S
-  src/gen/bcm/p256_beeu-x86_64-asm-linux.S
-  src/gen/bcm/rdrand-x86_64-apple.S
-  src/gen/bcm/rdrand-x86_64-linux.S
-  src/gen/bcm/rsaz-avx2-apple.S
-  src/gen/bcm/rsaz-avx2-linux.S
-  src/gen/bcm/sha1-586-apple.S
-  src/gen/bcm/sha1-586-linux.S
-  src/gen/bcm/sha1-armv4-large-linux.S
-  src/gen/bcm/sha1-armv8-apple.S
-  src/gen/bcm/sha1-armv8-linux.S
-  src/gen/bcm/sha1-armv8-win.S
-  src/gen/bcm/sha1-x86_64-apple.S
-  src/gen/bcm/sha1-x86_64-linux.S
-  src/gen/bcm/sha256-586-apple.S
-  src/gen/bcm/sha256-586-linux.S
-  src/gen/bcm/sha256-armv4-linux.S
-  src/gen/bcm/sha256-armv8-apple.S
-  src/gen/bcm/sha256-armv8-linux.S
-  src/gen/bcm/sha256-armv8-win.S
-  src/gen/bcm/sha256-x86_64-apple.S
-  src/gen/bcm/sha256-x86_64-linux.S
-  src/gen/bcm/sha512-586-apple.S
-  src/gen/bcm/sha512-586-linux.S
-  src/gen/bcm/sha512-armv4-linux.S
-  src/gen/bcm/sha512-armv8-apple.S
-  src/gen/bcm/sha512-armv8-linux.S
-  src/gen/bcm/sha512-armv8-win.S
-  src/gen/bcm/sha512-x86_64-apple.S
-  src/gen/bcm/sha512-x86_64-linux.S
-  src/gen/bcm/vpaes-armv7-linux.S
-  src/gen/bcm/vpaes-armv8-apple.S
-  src/gen/bcm/vpaes-armv8-linux.S
-  src/gen/bcm/vpaes-armv8-win.S
-  src/gen/bcm/vpaes-x86-apple.S
-  src/gen/bcm/vpaes-x86-linux.S
-  src/gen/bcm/vpaes-x86_64-apple.S
-  src/gen/bcm/vpaes-x86_64-linux.S
-  src/gen/bcm/x86-mont-apple.S
-  src/gen/bcm/x86-mont-linux.S
-  src/gen/bcm/x86_64-mont-apple.S
-  src/gen/bcm/x86_64-mont-linux.S
-  src/gen/bcm/x86_64-mont5-apple.S
-  src/gen/bcm/x86_64-mont5-linux.S
-  src/gen/crypto/aes128gcmsiv-x86_64-apple.S
-  src/gen/crypto/aes128gcmsiv-x86_64-linux.S
-  src/gen/crypto/chacha-armv4-linux.S
-  src/gen/crypto/chacha-armv8-apple.S
-  src/gen/crypto/chacha-armv8-linux.S
-  src/gen/crypto/chacha-armv8-win.S
-  src/gen/crypto/chacha-x86-apple.S
-  src/gen/crypto/chacha-x86-linux.S
-  src/gen/crypto/chacha-x86_64-apple.S
-  src/gen/crypto/chacha-x86_64-linux.S
-  src/gen/crypto/chacha20_poly1305_armv8-apple.S
-  src/gen/crypto/chacha20_poly1305_armv8-linux.S
-  src/gen/crypto/chacha20_poly1305_armv8-win.S
-  src/gen/crypto/chacha20_poly1305_x86_64-apple.S
-  src/gen/crypto/chacha20_poly1305_x86_64-linux.S
-  src/gen/crypto/md5-586-apple.S
-  src/gen/crypto/md5-586-linux.S
-  src/gen/crypto/md5-x86_64-apple.S
-  src/gen/crypto/md5-x86_64-linux.S
-  src/gen/test_support/trampoline-armv4-linux.S
-  src/gen/test_support/trampoline-armv8-apple.S
-  src/gen/test_support/trampoline-armv8-linux.S
-  src/gen/test_support/trampoline-armv8-win.S
-  src/gen/test_support/trampoline-x86-apple.S
-  src/gen/test_support/trampoline-x86-linux.S
-  src/gen/test_support/trampoline-x86_64-apple.S
-  src/gen/test_support/trampoline-x86_64-linux.S
-  src/third_party/fiat/asm/fiat_curve25519_adx_mul.S
-  src/third_party/fiat/asm/fiat_curve25519_adx_square.S
-  src/third_party/fiat/asm/fiat_p256_adx_mul.S
-  src/third_party/fiat/asm/fiat_p256_adx_sqr.S
-)
-
-set(
-  CRYPTO_SOURCES_NASM
-
-  src/gen/bcm/aes-gcm-avx2-x86_64-win.asm
-  src/gen/bcm/aes-gcm-avx512-x86_64-win.asm
-  src/gen/bcm/aesni-gcm-x86_64-win.asm
-  src/gen/bcm/aesni-x86-win.asm
-  src/gen/bcm/aesni-x86_64-win.asm
-  src/gen/bcm/bn-586-win.asm
-  src/gen/bcm/co-586-win.asm
-  src/gen/bcm/ghash-ssse3-x86-win.asm
-  src/gen/bcm/ghash-ssse3-x86_64-win.asm
-  src/gen/bcm/ghash-x86-win.asm
-  src/gen/bcm/ghash-x86_64-win.asm
-  src/gen/bcm/p256-x86_64-asm-win.asm
-  src/gen/bcm/p256_beeu-x86_64-asm-win.asm
-  src/gen/bcm/rdrand-x86_64-win.asm
-  src/gen/bcm/rsaz-avx2-win.asm
-  src/gen/bcm/sha1-586-win.asm
-  src/gen/bcm/sha1-x86_64-win.asm
-  src/gen/bcm/sha256-586-win.asm
-  src/gen/bcm/sha256-x86_64-win.asm
-  src/gen/bcm/sha512-586-win.asm
-  src/gen/bcm/sha512-x86_64-win.asm
-  src/gen/bcm/vpaes-x86-win.asm
-  src/gen/bcm/vpaes-x86_64-win.asm
-  src/gen/bcm/x86-mont-win.asm
-  src/gen/bcm/x86_64-mont-win.asm
-  src/gen/bcm/x86_64-mont5-win.asm
-  src/gen/crypto/aes128gcmsiv-x86_64-win.asm
-  src/gen/crypto/chacha-x86-win.asm
-  src/gen/crypto/chacha-x86_64-win.asm
-  src/gen/crypto/chacha20_poly1305_x86_64-win.asm
-  src/gen/crypto/md5-586-win.asm
-  src/gen/crypto/md5-x86_64-win.asm
-  src/gen/test_support/trampoline-x86-win.asm
-  src/gen/test_support/trampoline-x86_64-win.asm
-)
-
-if(OPENSSL_ASM)
-  list(APPEND CRYPTO_SOURCES_ASM_USED ${CRYPTO_SOURCES_ASM})
-endif()
-if(OPENSSL_NASM)
-  list(APPEND CRYPTO_SOURCES_ASM_USED ${CRYPTO_SOURCES_NASM})
-endif()
-
-add_library(
-  crypto
-
-  ${CRYPTO_SOURCES_ASM_USED}
-  src/crypto/aes/aes.cc
-  src/crypto/asn1/a_bitstr.cc
-  src/crypto/asn1/a_bool.cc
-  src/crypto/asn1/a_d2i_fp.cc
-  src/crypto/asn1/a_dup.cc
-  src/crypto/asn1/a_gentm.cc
-  src/crypto/asn1/a_i2d_fp.cc
-  src/crypto/asn1/a_int.cc
-  src/crypto/asn1/a_mbstr.cc
-  src/crypto/asn1/a_object.cc
-  src/crypto/asn1/a_octet.cc
-  src/crypto/asn1/a_strex.cc
-  src/crypto/asn1/a_strnid.cc
-  src/crypto/asn1/a_time.cc
-  src/crypto/asn1/a_type.cc
-  src/crypto/asn1/a_utctm.cc
-  src/crypto/asn1/asn1_lib.cc
-  src/crypto/asn1/asn1_par.cc
-  src/crypto/asn1/asn_pack.cc
-  src/crypto/asn1/f_int.cc
-  src/crypto/asn1/f_string.cc
-  src/crypto/asn1/posix_time.cc
-  src/crypto/asn1/tasn_dec.cc
-  src/crypto/asn1/tasn_enc.cc
-  src/crypto/asn1/tasn_fre.cc
-  src/crypto/asn1/tasn_new.cc
-  src/crypto/asn1/tasn_typ.cc
-  src/crypto/asn1/tasn_utl.cc
-  src/crypto/base64/base64.cc
-  src/crypto/bio/bio.cc
-  src/crypto/bio/bio_mem.cc
-  src/crypto/bio/connect.cc
-  src/crypto/bio/errno.cc
-  src/crypto/bio/fd.cc
-  src/crypto/bio/file.cc
-  src/crypto/bio/hexdump.cc
-  src/crypto/bio/pair.cc
-  src/crypto/bio/printf.cc
-  src/crypto/bio/socket.cc
-  src/crypto/bio/socket_helper.cc
-  src/crypto/blake2/blake2.cc
-  src/crypto/bn/bn_asn1.cc
-  src/crypto/bn/convert.cc
-  src/crypto/bn/div.cc
-  src/crypto/bn/exponentiation.cc
-  src/crypto/bn/sqrt.cc
-  src/crypto/buf/buf.cc
-  src/crypto/bytestring/asn1_compat.cc
-  src/crypto/bytestring/ber.cc
-  src/crypto/bytestring/cbb.cc
-  src/crypto/bytestring/cbs.cc
-  src/crypto/bytestring/unicode.cc
-  src/crypto/chacha/chacha.cc
-  src/crypto/cipher/derive_key.cc
-  src/crypto/cipher/e_aesctrhmac.cc
-  src/crypto/cipher/e_aeseax.cc
-  src/crypto/cipher/e_aesgcmsiv.cc
-  src/crypto/cipher/e_chacha20poly1305.cc
-  src/crypto/cipher/e_des.cc
-  src/crypto/cipher/e_null.cc
-  src/crypto/cipher/e_rc2.cc
-  src/crypto/cipher/e_rc4.cc
-  src/crypto/cipher/e_tls.cc
-  src/crypto/cipher/get_cipher.cc
-  src/crypto/cipher/tls_cbc.cc
-  src/crypto/cms/cms.cc
-  src/crypto/conf/conf.cc
-  src/crypto/cpu_aarch64_apple.cc
-  src/crypto/cpu_aarch64_fuchsia.cc
-  src/crypto/cpu_aarch64_linux.cc
-  src/crypto/cpu_aarch64_openbsd.cc
-  src/crypto/cpu_aarch64_sysreg.cc
-  src/crypto/cpu_aarch64_win.cc
-  src/crypto/cpu_arm_freebsd.cc
-  src/crypto/cpu_arm_linux.cc
-  src/crypto/cpu_intel.cc
-  src/crypto/crypto.cc
-  src/crypto/curve25519/curve25519.cc
-  src/crypto/curve25519/curve25519_64_adx.cc
-  src/crypto/curve25519/spake25519.cc
-  src/crypto/des/des.cc
-  src/crypto/dh/dh_asn1.cc
-  src/crypto/dh/params.cc
-  src/crypto/digest/digest_extra.cc
-  src/crypto/dsa/dsa.cc
-  src/crypto/dsa/dsa_asn1.cc
-  src/crypto/ec/ec_asn1.cc
-  src/crypto/ec/ec_derive.cc
-  src/crypto/ec/hash_to_curve.cc
-  src/crypto/ecdh/ecdh.cc
-  src/crypto/ecdsa/ecdsa_asn1.cc
-  src/crypto/engine/engine.cc
-  src/crypto/err/err.cc
-  src/crypto/evp/evp.cc
-  src/crypto/evp/evp_asn1.cc
-  src/crypto/evp/evp_ctx.cc
-  src/crypto/evp/p_dh.cc
-  src/crypto/evp/p_dh_asn1.cc
-  src/crypto/evp/p_dsa_asn1.cc
-  src/crypto/evp/p_ec.cc
-  src/crypto/evp/p_ec_asn1.cc
-  src/crypto/evp/p_ed25519.cc
-  src/crypto/evp/p_ed25519_asn1.cc
-  src/crypto/evp/p_hkdf.cc
-  src/crypto/evp/p_rsa.cc
-  src/crypto/evp/p_rsa_asn1.cc
-  src/crypto/evp/p_x25519.cc
-  src/crypto/evp/p_x25519_asn1.cc
-  src/crypto/evp/pbkdf.cc
-  src/crypto/evp/print.cc
-  src/crypto/evp/scrypt.cc
-  src/crypto/evp/sign.cc
-  src/crypto/ex_data.cc
-  src/crypto/fipsmodule/bcm.cc
-  src/crypto/fipsmodule/fips_shared_support.cc
-  src/crypto/fuzzer_mode.cc
-  src/crypto/hpke/hpke.cc
-  src/crypto/hrss/hrss.cc
-  src/crypto/kyber/kyber.cc
-  src/crypto/lhash/lhash.cc
-  src/crypto/md4/md4.cc
-  src/crypto/md5/md5.cc
-  src/crypto/mem.cc
-  src/crypto/mldsa/mldsa.cc
-  src/crypto/mlkem/mlkem.cc
-  src/crypto/obj/obj.cc
-  src/crypto/obj/obj_xref.cc
-  src/crypto/pem/pem_all.cc
-  src/crypto/pem/pem_info.cc
-  src/crypto/pem/pem_lib.cc
-  src/crypto/pem/pem_oth.cc
-  src/crypto/pem/pem_pk8.cc
-  src/crypto/pem/pem_pkey.cc
-  src/crypto/pem/pem_x509.cc
-  src/crypto/pem/pem_xaux.cc
-  src/crypto/pkcs7/pkcs7.cc
-  src/crypto/pkcs7/pkcs7_x509.cc
-  src/crypto/pkcs8/p5_pbev2.cc
-  src/crypto/pkcs8/pkcs8.cc
-  src/crypto/pkcs8/pkcs8_x509.cc
-  src/crypto/poly1305/poly1305.cc
-  src/crypto/poly1305/poly1305_arm.cc
-  src/crypto/poly1305/poly1305_vec.cc
-  src/crypto/pool/pool.cc
-  src/crypto/rand/deterministic.cc
-  src/crypto/rand/fork_detect.cc
-  src/crypto/rand/forkunsafe.cc
-  src/crypto/rand/getentropy.cc
-  src/crypto/rand/ios.cc
-  src/crypto/rand/passive.cc
-  src/crypto/rand/rand.cc
-  src/crypto/rand/trusty.cc
-  src/crypto/rand/urandom.cc
-  src/crypto/rand/windows.cc
-  src/crypto/rc4/rc4.cc
-  src/crypto/refcount.cc
-  src/crypto/rsa/rsa_asn1.cc
-  src/crypto/rsa/rsa_crypt.cc
-  src/crypto/rsa/rsa_extra.cc
-  src/crypto/rsa/rsa_print.cc
-  src/crypto/sha/sha1.cc
-  src/crypto/sha/sha256.cc
-  src/crypto/sha/sha512.cc
-  src/crypto/siphash/siphash.cc
-  src/crypto/slhdsa/slhdsa.cc
-  src/crypto/spake2plus/spake2plus.cc
-  src/crypto/stack/stack.cc
-  src/crypto/thread.cc
-  src/crypto/thread_none.cc
-  src/crypto/thread_pthread.cc
-  src/crypto/thread_win.cc
-  src/crypto/trust_token/pmbtoken.cc
-  src/crypto/trust_token/trust_token.cc
-  src/crypto/trust_token/voprf.cc
-  src/crypto/x509/a_digest.cc
-  src/crypto/x509/a_sign.cc
-  src/crypto/x509/a_verify.cc
-  src/crypto/x509/algorithm.cc
-  src/crypto/x509/asn1_gen.cc
-  src/crypto/x509/by_dir.cc
-  src/crypto/x509/by_file.cc
-  src/crypto/x509/i2d_pr.cc
-  src/crypto/x509/name_print.cc
-  src/crypto/x509/policy.cc
-  src/crypto/x509/rsa_pss.cc
-  src/crypto/x509/t_crl.cc
-  src/crypto/x509/t_req.cc
-  src/crypto/x509/t_x509.cc
-  src/crypto/x509/t_x509a.cc
-  src/crypto/x509/v3_akey.cc
-  src/crypto/x509/v3_akeya.cc
-  src/crypto/x509/v3_alt.cc
-  src/crypto/x509/v3_bcons.cc
-  src/crypto/x509/v3_bitst.cc
-  src/crypto/x509/v3_conf.cc
-  src/crypto/x509/v3_cpols.cc
-  src/crypto/x509/v3_crld.cc
-  src/crypto/x509/v3_enum.cc
-  src/crypto/x509/v3_extku.cc
-  src/crypto/x509/v3_genn.cc
-  src/crypto/x509/v3_ia5.cc
-  src/crypto/x509/v3_info.cc
-  src/crypto/x509/v3_int.cc
-  src/crypto/x509/v3_lib.cc
-  src/crypto/x509/v3_ncons.cc
-  src/crypto/x509/v3_ocsp.cc
-  src/crypto/x509/v3_pcons.cc
-  src/crypto/x509/v3_pmaps.cc
-  src/crypto/x509/v3_prn.cc
-  src/crypto/x509/v3_purp.cc
-  src/crypto/x509/v3_skey.cc
-  src/crypto/x509/v3_utl.cc
-  src/crypto/x509/x509.cc
-  src/crypto/x509/x509_att.cc
-  src/crypto/x509/x509_cmp.cc
-  src/crypto/x509/x509_d2.cc
-  src/crypto/x509/x509_def.cc
-  src/crypto/x509/x509_ext.cc
-  src/crypto/x509/x509_lu.cc
-  src/crypto/x509/x509_obj.cc
-  src/crypto/x509/x509_req.cc
-  src/crypto/x509/x509_set.cc
-  src/crypto/x509/x509_trs.cc
-  src/crypto/x509/x509_txt.cc
-  src/crypto/x509/x509_v3.cc
-  src/crypto/x509/x509_vfy.cc
-  src/crypto/x509/x509_vpm.cc
-  src/crypto/x509/x509cset.cc
-  src/crypto/x509/x509name.cc
-  src/crypto/x509/x509rset.cc
-  src/crypto/x509/x509spki.cc
-  src/crypto/x509/x_algor.cc
-  src/crypto/x509/x_all.cc
-  src/crypto/x509/x_attrib.cc
-  src/crypto/x509/x_crl.cc
-  src/crypto/x509/x_exten.cc
-  src/crypto/x509/x_name.cc
-  src/crypto/x509/x_pubkey.cc
-  src/crypto/x509/x_req.cc
-  src/crypto/x509/x_sig.cc
-  src/crypto/x509/x_spki.cc
-  src/crypto/x509/x_val.cc
-  src/crypto/x509/x_x509.cc
-  src/crypto/x509/x_x509a.cc
-  src/gen/crypto/err_data.cc
-)
-
-target_include_directories(crypto PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/include>)
-
-add_library(
-  ssl
-
-  src/ssl/bio_ssl.cc
-  src/ssl/d1_both.cc
-  src/ssl/d1_lib.cc
-  src/ssl/d1_pkt.cc
-  src/ssl/d1_srtp.cc
-  src/ssl/dtls_method.cc
-  src/ssl/dtls_record.cc
-  src/ssl/encrypted_client_hello.cc
-  src/ssl/extensions.cc
-  src/ssl/handoff.cc
-  src/ssl/handshake.cc
-  src/ssl/handshake_client.cc
-  src/ssl/handshake_server.cc
-  src/ssl/s3_both.cc
-  src/ssl/s3_lib.cc
-  src/ssl/s3_pkt.cc
-  src/ssl/ssl_aead_ctx.cc
-  src/ssl/ssl_asn1.cc
-  src/ssl/ssl_buffer.cc
-  src/ssl/ssl_cert.cc
-  src/ssl/ssl_cipher.cc
-  src/ssl/ssl_credential.cc
-  src/ssl/ssl_file.cc
-  src/ssl/ssl_key_share.cc
-  src/ssl/ssl_lib.cc
-  src/ssl/ssl_privkey.cc
-  src/ssl/ssl_session.cc
-  src/ssl/ssl_stat.cc
-  src/ssl/ssl_transcript.cc
-  src/ssl/ssl_versions.cc
-  src/ssl/ssl_x509.cc
-  src/ssl/t1_enc.cc
-  src/ssl/tls13_both.cc
-  src/ssl/tls13_client.cc
-  src/ssl/tls13_enc.cc
-  src/ssl/tls13_server.cc
-  src/ssl/tls_method.cc
-  src/ssl/tls_record.cc
-)
-
-target_link_libraries(ssl crypto)
-
-add_executable(
-  bssl
-
-  src/tool/args.cc
-  src/tool/ciphers.cc
-  src/tool/client.cc
-  src/tool/const.cc
-  src/tool/digest.cc
-  src/tool/fd.cc
-  src/tool/file.cc
-  src/tool/generate_ech.cc
-  src/tool/generate_ed25519.cc
-  src/tool/genrsa.cc
-  src/tool/pkcs12.cc
-  src/tool/rand.cc
-  src/tool/server.cc
-  src/tool/sign.cc
-  src/tool/speed.cc
-  src/tool/tool.cc
-  src/tool/transport_common.cc
-)
-
-target_link_libraries(bssl ssl crypto)
-
-if(NOT CMAKE_SYSTEM_NAME STREQUAL "Android")
-  find_package(Threads REQUIRED)
-  target_link_libraries(crypto Threads::Threads)
-endif()
-
-if(WIN32)
-  target_link_libraries(crypto ws2_32)
-endif()
-
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..16271e2
--- /dev/null
+++ b/README.md
@@ -0,0 +1,4 @@
+# Deprecated Branch
+
+The `master-with-bazel` branch is no longer being updated. Instead, use the
+`main` branch, which now itself has a Bazel build.
diff --git a/WORKSPACE b/WORKSPACE
deleted file mode 100644
index 655ee24..0000000
--- a/WORKSPACE
+++ /dev/null
@@ -1,25 +0,0 @@
-# Copyright 2023 The BoringSSL Authors
-#
-# 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
-#
-#     https://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.
-
-workspace(name = "boringssl")
-
-load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
-
-http_archive(
-    name = "rules_license",
-    sha256 = "26d4021f6898e23b82ef953078389dd49ac2b5618ac564ade4ef87cced147b38",
-    urls = [
-        "https://github.com/bazelbuild/rules_license/releases/download/1.0.0/rules_license-1.0.0.tar.gz",
-    ],
-)
diff --git a/sources.json b/sources.json
deleted file mode 100644
index dd5233e..0000000
--- a/sources.json
+++ /dev/null
@@ -1,2746 +0,0 @@
-{
-  "bcm_crypto": [
-    "src/crypto/fipsmodule/bcm.cc"
-  ],
-  "crypto": [
-    "src/crypto/aes/aes.cc",
-    "src/crypto/asn1/a_bitstr.cc",
-    "src/crypto/asn1/a_bool.cc",
-    "src/crypto/asn1/a_d2i_fp.cc",
-    "src/crypto/asn1/a_dup.cc",
-    "src/crypto/asn1/a_gentm.cc",
-    "src/crypto/asn1/a_i2d_fp.cc",
-    "src/crypto/asn1/a_int.cc",
-    "src/crypto/asn1/a_mbstr.cc",
-    "src/crypto/asn1/a_object.cc",
-    "src/crypto/asn1/a_octet.cc",
-    "src/crypto/asn1/a_strex.cc",
-    "src/crypto/asn1/a_strnid.cc",
-    "src/crypto/asn1/a_time.cc",
-    "src/crypto/asn1/a_type.cc",
-    "src/crypto/asn1/a_utctm.cc",
-    "src/crypto/asn1/asn1_lib.cc",
-    "src/crypto/asn1/asn1_par.cc",
-    "src/crypto/asn1/asn_pack.cc",
-    "src/crypto/asn1/f_int.cc",
-    "src/crypto/asn1/f_string.cc",
-    "src/crypto/asn1/posix_time.cc",
-    "src/crypto/asn1/tasn_dec.cc",
-    "src/crypto/asn1/tasn_enc.cc",
-    "src/crypto/asn1/tasn_fre.cc",
-    "src/crypto/asn1/tasn_new.cc",
-    "src/crypto/asn1/tasn_typ.cc",
-    "src/crypto/asn1/tasn_utl.cc",
-    "src/crypto/base64/base64.cc",
-    "src/crypto/bio/bio.cc",
-    "src/crypto/bio/bio_mem.cc",
-    "src/crypto/bio/connect.cc",
-    "src/crypto/bio/errno.cc",
-    "src/crypto/bio/fd.cc",
-    "src/crypto/bio/file.cc",
-    "src/crypto/bio/hexdump.cc",
-    "src/crypto/bio/pair.cc",
-    "src/crypto/bio/printf.cc",
-    "src/crypto/bio/socket.cc",
-    "src/crypto/bio/socket_helper.cc",
-    "src/crypto/blake2/blake2.cc",
-    "src/crypto/bn/bn_asn1.cc",
-    "src/crypto/bn/convert.cc",
-    "src/crypto/bn/div.cc",
-    "src/crypto/bn/exponentiation.cc",
-    "src/crypto/bn/sqrt.cc",
-    "src/crypto/buf/buf.cc",
-    "src/crypto/bytestring/asn1_compat.cc",
-    "src/crypto/bytestring/ber.cc",
-    "src/crypto/bytestring/cbb.cc",
-    "src/crypto/bytestring/cbs.cc",
-    "src/crypto/bytestring/unicode.cc",
-    "src/crypto/chacha/chacha.cc",
-    "src/crypto/cipher/derive_key.cc",
-    "src/crypto/cipher/e_aesctrhmac.cc",
-    "src/crypto/cipher/e_aeseax.cc",
-    "src/crypto/cipher/e_aesgcmsiv.cc",
-    "src/crypto/cipher/e_chacha20poly1305.cc",
-    "src/crypto/cipher/e_des.cc",
-    "src/crypto/cipher/e_null.cc",
-    "src/crypto/cipher/e_rc2.cc",
-    "src/crypto/cipher/e_rc4.cc",
-    "src/crypto/cipher/e_tls.cc",
-    "src/crypto/cipher/get_cipher.cc",
-    "src/crypto/cipher/tls_cbc.cc",
-    "src/crypto/cms/cms.cc",
-    "src/crypto/conf/conf.cc",
-    "src/crypto/cpu_aarch64_apple.cc",
-    "src/crypto/cpu_aarch64_fuchsia.cc",
-    "src/crypto/cpu_aarch64_linux.cc",
-    "src/crypto/cpu_aarch64_openbsd.cc",
-    "src/crypto/cpu_aarch64_sysreg.cc",
-    "src/crypto/cpu_aarch64_win.cc",
-    "src/crypto/cpu_arm_freebsd.cc",
-    "src/crypto/cpu_arm_linux.cc",
-    "src/crypto/cpu_intel.cc",
-    "src/crypto/crypto.cc",
-    "src/crypto/curve25519/curve25519.cc",
-    "src/crypto/curve25519/curve25519_64_adx.cc",
-    "src/crypto/curve25519/spake25519.cc",
-    "src/crypto/des/des.cc",
-    "src/crypto/dh/dh_asn1.cc",
-    "src/crypto/dh/params.cc",
-    "src/crypto/digest/digest_extra.cc",
-    "src/crypto/dsa/dsa.cc",
-    "src/crypto/dsa/dsa_asn1.cc",
-    "src/crypto/ec/ec_asn1.cc",
-    "src/crypto/ec/ec_derive.cc",
-    "src/crypto/ec/hash_to_curve.cc",
-    "src/crypto/ecdh/ecdh.cc",
-    "src/crypto/ecdsa/ecdsa_asn1.cc",
-    "src/crypto/engine/engine.cc",
-    "src/crypto/err/err.cc",
-    "src/crypto/evp/evp.cc",
-    "src/crypto/evp/evp_asn1.cc",
-    "src/crypto/evp/evp_ctx.cc",
-    "src/crypto/evp/p_dh.cc",
-    "src/crypto/evp/p_dh_asn1.cc",
-    "src/crypto/evp/p_dsa_asn1.cc",
-    "src/crypto/evp/p_ec.cc",
-    "src/crypto/evp/p_ec_asn1.cc",
-    "src/crypto/evp/p_ed25519.cc",
-    "src/crypto/evp/p_ed25519_asn1.cc",
-    "src/crypto/evp/p_hkdf.cc",
-    "src/crypto/evp/p_rsa.cc",
-    "src/crypto/evp/p_rsa_asn1.cc",
-    "src/crypto/evp/p_x25519.cc",
-    "src/crypto/evp/p_x25519_asn1.cc",
-    "src/crypto/evp/pbkdf.cc",
-    "src/crypto/evp/print.cc",
-    "src/crypto/evp/scrypt.cc",
-    "src/crypto/evp/sign.cc",
-    "src/crypto/ex_data.cc",
-    "src/crypto/fipsmodule/bcm.cc",
-    "src/crypto/fipsmodule/fips_shared_support.cc",
-    "src/crypto/fuzzer_mode.cc",
-    "src/crypto/hpke/hpke.cc",
-    "src/crypto/hrss/hrss.cc",
-    "src/crypto/kyber/kyber.cc",
-    "src/crypto/lhash/lhash.cc",
-    "src/crypto/md4/md4.cc",
-    "src/crypto/md5/md5.cc",
-    "src/crypto/mem.cc",
-    "src/crypto/mldsa/mldsa.cc",
-    "src/crypto/mlkem/mlkem.cc",
-    "src/crypto/obj/obj.cc",
-    "src/crypto/obj/obj_xref.cc",
-    "src/crypto/pem/pem_all.cc",
-    "src/crypto/pem/pem_info.cc",
-    "src/crypto/pem/pem_lib.cc",
-    "src/crypto/pem/pem_oth.cc",
-    "src/crypto/pem/pem_pk8.cc",
-    "src/crypto/pem/pem_pkey.cc",
-    "src/crypto/pem/pem_x509.cc",
-    "src/crypto/pem/pem_xaux.cc",
-    "src/crypto/pkcs7/pkcs7.cc",
-    "src/crypto/pkcs7/pkcs7_x509.cc",
-    "src/crypto/pkcs8/p5_pbev2.cc",
-    "src/crypto/pkcs8/pkcs8.cc",
-    "src/crypto/pkcs8/pkcs8_x509.cc",
-    "src/crypto/poly1305/poly1305.cc",
-    "src/crypto/poly1305/poly1305_arm.cc",
-    "src/crypto/poly1305/poly1305_vec.cc",
-    "src/crypto/pool/pool.cc",
-    "src/crypto/rand/deterministic.cc",
-    "src/crypto/rand/fork_detect.cc",
-    "src/crypto/rand/forkunsafe.cc",
-    "src/crypto/rand/getentropy.cc",
-    "src/crypto/rand/ios.cc",
-    "src/crypto/rand/passive.cc",
-    "src/crypto/rand/rand.cc",
-    "src/crypto/rand/trusty.cc",
-    "src/crypto/rand/urandom.cc",
-    "src/crypto/rand/windows.cc",
-    "src/crypto/rc4/rc4.cc",
-    "src/crypto/refcount.cc",
-    "src/crypto/rsa/rsa_asn1.cc",
-    "src/crypto/rsa/rsa_crypt.cc",
-    "src/crypto/rsa/rsa_extra.cc",
-    "src/crypto/rsa/rsa_print.cc",
-    "src/crypto/sha/sha1.cc",
-    "src/crypto/sha/sha256.cc",
-    "src/crypto/sha/sha512.cc",
-    "src/crypto/siphash/siphash.cc",
-    "src/crypto/slhdsa/slhdsa.cc",
-    "src/crypto/spake2plus/spake2plus.cc",
-    "src/crypto/stack/stack.cc",
-    "src/crypto/thread.cc",
-    "src/crypto/thread_none.cc",
-    "src/crypto/thread_pthread.cc",
-    "src/crypto/thread_win.cc",
-    "src/crypto/trust_token/pmbtoken.cc",
-    "src/crypto/trust_token/trust_token.cc",
-    "src/crypto/trust_token/voprf.cc",
-    "src/crypto/x509/a_digest.cc",
-    "src/crypto/x509/a_sign.cc",
-    "src/crypto/x509/a_verify.cc",
-    "src/crypto/x509/algorithm.cc",
-    "src/crypto/x509/asn1_gen.cc",
-    "src/crypto/x509/by_dir.cc",
-    "src/crypto/x509/by_file.cc",
-    "src/crypto/x509/i2d_pr.cc",
-    "src/crypto/x509/name_print.cc",
-    "src/crypto/x509/policy.cc",
-    "src/crypto/x509/rsa_pss.cc",
-    "src/crypto/x509/t_crl.cc",
-    "src/crypto/x509/t_req.cc",
-    "src/crypto/x509/t_x509.cc",
-    "src/crypto/x509/t_x509a.cc",
-    "src/crypto/x509/v3_akey.cc",
-    "src/crypto/x509/v3_akeya.cc",
-    "src/crypto/x509/v3_alt.cc",
-    "src/crypto/x509/v3_bcons.cc",
-    "src/crypto/x509/v3_bitst.cc",
-    "src/crypto/x509/v3_conf.cc",
-    "src/crypto/x509/v3_cpols.cc",
-    "src/crypto/x509/v3_crld.cc",
-    "src/crypto/x509/v3_enum.cc",
-    "src/crypto/x509/v3_extku.cc",
-    "src/crypto/x509/v3_genn.cc",
-    "src/crypto/x509/v3_ia5.cc",
-    "src/crypto/x509/v3_info.cc",
-    "src/crypto/x509/v3_int.cc",
-    "src/crypto/x509/v3_lib.cc",
-    "src/crypto/x509/v3_ncons.cc",
-    "src/crypto/x509/v3_ocsp.cc",
-    "src/crypto/x509/v3_pcons.cc",
-    "src/crypto/x509/v3_pmaps.cc",
-    "src/crypto/x509/v3_prn.cc",
-    "src/crypto/x509/v3_purp.cc",
-    "src/crypto/x509/v3_skey.cc",
-    "src/crypto/x509/v3_utl.cc",
-    "src/crypto/x509/x509.cc",
-    "src/crypto/x509/x509_att.cc",
-    "src/crypto/x509/x509_cmp.cc",
-    "src/crypto/x509/x509_d2.cc",
-    "src/crypto/x509/x509_def.cc",
-    "src/crypto/x509/x509_ext.cc",
-    "src/crypto/x509/x509_lu.cc",
-    "src/crypto/x509/x509_obj.cc",
-    "src/crypto/x509/x509_req.cc",
-    "src/crypto/x509/x509_set.cc",
-    "src/crypto/x509/x509_trs.cc",
-    "src/crypto/x509/x509_txt.cc",
-    "src/crypto/x509/x509_v3.cc",
-    "src/crypto/x509/x509_vfy.cc",
-    "src/crypto/x509/x509_vpm.cc",
-    "src/crypto/x509/x509cset.cc",
-    "src/crypto/x509/x509name.cc",
-    "src/crypto/x509/x509rset.cc",
-    "src/crypto/x509/x509spki.cc",
-    "src/crypto/x509/x_algor.cc",
-    "src/crypto/x509/x_all.cc",
-    "src/crypto/x509/x_attrib.cc",
-    "src/crypto/x509/x_crl.cc",
-    "src/crypto/x509/x_exten.cc",
-    "src/crypto/x509/x_name.cc",
-    "src/crypto/x509/x_pubkey.cc",
-    "src/crypto/x509/x_req.cc",
-    "src/crypto/x509/x_sig.cc",
-    "src/crypto/x509/x_spki.cc",
-    "src/crypto/x509/x_val.cc",
-    "src/crypto/x509/x_x509.cc",
-    "src/crypto/x509/x_x509a.cc",
-    "src/gen/crypto/err_data.cc"
-  ],
-  "crypto_asm": [
-    "src/crypto/curve25519/asm/x25519-asm-arm.S",
-    "src/crypto/hrss/asm/poly_rq_mul.S",
-    "src/crypto/poly1305/poly1305_arm_asm.S",
-    "src/gen/bcm/aes-gcm-avx2-x86_64-apple.S",
-    "src/gen/bcm/aes-gcm-avx2-x86_64-linux.S",
-    "src/gen/bcm/aes-gcm-avx512-x86_64-apple.S",
-    "src/gen/bcm/aes-gcm-avx512-x86_64-linux.S",
-    "src/gen/bcm/aesni-gcm-x86_64-apple.S",
-    "src/gen/bcm/aesni-gcm-x86_64-linux.S",
-    "src/gen/bcm/aesni-x86-apple.S",
-    "src/gen/bcm/aesni-x86-linux.S",
-    "src/gen/bcm/aesni-x86_64-apple.S",
-    "src/gen/bcm/aesni-x86_64-linux.S",
-    "src/gen/bcm/aesv8-armv7-linux.S",
-    "src/gen/bcm/aesv8-armv8-apple.S",
-    "src/gen/bcm/aesv8-armv8-linux.S",
-    "src/gen/bcm/aesv8-armv8-win.S",
-    "src/gen/bcm/aesv8-gcm-armv8-apple.S",
-    "src/gen/bcm/aesv8-gcm-armv8-linux.S",
-    "src/gen/bcm/aesv8-gcm-armv8-win.S",
-    "src/gen/bcm/armv4-mont-linux.S",
-    "src/gen/bcm/armv8-mont-apple.S",
-    "src/gen/bcm/armv8-mont-linux.S",
-    "src/gen/bcm/armv8-mont-win.S",
-    "src/gen/bcm/bn-586-apple.S",
-    "src/gen/bcm/bn-586-linux.S",
-    "src/gen/bcm/bn-armv8-apple.S",
-    "src/gen/bcm/bn-armv8-linux.S",
-    "src/gen/bcm/bn-armv8-win.S",
-    "src/gen/bcm/bsaes-armv7-linux.S",
-    "src/gen/bcm/co-586-apple.S",
-    "src/gen/bcm/co-586-linux.S",
-    "src/gen/bcm/ghash-armv4-linux.S",
-    "src/gen/bcm/ghash-neon-armv8-apple.S",
-    "src/gen/bcm/ghash-neon-armv8-linux.S",
-    "src/gen/bcm/ghash-neon-armv8-win.S",
-    "src/gen/bcm/ghash-ssse3-x86-apple.S",
-    "src/gen/bcm/ghash-ssse3-x86-linux.S",
-    "src/gen/bcm/ghash-ssse3-x86_64-apple.S",
-    "src/gen/bcm/ghash-ssse3-x86_64-linux.S",
-    "src/gen/bcm/ghash-x86-apple.S",
-    "src/gen/bcm/ghash-x86-linux.S",
-    "src/gen/bcm/ghash-x86_64-apple.S",
-    "src/gen/bcm/ghash-x86_64-linux.S",
-    "src/gen/bcm/ghashv8-armv7-linux.S",
-    "src/gen/bcm/ghashv8-armv8-apple.S",
-    "src/gen/bcm/ghashv8-armv8-linux.S",
-    "src/gen/bcm/ghashv8-armv8-win.S",
-    "src/gen/bcm/p256-armv8-asm-apple.S",
-    "src/gen/bcm/p256-armv8-asm-linux.S",
-    "src/gen/bcm/p256-armv8-asm-win.S",
-    "src/gen/bcm/p256-x86_64-asm-apple.S",
-    "src/gen/bcm/p256-x86_64-asm-linux.S",
-    "src/gen/bcm/p256_beeu-armv8-asm-apple.S",
-    "src/gen/bcm/p256_beeu-armv8-asm-linux.S",
-    "src/gen/bcm/p256_beeu-armv8-asm-win.S",
-    "src/gen/bcm/p256_beeu-x86_64-asm-apple.S",
-    "src/gen/bcm/p256_beeu-x86_64-asm-linux.S",
-    "src/gen/bcm/rdrand-x86_64-apple.S",
-    "src/gen/bcm/rdrand-x86_64-linux.S",
-    "src/gen/bcm/rsaz-avx2-apple.S",
-    "src/gen/bcm/rsaz-avx2-linux.S",
-    "src/gen/bcm/sha1-586-apple.S",
-    "src/gen/bcm/sha1-586-linux.S",
-    "src/gen/bcm/sha1-armv4-large-linux.S",
-    "src/gen/bcm/sha1-armv8-apple.S",
-    "src/gen/bcm/sha1-armv8-linux.S",
-    "src/gen/bcm/sha1-armv8-win.S",
-    "src/gen/bcm/sha1-x86_64-apple.S",
-    "src/gen/bcm/sha1-x86_64-linux.S",
-    "src/gen/bcm/sha256-586-apple.S",
-    "src/gen/bcm/sha256-586-linux.S",
-    "src/gen/bcm/sha256-armv4-linux.S",
-    "src/gen/bcm/sha256-armv8-apple.S",
-    "src/gen/bcm/sha256-armv8-linux.S",
-    "src/gen/bcm/sha256-armv8-win.S",
-    "src/gen/bcm/sha256-x86_64-apple.S",
-    "src/gen/bcm/sha256-x86_64-linux.S",
-    "src/gen/bcm/sha512-586-apple.S",
-    "src/gen/bcm/sha512-586-linux.S",
-    "src/gen/bcm/sha512-armv4-linux.S",
-    "src/gen/bcm/sha512-armv8-apple.S",
-    "src/gen/bcm/sha512-armv8-linux.S",
-    "src/gen/bcm/sha512-armv8-win.S",
-    "src/gen/bcm/sha512-x86_64-apple.S",
-    "src/gen/bcm/sha512-x86_64-linux.S",
-    "src/gen/bcm/vpaes-armv7-linux.S",
-    "src/gen/bcm/vpaes-armv8-apple.S",
-    "src/gen/bcm/vpaes-armv8-linux.S",
-    "src/gen/bcm/vpaes-armv8-win.S",
-    "src/gen/bcm/vpaes-x86-apple.S",
-    "src/gen/bcm/vpaes-x86-linux.S",
-    "src/gen/bcm/vpaes-x86_64-apple.S",
-    "src/gen/bcm/vpaes-x86_64-linux.S",
-    "src/gen/bcm/x86-mont-apple.S",
-    "src/gen/bcm/x86-mont-linux.S",
-    "src/gen/bcm/x86_64-mont-apple.S",
-    "src/gen/bcm/x86_64-mont-linux.S",
-    "src/gen/bcm/x86_64-mont5-apple.S",
-    "src/gen/bcm/x86_64-mont5-linux.S",
-    "src/gen/crypto/aes128gcmsiv-x86_64-apple.S",
-    "src/gen/crypto/aes128gcmsiv-x86_64-linux.S",
-    "src/gen/crypto/chacha-armv4-linux.S",
-    "src/gen/crypto/chacha-armv8-apple.S",
-    "src/gen/crypto/chacha-armv8-linux.S",
-    "src/gen/crypto/chacha-armv8-win.S",
-    "src/gen/crypto/chacha-x86-apple.S",
-    "src/gen/crypto/chacha-x86-linux.S",
-    "src/gen/crypto/chacha-x86_64-apple.S",
-    "src/gen/crypto/chacha-x86_64-linux.S",
-    "src/gen/crypto/chacha20_poly1305_armv8-apple.S",
-    "src/gen/crypto/chacha20_poly1305_armv8-linux.S",
-    "src/gen/crypto/chacha20_poly1305_armv8-win.S",
-    "src/gen/crypto/chacha20_poly1305_x86_64-apple.S",
-    "src/gen/crypto/chacha20_poly1305_x86_64-linux.S",
-    "src/gen/crypto/md5-586-apple.S",
-    "src/gen/crypto/md5-586-linux.S",
-    "src/gen/crypto/md5-x86_64-apple.S",
-    "src/gen/crypto/md5-x86_64-linux.S",
-    "src/gen/test_support/trampoline-armv4-linux.S",
-    "src/gen/test_support/trampoline-armv8-apple.S",
-    "src/gen/test_support/trampoline-armv8-linux.S",
-    "src/gen/test_support/trampoline-armv8-win.S",
-    "src/gen/test_support/trampoline-x86-apple.S",
-    "src/gen/test_support/trampoline-x86-linux.S",
-    "src/gen/test_support/trampoline-x86_64-apple.S",
-    "src/gen/test_support/trampoline-x86_64-linux.S",
-    "src/third_party/fiat/asm/fiat_curve25519_adx_mul.S",
-    "src/third_party/fiat/asm/fiat_curve25519_adx_square.S",
-    "src/third_party/fiat/asm/fiat_p256_adx_mul.S",
-    "src/third_party/fiat/asm/fiat_p256_adx_sqr.S"
-  ],
-  "crypto_headers": [
-    "src/include/openssl/aead.h",
-    "src/include/openssl/aes.h",
-    "src/include/openssl/arm_arch.h",
-    "src/include/openssl/asm_base.h",
-    "src/include/openssl/asn1.h",
-    "src/include/openssl/asn1_mac.h",
-    "src/include/openssl/asn1t.h",
-    "src/include/openssl/base.h",
-    "src/include/openssl/base64.h",
-    "src/include/openssl/bcm_public.h",
-    "src/include/openssl/bio.h",
-    "src/include/openssl/blake2.h",
-    "src/include/openssl/blowfish.h",
-    "src/include/openssl/bn.h",
-    "src/include/openssl/buf.h",
-    "src/include/openssl/buffer.h",
-    "src/include/openssl/bytestring.h",
-    "src/include/openssl/cast.h",
-    "src/include/openssl/chacha.h",
-    "src/include/openssl/cipher.h",
-    "src/include/openssl/cmac.h",
-    "src/include/openssl/cms.h",
-    "src/include/openssl/conf.h",
-    "src/include/openssl/cpu.h",
-    "src/include/openssl/crypto.h",
-    "src/include/openssl/ctrdrbg.h",
-    "src/include/openssl/curve25519.h",
-    "src/include/openssl/des.h",
-    "src/include/openssl/dh.h",
-    "src/include/openssl/digest.h",
-    "src/include/openssl/dsa.h",
-    "src/include/openssl/e_os2.h",
-    "src/include/openssl/ec.h",
-    "src/include/openssl/ec_key.h",
-    "src/include/openssl/ecdh.h",
-    "src/include/openssl/ecdsa.h",
-    "src/include/openssl/engine.h",
-    "src/include/openssl/err.h",
-    "src/include/openssl/evp.h",
-    "src/include/openssl/evp_errors.h",
-    "src/include/openssl/ex_data.h",
-    "src/include/openssl/experimental/kyber.h",
-    "src/include/openssl/hkdf.h",
-    "src/include/openssl/hmac.h",
-    "src/include/openssl/hpke.h",
-    "src/include/openssl/hrss.h",
-    "src/include/openssl/is_boringssl.h",
-    "src/include/openssl/kdf.h",
-    "src/include/openssl/lhash.h",
-    "src/include/openssl/md4.h",
-    "src/include/openssl/md5.h",
-    "src/include/openssl/mem.h",
-    "src/include/openssl/mldsa.h",
-    "src/include/openssl/mlkem.h",
-    "src/include/openssl/nid.h",
-    "src/include/openssl/obj.h",
-    "src/include/openssl/obj_mac.h",
-    "src/include/openssl/objects.h",
-    "src/include/openssl/opensslconf.h",
-    "src/include/openssl/opensslv.h",
-    "src/include/openssl/ossl_typ.h",
-    "src/include/openssl/pem.h",
-    "src/include/openssl/pkcs12.h",
-    "src/include/openssl/pkcs7.h",
-    "src/include/openssl/pkcs8.h",
-    "src/include/openssl/poly1305.h",
-    "src/include/openssl/pool.h",
-    "src/include/openssl/posix_time.h",
-    "src/include/openssl/rand.h",
-    "src/include/openssl/rc4.h",
-    "src/include/openssl/ripemd.h",
-    "src/include/openssl/rsa.h",
-    "src/include/openssl/safestack.h",
-    "src/include/openssl/service_indicator.h",
-    "src/include/openssl/sha.h",
-    "src/include/openssl/siphash.h",
-    "src/include/openssl/slhdsa.h",
-    "src/include/openssl/span.h",
-    "src/include/openssl/stack.h",
-    "src/include/openssl/target.h",
-    "src/include/openssl/thread.h",
-    "src/include/openssl/time.h",
-    "src/include/openssl/trust_token.h",
-    "src/include/openssl/type_check.h",
-    "src/include/openssl/x509.h",
-    "src/include/openssl/x509_vfy.h",
-    "src/include/openssl/x509v3.h",
-    "src/include/openssl/x509v3_errors.h"
-  ],
-  "crypto_internal_headers": [
-    "src/crypto/asn1/internal.h",
-    "src/crypto/bcm_support.h",
-    "src/crypto/bio/internal.h",
-    "src/crypto/bytestring/internal.h",
-    "src/crypto/chacha/internal.h",
-    "src/crypto/cipher/internal.h",
-    "src/crypto/conf/internal.h",
-    "src/crypto/cpu_arm_linux.h",
-    "src/crypto/curve25519/curve25519_tables.h",
-    "src/crypto/curve25519/internal.h",
-    "src/crypto/des/internal.h",
-    "src/crypto/dsa/internal.h",
-    "src/crypto/ec/internal.h",
-    "src/crypto/err/internal.h",
-    "src/crypto/evp/internal.h",
-    "src/crypto/fipsmodule/aes/internal.h",
-    "src/crypto/fipsmodule/bcm_interface.h",
-    "src/crypto/fipsmodule/bn/internal.h",
-    "src/crypto/fipsmodule/bn/rsaz_exp.h",
-    "src/crypto/fipsmodule/cipher/internal.h",
-    "src/crypto/fipsmodule/delocate.h",
-    "src/crypto/fipsmodule/dh/internal.h",
-    "src/crypto/fipsmodule/digest/internal.h",
-    "src/crypto/fipsmodule/digest/md32_common.h",
-    "src/crypto/fipsmodule/ec/builtin_curves.h",
-    "src/crypto/fipsmodule/ec/internal.h",
-    "src/crypto/fipsmodule/ec/p256-nistz-table.h",
-    "src/crypto/fipsmodule/ec/p256-nistz.h",
-    "src/crypto/fipsmodule/ec/p256_table.h",
-    "src/crypto/fipsmodule/ecdsa/internal.h",
-    "src/crypto/fipsmodule/keccak/internal.h",
-    "src/crypto/fipsmodule/rand/internal.h",
-    "src/crypto/fipsmodule/rsa/internal.h",
-    "src/crypto/fipsmodule/service_indicator/internal.h",
-    "src/crypto/fipsmodule/sha/internal.h",
-    "src/crypto/fipsmodule/slhdsa/address.h",
-    "src/crypto/fipsmodule/slhdsa/fors.h",
-    "src/crypto/fipsmodule/slhdsa/merkle.h",
-    "src/crypto/fipsmodule/slhdsa/params.h",
-    "src/crypto/fipsmodule/slhdsa/thash.h",
-    "src/crypto/fipsmodule/slhdsa/wots.h",
-    "src/crypto/fipsmodule/tls/internal.h",
-    "src/crypto/hrss/internal.h",
-    "src/crypto/internal.h",
-    "src/crypto/kyber/internal.h",
-    "src/crypto/lhash/internal.h",
-    "src/crypto/md5/internal.h",
-    "src/crypto/obj/obj_dat.h",
-    "src/crypto/pem/internal.h",
-    "src/crypto/pkcs7/internal.h",
-    "src/crypto/pkcs8/internal.h",
-    "src/crypto/poly1305/internal.h",
-    "src/crypto/pool/internal.h",
-    "src/crypto/rand/getrandom_fillin.h",
-    "src/crypto/rand/internal.h",
-    "src/crypto/rsa/internal.h",
-    "src/crypto/spake2plus/internal.h",
-    "src/crypto/trust_token/internal.h",
-    "src/crypto/x509/ext_dat.h",
-    "src/crypto/x509/internal.h",
-    "src/third_party/fiat/curve25519_32.h",
-    "src/third_party/fiat/curve25519_64.h",
-    "src/third_party/fiat/curve25519_64_adx.h",
-    "src/third_party/fiat/curve25519_64_msvc.h",
-    "src/third_party/fiat/p256_32.h",
-    "src/third_party/fiat/p256_64.h",
-    "src/third_party/fiat/p256_64_msvc.h"
-  ],
-  "crypto_nasm": [
-    "src/gen/bcm/aes-gcm-avx2-x86_64-win.asm",
-    "src/gen/bcm/aes-gcm-avx512-x86_64-win.asm",
-    "src/gen/bcm/aesni-gcm-x86_64-win.asm",
-    "src/gen/bcm/aesni-x86-win.asm",
-    "src/gen/bcm/aesni-x86_64-win.asm",
-    "src/gen/bcm/bn-586-win.asm",
-    "src/gen/bcm/co-586-win.asm",
-    "src/gen/bcm/ghash-ssse3-x86-win.asm",
-    "src/gen/bcm/ghash-ssse3-x86_64-win.asm",
-    "src/gen/bcm/ghash-x86-win.asm",
-    "src/gen/bcm/ghash-x86_64-win.asm",
-    "src/gen/bcm/p256-x86_64-asm-win.asm",
-    "src/gen/bcm/p256_beeu-x86_64-asm-win.asm",
-    "src/gen/bcm/rdrand-x86_64-win.asm",
-    "src/gen/bcm/rsaz-avx2-win.asm",
-    "src/gen/bcm/sha1-586-win.asm",
-    "src/gen/bcm/sha1-x86_64-win.asm",
-    "src/gen/bcm/sha256-586-win.asm",
-    "src/gen/bcm/sha256-x86_64-win.asm",
-    "src/gen/bcm/sha512-586-win.asm",
-    "src/gen/bcm/sha512-x86_64-win.asm",
-    "src/gen/bcm/vpaes-x86-win.asm",
-    "src/gen/bcm/vpaes-x86_64-win.asm",
-    "src/gen/bcm/x86-mont-win.asm",
-    "src/gen/bcm/x86_64-mont-win.asm",
-    "src/gen/bcm/x86_64-mont5-win.asm",
-    "src/gen/crypto/aes128gcmsiv-x86_64-win.asm",
-    "src/gen/crypto/chacha-x86-win.asm",
-    "src/gen/crypto/chacha-x86_64-win.asm",
-    "src/gen/crypto/chacha20_poly1305_x86_64-win.asm",
-    "src/gen/crypto/md5-586-win.asm",
-    "src/gen/crypto/md5-x86_64-win.asm",
-    "src/gen/test_support/trampoline-x86-win.asm",
-    "src/gen/test_support/trampoline-x86_64-win.asm"
-  ],
-  "crypto_test": [
-    "src/crypto/abi_self_test.cc",
-    "src/crypto/asn1/asn1_test.cc",
-    "src/crypto/base64/base64_test.cc",
-    "src/crypto/bio/bio_test.cc",
-    "src/crypto/blake2/blake2_test.cc",
-    "src/crypto/buf/buf_test.cc",
-    "src/crypto/bytestring/bytestring_test.cc",
-    "src/crypto/chacha/chacha_test.cc",
-    "src/crypto/cipher/aead_test.cc",
-    "src/crypto/cipher/cipher_test.cc",
-    "src/crypto/cms/cms_test.cc",
-    "src/crypto/compiler_test.cc",
-    "src/crypto/conf/conf_test.cc",
-    "src/crypto/constant_time_test.cc",
-    "src/crypto/cpu_arm_linux_test.cc",
-    "src/crypto/crypto_test.cc",
-    "src/crypto/curve25519/ed25519_test.cc",
-    "src/crypto/curve25519/spake25519_test.cc",
-    "src/crypto/curve25519/x25519_test.cc",
-    "src/crypto/dh/dh_test.cc",
-    "src/crypto/digest/digest_test.cc",
-    "src/crypto/dsa/dsa_test.cc",
-    "src/crypto/ecdh/ecdh_test.cc",
-    "src/crypto/err/err_test.cc",
-    "src/crypto/evp/evp_extra_test.cc",
-    "src/crypto/evp/evp_test.cc",
-    "src/crypto/evp/pbkdf_test.cc",
-    "src/crypto/evp/scrypt_test.cc",
-    "src/crypto/fipsmodule/aes/aes_test.cc",
-    "src/crypto/fipsmodule/aes/gcm_test.cc",
-    "src/crypto/fipsmodule/bn/bn_test.cc",
-    "src/crypto/fipsmodule/cmac/cmac_test.cc",
-    "src/crypto/fipsmodule/ec/ec_test.cc",
-    "src/crypto/fipsmodule/ec/p256-nistz_test.cc",
-    "src/crypto/fipsmodule/ec/p256_test.cc",
-    "src/crypto/fipsmodule/ecdsa/ecdsa_test.cc",
-    "src/crypto/fipsmodule/hkdf/hkdf_test.cc",
-    "src/crypto/fipsmodule/keccak/keccak_test.cc",
-    "src/crypto/fipsmodule/rand/ctrdrbg_test.cc",
-    "src/crypto/fipsmodule/service_indicator/service_indicator_test.cc",
-    "src/crypto/fipsmodule/sha/sha_test.cc",
-    "src/crypto/hmac/hmac_test.cc",
-    "src/crypto/hpke/hpke_test.cc",
-    "src/crypto/hrss/hrss_test.cc",
-    "src/crypto/impl_dispatch_test.cc",
-    "src/crypto/kyber/kyber_test.cc",
-    "src/crypto/lhash/lhash_test.cc",
-    "src/crypto/md5/md5_test.cc",
-    "src/crypto/mldsa/mldsa_test.cc",
-    "src/crypto/mlkem/mlkem_test.cc",
-    "src/crypto/obj/obj_test.cc",
-    "src/crypto/pem/pem_test.cc",
-    "src/crypto/pkcs7/pkcs7_test.cc",
-    "src/crypto/pkcs8/pkcs12_test.cc",
-    "src/crypto/pkcs8/pkcs8_test.cc",
-    "src/crypto/poly1305/poly1305_test.cc",
-    "src/crypto/pool/pool_test.cc",
-    "src/crypto/rand/fork_detect_test.cc",
-    "src/crypto/rand/getentropy_test.cc",
-    "src/crypto/rand/rand_test.cc",
-    "src/crypto/refcount_test.cc",
-    "src/crypto/rsa/rsa_test.cc",
-    "src/crypto/self_test.cc",
-    "src/crypto/siphash/siphash_test.cc",
-    "src/crypto/slhdsa/slhdsa_test.cc",
-    "src/crypto/spake2plus/spake2plus_test.cc",
-    "src/crypto/stack/stack_test.cc",
-    "src/crypto/test/gtest_main.cc",
-    "src/crypto/thread_test.cc",
-    "src/crypto/trust_token/trust_token_test.cc",
-    "src/crypto/x509/tab_test.cc",
-    "src/crypto/x509/x509_test.cc",
-    "src/crypto/x509/x509_time_test.cc"
-  ],
-  "crypto_test_data": [
-    "src/crypto/blake2/blake2b256_tests.txt",
-    "src/crypto/cipher/test/aes_128_cbc_sha1_tls_implicit_iv_tests.txt",
-    "src/crypto/cipher/test/aes_128_cbc_sha1_tls_tests.txt",
-    "src/crypto/cipher/test/aes_128_ccm_bluetooth_8_tests.txt",
-    "src/crypto/cipher/test/aes_128_ccm_bluetooth_tests.txt",
-    "src/crypto/cipher/test/aes_128_ccm_matter_tests.txt",
-    "src/crypto/cipher/test/aes_128_ctr_hmac_sha256.txt",
-    "src/crypto/cipher/test/aes_128_eax_test.txt",
-    "src/crypto/cipher/test/aes_128_gcm_randnonce_tests.txt",
-    "src/crypto/cipher/test/aes_128_gcm_siv_tests.txt",
-    "src/crypto/cipher/test/aes_128_gcm_tests.txt",
-    "src/crypto/cipher/test/aes_192_gcm_tests.txt",
-    "src/crypto/cipher/test/aes_256_cbc_sha1_tls_implicit_iv_tests.txt",
-    "src/crypto/cipher/test/aes_256_cbc_sha1_tls_tests.txt",
-    "src/crypto/cipher/test/aes_256_ctr_hmac_sha256.txt",
-    "src/crypto/cipher/test/aes_256_eax_test.txt",
-    "src/crypto/cipher/test/aes_256_gcm_randnonce_tests.txt",
-    "src/crypto/cipher/test/aes_256_gcm_siv_tests.txt",
-    "src/crypto/cipher/test/aes_256_gcm_tests.txt",
-    "src/crypto/cipher/test/chacha20_poly1305_tests.txt",
-    "src/crypto/cipher/test/cipher_tests.txt",
-    "src/crypto/cipher/test/des_ede3_cbc_sha1_tls_implicit_iv_tests.txt",
-    "src/crypto/cipher/test/des_ede3_cbc_sha1_tls_tests.txt",
-    "src/crypto/cipher/test/nist_cavp/aes_128_cbc.txt",
-    "src/crypto/cipher/test/nist_cavp/aes_128_ctr.txt",
-    "src/crypto/cipher/test/nist_cavp/aes_128_gcm.txt",
-    "src/crypto/cipher/test/nist_cavp/aes_192_cbc.txt",
-    "src/crypto/cipher/test/nist_cavp/aes_192_ctr.txt",
-    "src/crypto/cipher/test/nist_cavp/aes_256_cbc.txt",
-    "src/crypto/cipher/test/nist_cavp/aes_256_ctr.txt",
-    "src/crypto/cipher/test/nist_cavp/aes_256_gcm.txt",
-    "src/crypto/cipher/test/nist_cavp/tdes_cbc.txt",
-    "src/crypto/cipher/test/nist_cavp/tdes_ecb.txt",
-    "src/crypto/cipher/test/xchacha20_poly1305_tests.txt",
-    "src/crypto/curve25519/ed25519_tests.txt",
-    "src/crypto/ecdh/ecdh_tests.txt",
-    "src/crypto/evp/evp_tests.txt",
-    "src/crypto/evp/scrypt_tests.txt",
-    "src/crypto/fipsmodule/aes/aes_tests.txt",
-    "src/crypto/fipsmodule/bn/test/exp_tests.txt",
-    "src/crypto/fipsmodule/bn/test/gcd_tests.txt",
-    "src/crypto/fipsmodule/bn/test/miller_rabin_tests.txt",
-    "src/crypto/fipsmodule/bn/test/mod_exp_tests.txt",
-    "src/crypto/fipsmodule/bn/test/mod_inv_tests.txt",
-    "src/crypto/fipsmodule/bn/test/mod_mul_tests.txt",
-    "src/crypto/fipsmodule/bn/test/mod_sqrt_tests.txt",
-    "src/crypto/fipsmodule/bn/test/product_tests.txt",
-    "src/crypto/fipsmodule/bn/test/quotient_tests.txt",
-    "src/crypto/fipsmodule/bn/test/shift_tests.txt",
-    "src/crypto/fipsmodule/bn/test/sum_tests.txt",
-    "src/crypto/fipsmodule/cmac/cavp_3des_cmac_tests.txt",
-    "src/crypto/fipsmodule/cmac/cavp_aes128_cmac_tests.txt",
-    "src/crypto/fipsmodule/cmac/cavp_aes192_cmac_tests.txt",
-    "src/crypto/fipsmodule/cmac/cavp_aes256_cmac_tests.txt",
-    "src/crypto/fipsmodule/ec/ec_scalar_base_mult_tests.txt",
-    "src/crypto/fipsmodule/ec/p256-nistz_tests.txt",
-    "src/crypto/fipsmodule/ecdsa/ecdsa_sign_tests.txt",
-    "src/crypto/fipsmodule/ecdsa/ecdsa_verify_tests.txt",
-    "src/crypto/fipsmodule/keccak/keccak_tests.txt",
-    "src/crypto/fipsmodule/rand/ctrdrbg_vectors.txt",
-    "src/crypto/hmac/hmac_tests.txt",
-    "src/crypto/hpke/hpke_test_vectors.txt",
-    "src/crypto/kyber/kyber_tests.txt",
-    "src/crypto/mldsa/mldsa_nist_keygen_65_tests.txt",
-    "src/crypto/mldsa/mldsa_nist_keygen_87_tests.txt",
-    "src/crypto/mldsa/mldsa_nist_siggen_65_tests.txt",
-    "src/crypto/mldsa/mldsa_nist_siggen_87_tests.txt",
-    "src/crypto/mlkem/mlkem1024_decap_tests.txt",
-    "src/crypto/mlkem/mlkem1024_encap_tests.txt",
-    "src/crypto/mlkem/mlkem1024_keygen_tests.txt",
-    "src/crypto/mlkem/mlkem1024_nist_decap_tests.txt",
-    "src/crypto/mlkem/mlkem1024_nist_keygen_tests.txt",
-    "src/crypto/mlkem/mlkem768_decap_tests.txt",
-    "src/crypto/mlkem/mlkem768_encap_tests.txt",
-    "src/crypto/mlkem/mlkem768_keygen_tests.txt",
-    "src/crypto/mlkem/mlkem768_nist_decap_tests.txt",
-    "src/crypto/mlkem/mlkem768_nist_keygen_tests.txt",
-    "src/crypto/pkcs7/test/nss.p7c",
-    "src/crypto/pkcs7/test/openssl_crl.p7c",
-    "src/crypto/pkcs7/test/sign_cert.pem",
-    "src/crypto/pkcs7/test/sign_key.pem",
-    "src/crypto/pkcs7/test/sign_sha1.p7s",
-    "src/crypto/pkcs7/test/sign_sha1_key_id.p7s",
-    "src/crypto/pkcs7/test/sign_sha256.p7s",
-    "src/crypto/pkcs7/test/sign_sha256_key_id.p7s",
-    "src/crypto/pkcs7/test/windows.p7c",
-    "src/crypto/pkcs8/test/bad1.p12",
-    "src/crypto/pkcs8/test/bad2.p12",
-    "src/crypto/pkcs8/test/bad3.p12",
-    "src/crypto/pkcs8/test/empty_password.p12",
-    "src/crypto/pkcs8/test/empty_password_ber.p12",
-    "src/crypto/pkcs8/test/empty_password_ber_nested.p12",
-    "src/crypto/pkcs8/test/no_encryption.p12",
-    "src/crypto/pkcs8/test/nss.p12",
-    "src/crypto/pkcs8/test/null_password.p12",
-    "src/crypto/pkcs8/test/openssl.p12",
-    "src/crypto/pkcs8/test/pbes2_sha1.p12",
-    "src/crypto/pkcs8/test/pbes2_sha256.p12",
-    "src/crypto/pkcs8/test/unicode_password.p12",
-    "src/crypto/pkcs8/test/windows.p12",
-    "src/crypto/poly1305/poly1305_tests.txt",
-    "src/crypto/siphash/siphash_tests.txt",
-    "src/crypto/slhdsa/slhdsa_keygen.txt",
-    "src/crypto/slhdsa/slhdsa_prehash.txt",
-    "src/crypto/slhdsa/slhdsa_siggen.txt",
-    "src/crypto/slhdsa/slhdsa_sigver.txt",
-    "src/crypto/x509/test/basic_constraints_ca.pem",
-    "src/crypto/x509/test/basic_constraints_ca_pathlen_0.pem",
-    "src/crypto/x509/test/basic_constraints_ca_pathlen_1.pem",
-    "src/crypto/x509/test/basic_constraints_ca_pathlen_10.pem",
-    "src/crypto/x509/test/basic_constraints_leaf.pem",
-    "src/crypto/x509/test/basic_constraints_none.pem",
-    "src/crypto/x509/test/invalid_extension_intermediate.pem",
-    "src/crypto/x509/test/invalid_extension_intermediate_authority_key_identifier.pem",
-    "src/crypto/x509/test/invalid_extension_intermediate_basic_constraints.pem",
-    "src/crypto/x509/test/invalid_extension_intermediate_ext_key_usage.pem",
-    "src/crypto/x509/test/invalid_extension_intermediate_key_usage.pem",
-    "src/crypto/x509/test/invalid_extension_intermediate_name_constraints.pem",
-    "src/crypto/x509/test/invalid_extension_intermediate_subject_alt_name.pem",
-    "src/crypto/x509/test/invalid_extension_intermediate_subject_key_identifier.pem",
-    "src/crypto/x509/test/invalid_extension_leaf.pem",
-    "src/crypto/x509/test/invalid_extension_leaf_authority_key_identifier.pem",
-    "src/crypto/x509/test/invalid_extension_leaf_basic_constraints.pem",
-    "src/crypto/x509/test/invalid_extension_leaf_ext_key_usage.pem",
-    "src/crypto/x509/test/invalid_extension_leaf_key_usage.pem",
-    "src/crypto/x509/test/invalid_extension_leaf_name_constraints.pem",
-    "src/crypto/x509/test/invalid_extension_leaf_subject_alt_name.pem",
-    "src/crypto/x509/test/invalid_extension_leaf_subject_key_identifier.pem",
-    "src/crypto/x509/test/invalid_extension_root.pem",
-    "src/crypto/x509/test/invalid_extension_root_authority_key_identifier.pem",
-    "src/crypto/x509/test/invalid_extension_root_basic_constraints.pem",
-    "src/crypto/x509/test/invalid_extension_root_ext_key_usage.pem",
-    "src/crypto/x509/test/invalid_extension_root_key_usage.pem",
-    "src/crypto/x509/test/invalid_extension_root_name_constraints.pem",
-    "src/crypto/x509/test/invalid_extension_root_subject_alt_name.pem",
-    "src/crypto/x509/test/invalid_extension_root_subject_key_identifier.pem",
-    "src/crypto/x509/test/many_constraints.pem",
-    "src/crypto/x509/test/many_names1.pem",
-    "src/crypto/x509/test/many_names2.pem",
-    "src/crypto/x509/test/many_names3.pem",
-    "src/crypto/x509/test/policy_intermediate.pem",
-    "src/crypto/x509/test/policy_intermediate_any.pem",
-    "src/crypto/x509/test/policy_intermediate_duplicate.pem",
-    "src/crypto/x509/test/policy_intermediate_invalid.pem",
-    "src/crypto/x509/test/policy_intermediate_mapped.pem",
-    "src/crypto/x509/test/policy_intermediate_mapped_any.pem",
-    "src/crypto/x509/test/policy_intermediate_mapped_oid3.pem",
-    "src/crypto/x509/test/policy_intermediate_require.pem",
-    "src/crypto/x509/test/policy_intermediate_require1.pem",
-    "src/crypto/x509/test/policy_intermediate_require2.pem",
-    "src/crypto/x509/test/policy_intermediate_require_duplicate.pem",
-    "src/crypto/x509/test/policy_intermediate_require_no_policies.pem",
-    "src/crypto/x509/test/policy_leaf.pem",
-    "src/crypto/x509/test/policy_leaf_any.pem",
-    "src/crypto/x509/test/policy_leaf_duplicate.pem",
-    "src/crypto/x509/test/policy_leaf_invalid.pem",
-    "src/crypto/x509/test/policy_leaf_none.pem",
-    "src/crypto/x509/test/policy_leaf_oid1.pem",
-    "src/crypto/x509/test/policy_leaf_oid2.pem",
-    "src/crypto/x509/test/policy_leaf_oid3.pem",
-    "src/crypto/x509/test/policy_leaf_oid4.pem",
-    "src/crypto/x509/test/policy_leaf_oid5.pem",
-    "src/crypto/x509/test/policy_leaf_require.pem",
-    "src/crypto/x509/test/policy_leaf_require1.pem",
-    "src/crypto/x509/test/policy_root.pem",
-    "src/crypto/x509/test/policy_root2.pem",
-    "src/crypto/x509/test/policy_root_cross_inhibit_mapping.pem",
-    "src/crypto/x509/test/pss_sha1.pem",
-    "src/crypto/x509/test/pss_sha1_explicit.pem",
-    "src/crypto/x509/test/pss_sha1_mgf1_syntax_error.pem",
-    "src/crypto/x509/test/pss_sha224.pem",
-    "src/crypto/x509/test/pss_sha256.pem",
-    "src/crypto/x509/test/pss_sha256_explicit_trailer.pem",
-    "src/crypto/x509/test/pss_sha256_mgf1_sha384.pem",
-    "src/crypto/x509/test/pss_sha256_mgf1_syntax_error.pem",
-    "src/crypto/x509/test/pss_sha256_omit_nulls.pem",
-    "src/crypto/x509/test/pss_sha256_salt31.pem",
-    "src/crypto/x509/test/pss_sha256_salt_overflow.pem",
-    "src/crypto/x509/test/pss_sha256_unknown_mgf.pem",
-    "src/crypto/x509/test/pss_sha256_wrong_trailer.pem",
-    "src/crypto/x509/test/pss_sha384.pem",
-    "src/crypto/x509/test/pss_sha512.pem",
-    "src/crypto/x509/test/some_names1.pem",
-    "src/crypto/x509/test/some_names2.pem",
-    "src/crypto/x509/test/some_names3.pem",
-    "src/crypto/x509/test/trailing_data_leaf_authority_key_identifier.pem",
-    "src/crypto/x509/test/trailing_data_leaf_basic_constraints.pem",
-    "src/crypto/x509/test/trailing_data_leaf_ext_key_usage.pem",
-    "src/crypto/x509/test/trailing_data_leaf_key_usage.pem",
-    "src/crypto/x509/test/trailing_data_leaf_name_constraints.pem",
-    "src/crypto/x509/test/trailing_data_leaf_subject_alt_name.pem",
-    "src/crypto/x509/test/trailing_data_leaf_subject_key_identifier.pem",
-    "src/third_party/wycheproof_testvectors/aes_cbc_pkcs5_test.txt",
-    "src/third_party/wycheproof_testvectors/aes_cmac_test.txt",
-    "src/third_party/wycheproof_testvectors/aes_eax_test.txt",
-    "src/third_party/wycheproof_testvectors/aes_gcm_siv_test.txt",
-    "src/third_party/wycheproof_testvectors/aes_gcm_test.txt",
-    "src/third_party/wycheproof_testvectors/chacha20_poly1305_test.txt",
-    "src/third_party/wycheproof_testvectors/dsa_test.txt",
-    "src/third_party/wycheproof_testvectors/ecdh_secp224r1_test.txt",
-    "src/third_party/wycheproof_testvectors/ecdh_secp256r1_test.txt",
-    "src/third_party/wycheproof_testvectors/ecdh_secp384r1_test.txt",
-    "src/third_party/wycheproof_testvectors/ecdh_secp521r1_test.txt",
-    "src/third_party/wycheproof_testvectors/ecdsa_secp224r1_sha224_test.txt",
-    "src/third_party/wycheproof_testvectors/ecdsa_secp224r1_sha256_test.txt",
-    "src/third_party/wycheproof_testvectors/ecdsa_secp224r1_sha512_test.txt",
-    "src/third_party/wycheproof_testvectors/ecdsa_secp256r1_sha256_test.txt",
-    "src/third_party/wycheproof_testvectors/ecdsa_secp256r1_sha512_test.txt",
-    "src/third_party/wycheproof_testvectors/ecdsa_secp384r1_sha384_test.txt",
-    "src/third_party/wycheproof_testvectors/ecdsa_secp384r1_sha512_test.txt",
-    "src/third_party/wycheproof_testvectors/ecdsa_secp521r1_sha512_test.txt",
-    "src/third_party/wycheproof_testvectors/eddsa_test.txt",
-    "src/third_party/wycheproof_testvectors/hkdf_sha1_test.txt",
-    "src/third_party/wycheproof_testvectors/hkdf_sha256_test.txt",
-    "src/third_party/wycheproof_testvectors/hkdf_sha384_test.txt",
-    "src/third_party/wycheproof_testvectors/hkdf_sha512_test.txt",
-    "src/third_party/wycheproof_testvectors/hmac_sha1_test.txt",
-    "src/third_party/wycheproof_testvectors/hmac_sha224_test.txt",
-    "src/third_party/wycheproof_testvectors/hmac_sha256_test.txt",
-    "src/third_party/wycheproof_testvectors/hmac_sha384_test.txt",
-    "src/third_party/wycheproof_testvectors/hmac_sha512_test.txt",
-    "src/third_party/wycheproof_testvectors/kw_test.txt",
-    "src/third_party/wycheproof_testvectors/kwp_test.txt",
-    "src/third_party/wycheproof_testvectors/mldsa_65_standard_sign_test.txt",
-    "src/third_party/wycheproof_testvectors/mldsa_65_standard_verify_test.txt",
-    "src/third_party/wycheproof_testvectors/mldsa_87_standard_sign_test.txt",
-    "src/third_party/wycheproof_testvectors/mldsa_87_standard_verify_test.txt",
-    "src/third_party/wycheproof_testvectors/primality_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_oaep_2048_sha1_mgf1sha1_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_oaep_2048_sha224_mgf1sha1_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_oaep_2048_sha224_mgf1sha224_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_oaep_2048_sha256_mgf1sha1_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_oaep_2048_sha256_mgf1sha256_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_oaep_2048_sha384_mgf1sha1_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_oaep_2048_sha384_mgf1sha384_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_oaep_2048_sha512_mgf1sha1_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_oaep_2048_sha512_mgf1sha512_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_oaep_3072_sha256_mgf1sha1_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_oaep_3072_sha256_mgf1sha256_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_oaep_3072_sha512_mgf1sha1_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_oaep_3072_sha512_mgf1sha512_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_oaep_4096_sha256_mgf1sha1_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_oaep_4096_sha256_mgf1sha256_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_oaep_4096_sha512_mgf1sha1_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_oaep_4096_sha512_mgf1sha512_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_oaep_misc_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_pkcs1_2048_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_pkcs1_3072_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_pkcs1_4096_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_pss_2048_sha1_mgf1_20_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_pss_2048_sha256_mgf1_0_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_pss_2048_sha256_mgf1_32_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_pss_3072_sha256_mgf1_32_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_pss_4096_sha256_mgf1_32_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_pss_4096_sha512_mgf1_32_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_pss_misc_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_sig_gen_misc_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_signature_2048_sha224_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_signature_2048_sha256_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_signature_2048_sha384_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_signature_2048_sha512_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_signature_3072_sha256_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_signature_3072_sha384_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_signature_3072_sha512_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_signature_4096_sha384_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_signature_4096_sha512_test.txt",
-    "src/third_party/wycheproof_testvectors/rsa_signature_test.txt",
-    "src/third_party/wycheproof_testvectors/x25519_test.txt",
-    "src/third_party/wycheproof_testvectors/xchacha20_poly1305_test.txt"
-  ],
-  "fips_fragments": [
-    "src/crypto/fipsmodule/aes/aes.cc.inc",
-    "src/crypto/fipsmodule/aes/aes_nohw.cc.inc",
-    "src/crypto/fipsmodule/aes/cbc.cc.inc",
-    "src/crypto/fipsmodule/aes/cfb.cc.inc",
-    "src/crypto/fipsmodule/aes/ctr.cc.inc",
-    "src/crypto/fipsmodule/aes/gcm.cc.inc",
-    "src/crypto/fipsmodule/aes/gcm_nohw.cc.inc",
-    "src/crypto/fipsmodule/aes/key_wrap.cc.inc",
-    "src/crypto/fipsmodule/aes/mode_wrappers.cc.inc",
-    "src/crypto/fipsmodule/aes/ofb.cc.inc",
-    "src/crypto/fipsmodule/bn/add.cc.inc",
-    "src/crypto/fipsmodule/bn/asm/x86_64-gcc.cc.inc",
-    "src/crypto/fipsmodule/bn/bn.cc.inc",
-    "src/crypto/fipsmodule/bn/bytes.cc.inc",
-    "src/crypto/fipsmodule/bn/cmp.cc.inc",
-    "src/crypto/fipsmodule/bn/ctx.cc.inc",
-    "src/crypto/fipsmodule/bn/div.cc.inc",
-    "src/crypto/fipsmodule/bn/div_extra.cc.inc",
-    "src/crypto/fipsmodule/bn/exponentiation.cc.inc",
-    "src/crypto/fipsmodule/bn/gcd.cc.inc",
-    "src/crypto/fipsmodule/bn/gcd_extra.cc.inc",
-    "src/crypto/fipsmodule/bn/generic.cc.inc",
-    "src/crypto/fipsmodule/bn/jacobi.cc.inc",
-    "src/crypto/fipsmodule/bn/montgomery.cc.inc",
-    "src/crypto/fipsmodule/bn/montgomery_inv.cc.inc",
-    "src/crypto/fipsmodule/bn/mul.cc.inc",
-    "src/crypto/fipsmodule/bn/prime.cc.inc",
-    "src/crypto/fipsmodule/bn/random.cc.inc",
-    "src/crypto/fipsmodule/bn/rsaz_exp.cc.inc",
-    "src/crypto/fipsmodule/bn/shift.cc.inc",
-    "src/crypto/fipsmodule/bn/sqrt.cc.inc",
-    "src/crypto/fipsmodule/cipher/aead.cc.inc",
-    "src/crypto/fipsmodule/cipher/cipher.cc.inc",
-    "src/crypto/fipsmodule/cipher/e_aes.cc.inc",
-    "src/crypto/fipsmodule/cipher/e_aesccm.cc.inc",
-    "src/crypto/fipsmodule/cmac/cmac.cc.inc",
-    "src/crypto/fipsmodule/dh/check.cc.inc",
-    "src/crypto/fipsmodule/dh/dh.cc.inc",
-    "src/crypto/fipsmodule/digest/digest.cc.inc",
-    "src/crypto/fipsmodule/digest/digests.cc.inc",
-    "src/crypto/fipsmodule/digestsign/digestsign.cc.inc",
-    "src/crypto/fipsmodule/ec/ec.cc.inc",
-    "src/crypto/fipsmodule/ec/ec_key.cc.inc",
-    "src/crypto/fipsmodule/ec/ec_montgomery.cc.inc",
-    "src/crypto/fipsmodule/ec/felem.cc.inc",
-    "src/crypto/fipsmodule/ec/oct.cc.inc",
-    "src/crypto/fipsmodule/ec/p224-64.cc.inc",
-    "src/crypto/fipsmodule/ec/p256-nistz.cc.inc",
-    "src/crypto/fipsmodule/ec/p256.cc.inc",
-    "src/crypto/fipsmodule/ec/scalar.cc.inc",
-    "src/crypto/fipsmodule/ec/simple.cc.inc",
-    "src/crypto/fipsmodule/ec/simple_mul.cc.inc",
-    "src/crypto/fipsmodule/ec/util.cc.inc",
-    "src/crypto/fipsmodule/ec/wnaf.cc.inc",
-    "src/crypto/fipsmodule/ecdh/ecdh.cc.inc",
-    "src/crypto/fipsmodule/ecdsa/ecdsa.cc.inc",
-    "src/crypto/fipsmodule/hkdf/hkdf.cc.inc",
-    "src/crypto/fipsmodule/hmac/hmac.cc.inc",
-    "src/crypto/fipsmodule/keccak/keccak.cc.inc",
-    "src/crypto/fipsmodule/mldsa/fips_known_values.inc",
-    "src/crypto/fipsmodule/mldsa/mldsa.cc.inc",
-    "src/crypto/fipsmodule/mlkem/fips_known_values.inc",
-    "src/crypto/fipsmodule/mlkem/mlkem.cc.inc",
-    "src/crypto/fipsmodule/rand/ctrdrbg.cc.inc",
-    "src/crypto/fipsmodule/rand/rand.cc.inc",
-    "src/crypto/fipsmodule/rsa/blinding.cc.inc",
-    "src/crypto/fipsmodule/rsa/padding.cc.inc",
-    "src/crypto/fipsmodule/rsa/rsa.cc.inc",
-    "src/crypto/fipsmodule/rsa/rsa_impl.cc.inc",
-    "src/crypto/fipsmodule/self_check/fips.cc.inc",
-    "src/crypto/fipsmodule/self_check/self_check.cc.inc",
-    "src/crypto/fipsmodule/service_indicator/service_indicator.cc.inc",
-    "src/crypto/fipsmodule/sha/sha1.cc.inc",
-    "src/crypto/fipsmodule/sha/sha256.cc.inc",
-    "src/crypto/fipsmodule/sha/sha512.cc.inc",
-    "src/crypto/fipsmodule/slhdsa/fips_known_values.inc",
-    "src/crypto/fipsmodule/slhdsa/fors.cc.inc",
-    "src/crypto/fipsmodule/slhdsa/merkle.cc.inc",
-    "src/crypto/fipsmodule/slhdsa/slhdsa.cc.inc",
-    "src/crypto/fipsmodule/slhdsa/thash.cc.inc",
-    "src/crypto/fipsmodule/slhdsa/wots.cc.inc",
-    "src/crypto/fipsmodule/tls/kdf.cc.inc"
-  ],
-  "fuzz": [
-    "src/fuzz/arm_cpuinfo.cc",
-    "src/fuzz/bn_div.cc",
-    "src/fuzz/bn_mod_exp.cc",
-    "src/fuzz/cert.cc",
-    "src/fuzz/client.cc",
-    "src/fuzz/client_no_fuzzer_mode.cc",
-    "src/fuzz/conf.cc",
-    "src/fuzz/crl_getcrlstatusforcert_fuzzer.cc",
-    "src/fuzz/crl_parse_crl_certificatelist_fuzzer.cc",
-    "src/fuzz/crl_parse_crl_tbscertlist_fuzzer.cc",
-    "src/fuzz/crl_parse_issuing_distribution_point_fuzzer.cc",
-    "src/fuzz/decode_client_hello_inner.cc",
-    "src/fuzz/der_roundtrip.cc",
-    "src/fuzz/dtls_client.cc",
-    "src/fuzz/dtls_server.cc",
-    "src/fuzz/ocsp_parse_ocsp_cert_id_fuzzer.cc",
-    "src/fuzz/ocsp_parse_ocsp_response_data_fuzzer.cc",
-    "src/fuzz/ocsp_parse_ocsp_response_fuzzer.cc",
-    "src/fuzz/ocsp_parse_ocsp_single_response_fuzzer.cc",
-    "src/fuzz/parse_authority_key_identifier_fuzzer.cc",
-    "src/fuzz/parse_certificate_fuzzer.cc",
-    "src/fuzz/parse_crldp_fuzzer.cc",
-    "src/fuzz/pkcs12.cc",
-    "src/fuzz/pkcs8.cc",
-    "src/fuzz/privkey.cc",
-    "src/fuzz/read_pem.cc",
-    "src/fuzz/server.cc",
-    "src/fuzz/server_no_fuzzer_mode.cc",
-    "src/fuzz/session.cc",
-    "src/fuzz/spki.cc",
-    "src/fuzz/ssl_ctx_api.cc",
-    "src/fuzz/verify_name_match_fuzzer.cc",
-    "src/fuzz/verify_name_match_normalizename_fuzzer.cc",
-    "src/fuzz/verify_name_match_verifynameinsubtree_fuzzer.cc"
-  ],
-  "pki": [
-    "src/pki/cert_error_id.cc",
-    "src/pki/cert_error_params.cc",
-    "src/pki/cert_errors.cc",
-    "src/pki/cert_issuer_source_static.cc",
-    "src/pki/certificate.cc",
-    "src/pki/certificate_policies.cc",
-    "src/pki/common_cert_errors.cc",
-    "src/pki/crl.cc",
-    "src/pki/encode_values.cc",
-    "src/pki/extended_key_usage.cc",
-    "src/pki/general_names.cc",
-    "src/pki/input.cc",
-    "src/pki/ip_util.cc",
-    "src/pki/name_constraints.cc",
-    "src/pki/ocsp.cc",
-    "src/pki/parse_certificate.cc",
-    "src/pki/parse_name.cc",
-    "src/pki/parse_values.cc",
-    "src/pki/parsed_certificate.cc",
-    "src/pki/parser.cc",
-    "src/pki/path_builder.cc",
-    "src/pki/pem.cc",
-    "src/pki/revocation_util.cc",
-    "src/pki/signature_algorithm.cc",
-    "src/pki/simple_path_builder_delegate.cc",
-    "src/pki/string_util.cc",
-    "src/pki/trust_store.cc",
-    "src/pki/trust_store_collection.cc",
-    "src/pki/trust_store_in_memory.cc",
-    "src/pki/verify.cc",
-    "src/pki/verify_certificate_chain.cc",
-    "src/pki/verify_error.cc",
-    "src/pki/verify_name_match.cc",
-    "src/pki/verify_signed_data.cc"
-  ],
-  "pki_headers": [
-    "src/include/openssl/pki/certificate.h",
-    "src/include/openssl/pki/ocsp.h",
-    "src/include/openssl/pki/signature_verify_cache.h",
-    "src/include/openssl/pki/verify.h",
-    "src/include/openssl/pki/verify_error.h"
-  ],
-  "pki_internal_headers": [
-    "src/pki/cert_error_id.h",
-    "src/pki/cert_error_params.h",
-    "src/pki/cert_errors.h",
-    "src/pki/cert_issuer_source.h",
-    "src/pki/cert_issuer_source_static.h",
-    "src/pki/cert_issuer_source_sync_unittest.h",
-    "src/pki/certificate_policies.h",
-    "src/pki/common_cert_errors.h",
-    "src/pki/crl.h",
-    "src/pki/encode_values.h",
-    "src/pki/extended_key_usage.h",
-    "src/pki/general_names.h",
-    "src/pki/input.h",
-    "src/pki/ip_util.h",
-    "src/pki/mock_signature_verify_cache.h",
-    "src/pki/name_constraints.h",
-    "src/pki/nist_pkits_unittest.h",
-    "src/pki/ocsp.h",
-    "src/pki/parse_certificate.h",
-    "src/pki/parse_name.h",
-    "src/pki/parse_values.h",
-    "src/pki/parsed_certificate.h",
-    "src/pki/parser.h",
-    "src/pki/path_builder.h",
-    "src/pki/pem.h",
-    "src/pki/revocation_util.h",
-    "src/pki/signature_algorithm.h",
-    "src/pki/simple_path_builder_delegate.h",
-    "src/pki/string_util.h",
-    "src/pki/test_helpers.h",
-    "src/pki/testdata/nist-pkits/pkits_testcases-inl.h",
-    "src/pki/trust_store.h",
-    "src/pki/trust_store_collection.h",
-    "src/pki/trust_store_in_memory.h",
-    "src/pki/verify_certificate_chain.h",
-    "src/pki/verify_certificate_chain_typed_unittest.h",
-    "src/pki/verify_name_match.h",
-    "src/pki/verify_signed_data.h"
-  ],
-  "pki_test": [
-    "src/crypto/test/gtest_main.cc",
-    "src/pki/cert_issuer_source_static_unittest.cc",
-    "src/pki/certificate_policies_unittest.cc",
-    "src/pki/certificate_unittest.cc",
-    "src/pki/crl_unittest.cc",
-    "src/pki/encode_values_unittest.cc",
-    "src/pki/extended_key_usage_unittest.cc",
-    "src/pki/general_names_unittest.cc",
-    "src/pki/input_unittest.cc",
-    "src/pki/ip_util_unittest.cc",
-    "src/pki/mock_signature_verify_cache.cc",
-    "src/pki/name_constraints_unittest.cc",
-    "src/pki/nist_pkits_unittest.cc",
-    "src/pki/ocsp_unittest.cc",
-    "src/pki/parse_certificate_unittest.cc",
-    "src/pki/parse_name_unittest.cc",
-    "src/pki/parse_values_unittest.cc",
-    "src/pki/parsed_certificate_unittest.cc",
-    "src/pki/parser_unittest.cc",
-    "src/pki/path_builder_pkits_unittest.cc",
-    "src/pki/path_builder_unittest.cc",
-    "src/pki/path_builder_verify_certificate_chain_unittest.cc",
-    "src/pki/pem_unittest.cc",
-    "src/pki/signature_algorithm_unittest.cc",
-    "src/pki/simple_path_builder_delegate_unittest.cc",
-    "src/pki/string_util_unittest.cc",
-    "src/pki/test_helpers.cc",
-    "src/pki/trust_store_collection_unittest.cc",
-    "src/pki/trust_store_in_memory_unittest.cc",
-    "src/pki/verify_certificate_chain_pkits_unittest.cc",
-    "src/pki/verify_certificate_chain_unittest.cc",
-    "src/pki/verify_name_match_unittest.cc",
-    "src/pki/verify_signed_data_unittest.cc",
-    "src/pki/verify_unittest.cc"
-  ],
-  "pki_test_data": [
-    "src/pki/testdata/cert_issuer_source_static_unittest/c1.pem",
-    "src/pki/testdata/cert_issuer_source_static_unittest/c2.pem",
-    "src/pki/testdata/cert_issuer_source_static_unittest/d.pem",
-    "src/pki/testdata/cert_issuer_source_static_unittest/e1.pem",
-    "src/pki/testdata/cert_issuer_source_static_unittest/e2.pem",
-    "src/pki/testdata/cert_issuer_source_static_unittest/i1_1.pem",
-    "src/pki/testdata/cert_issuer_source_static_unittest/i1_2.pem",
-    "src/pki/testdata/cert_issuer_source_static_unittest/i2.pem",
-    "src/pki/testdata/cert_issuer_source_static_unittest/i3_1.pem",
-    "src/pki/testdata/cert_issuer_source_static_unittest/i3_2.pem",
-    "src/pki/testdata/cert_issuer_source_static_unittest/root.pem",
-    "src/pki/testdata/certificate_policies_unittest/anypolicy.pem",
-    "src/pki/testdata/certificate_policies_unittest/anypolicy_with_qualifier.pem",
-    "src/pki/testdata/certificate_policies_unittest/invalid-anypolicy_with_custom_qualifier.pem",
-    "src/pki/testdata/certificate_policies_unittest/invalid-empty.pem",
-    "src/pki/testdata/certificate_policies_unittest/invalid-policy_1_2_3_dupe.pem",
-    "src/pki/testdata/certificate_policies_unittest/invalid-policy_1_2_3_policyinformation_unconsumed_data.pem",
-    "src/pki/testdata/certificate_policies_unittest/invalid-policy_1_2_3_policyqualifierinfo_unconsumed_data.pem",
-    "src/pki/testdata/certificate_policies_unittest/invalid-policy_1_2_3_with_empty_qualifiers_sequence.pem",
-    "src/pki/testdata/certificate_policies_unittest/invalid-policy_identifier_not_oid.pem",
-    "src/pki/testdata/certificate_policies_unittest/policy_1_2_3.pem",
-    "src/pki/testdata/certificate_policies_unittest/policy_1_2_3_and_1_2_4.pem",
-    "src/pki/testdata/certificate_policies_unittest/policy_1_2_3_and_1_2_4_with_qualifiers.pem",
-    "src/pki/testdata/certificate_policies_unittest/policy_1_2_3_with_custom_qualifier.pem",
-    "src/pki/testdata/certificate_policies_unittest/policy_1_2_3_with_qualifier.pem",
-    "src/pki/testdata/crl_unittest/bad_crldp_has_crlissuer.pem",
-    "src/pki/testdata/crl_unittest/bad_fake_critical_crlentryextension.pem",
-    "src/pki/testdata/crl_unittest/bad_fake_critical_extension.pem",
-    "src/pki/testdata/crl_unittest/bad_idp_contains_wrong_uri.pem",
-    "src/pki/testdata/crl_unittest/bad_idp_indirectcrl.pem",
-    "src/pki/testdata/crl_unittest/bad_idp_onlycontainscacerts.pem",
-    "src/pki/testdata/crl_unittest/bad_idp_onlycontainscacerts_no_basic_constraints.pem",
-    "src/pki/testdata/crl_unittest/bad_idp_onlycontainsusercerts.pem",
-    "src/pki/testdata/crl_unittest/bad_idp_uri_and_onlycontainscacerts.pem",
-    "src/pki/testdata/crl_unittest/bad_idp_uri_and_onlycontainsusercerts.pem",
-    "src/pki/testdata/crl_unittest/bad_key_rollover_signature.pem",
-    "src/pki/testdata/crl_unittest/bad_nextupdate_too_old.pem",
-    "src/pki/testdata/crl_unittest/bad_signature.pem",
-    "src/pki/testdata/crl_unittest/bad_thisupdate_in_future.pem",
-    "src/pki/testdata/crl_unittest/bad_thisupdate_too_old.pem",
-    "src/pki/testdata/crl_unittest/bad_wrong_issuer.pem",
-    "src/pki/testdata/crl_unittest/good.pem",
-    "src/pki/testdata/crl_unittest/good_fake_extension.pem",
-    "src/pki/testdata/crl_unittest/good_fake_extension_no_nextupdate.pem",
-    "src/pki/testdata/crl_unittest/good_generalizedtime.pem",
-    "src/pki/testdata/crl_unittest/good_idp_contains_uri.pem",
-    "src/pki/testdata/crl_unittest/good_idp_onlycontainscacerts.pem",
-    "src/pki/testdata/crl_unittest/good_idp_onlycontainsusercerts.pem",
-    "src/pki/testdata/crl_unittest/good_idp_onlycontainsusercerts_no_basic_constraints.pem",
-    "src/pki/testdata/crl_unittest/good_idp_uri_and_onlycontainscacerts.pem",
-    "src/pki/testdata/crl_unittest/good_idp_uri_and_onlycontainsusercerts.pem",
-    "src/pki/testdata/crl_unittest/good_issuer_name_normalization.pem",
-    "src/pki/testdata/crl_unittest/good_issuer_no_keyusage.pem",
-    "src/pki/testdata/crl_unittest/good_key_rollover.pem",
-    "src/pki/testdata/crl_unittest/good_no_crldp.pem",
-    "src/pki/testdata/crl_unittest/good_no_nextupdate.pem",
-    "src/pki/testdata/crl_unittest/good_no_version.pem",
-    "src/pki/testdata/crl_unittest/invalid_garbage_after_crlentryextensions.pem",
-    "src/pki/testdata/crl_unittest/invalid_garbage_after_extensions.pem",
-    "src/pki/testdata/crl_unittest/invalid_garbage_after_nextupdate.pem",
-    "src/pki/testdata/crl_unittest/invalid_garbage_after_revocationdate.pem",
-    "src/pki/testdata/crl_unittest/invalid_garbage_after_revokedcerts.pem",
-    "src/pki/testdata/crl_unittest/invalid_garbage_after_signaturevalue.pem",
-    "src/pki/testdata/crl_unittest/invalid_garbage_after_thisupdate.pem",
-    "src/pki/testdata/crl_unittest/invalid_garbage_crlentry.pem",
-    "src/pki/testdata/crl_unittest/invalid_garbage_issuer_name.pem",
-    "src/pki/testdata/crl_unittest/invalid_garbage_revocationdate.pem",
-    "src/pki/testdata/crl_unittest/invalid_garbage_revoked_serial_number.pem",
-    "src/pki/testdata/crl_unittest/invalid_garbage_signaturealgorithm.pem",
-    "src/pki/testdata/crl_unittest/invalid_garbage_signaturevalue.pem",
-    "src/pki/testdata/crl_unittest/invalid_garbage_tbs_signature_algorithm.pem",
-    "src/pki/testdata/crl_unittest/invalid_garbage_tbscertlist.pem",
-    "src/pki/testdata/crl_unittest/invalid_garbage_thisupdate.pem",
-    "src/pki/testdata/crl_unittest/invalid_garbage_version.pem",
-    "src/pki/testdata/crl_unittest/invalid_idp_dpname_choice_extra_data.pem",
-    "src/pki/testdata/crl_unittest/invalid_idp_empty_sequence.pem",
-    "src/pki/testdata/crl_unittest/invalid_idp_onlycontains_user_and_ca_certs.pem",
-    "src/pki/testdata/crl_unittest/invalid_idp_onlycontainsusercerts_v1_leaf.pem",
-    "src/pki/testdata/crl_unittest/invalid_issuer_keyusage_no_crlsign.pem",
-    "src/pki/testdata/crl_unittest/invalid_key_rollover_issuer_keyusage_no_crlsign.pem",
-    "src/pki/testdata/crl_unittest/invalid_mismatched_signature_algorithm.pem",
-    "src/pki/testdata/crl_unittest/invalid_revoked_empty_sequence.pem",
-    "src/pki/testdata/crl_unittest/invalid_v1_explicit.pem",
-    "src/pki/testdata/crl_unittest/invalid_v1_with_crlentryextension.pem",
-    "src/pki/testdata/crl_unittest/invalid_v1_with_extension.pem",
-    "src/pki/testdata/crl_unittest/invalid_v3.pem",
-    "src/pki/testdata/crl_unittest/revoked.pem",
-    "src/pki/testdata/crl_unittest/revoked_fake_crlentryextension.pem",
-    "src/pki/testdata/crl_unittest/revoked_generalized_revocationdate.pem",
-    "src/pki/testdata/crl_unittest/revoked_key_rollover.pem",
-    "src/pki/testdata/crl_unittest/revoked_no_nextupdate.pem",
-    "src/pki/testdata/name_constraints_unittest/directoryname-excludeall.pem",
-    "src/pki/testdata/name_constraints_unittest/directoryname-excluded.pem",
-    "src/pki/testdata/name_constraints_unittest/directoryname.pem",
-    "src/pki/testdata/name_constraints_unittest/directoryname_and_dnsname.pem",
-    "src/pki/testdata/name_constraints_unittest/directoryname_and_dnsname_and_ipaddress.pem",
-    "src/pki/testdata/name_constraints_unittest/dnsname-exclude_dot.pem",
-    "src/pki/testdata/name_constraints_unittest/dnsname-excludeall.pem",
-    "src/pki/testdata/name_constraints_unittest/dnsname-excluded.pem",
-    "src/pki/testdata/name_constraints_unittest/dnsname-excluded_with_leading_dot.pem",
-    "src/pki/testdata/name_constraints_unittest/dnsname-permitted_two_dot.pem",
-    "src/pki/testdata/name_constraints_unittest/dnsname-permitted_with_leading_dot.pem",
-    "src/pki/testdata/name_constraints_unittest/dnsname-with_max.pem",
-    "src/pki/testdata/name_constraints_unittest/dnsname-with_min_0.pem",
-    "src/pki/testdata/name_constraints_unittest/dnsname-with_min_0_and_max.pem",
-    "src/pki/testdata/name_constraints_unittest/dnsname-with_min_1.pem",
-    "src/pki/testdata/name_constraints_unittest/dnsname-with_min_1_and_max.pem",
-    "src/pki/testdata/name_constraints_unittest/dnsname.pem",
-    "src/pki/testdata/name_constraints_unittest/dnsname2.pem",
-    "src/pki/testdata/name_constraints_unittest/edipartyname-excluded.pem",
-    "src/pki/testdata/name_constraints_unittest/edipartyname-permitted.pem",
-    "src/pki/testdata/name_constraints_unittest/invalid-empty_excluded_subtree.pem",
-    "src/pki/testdata/name_constraints_unittest/invalid-empty_permitted_subtree.pem",
-    "src/pki/testdata/name_constraints_unittest/invalid-no_subtrees.pem",
-    "src/pki/testdata/name_constraints_unittest/ipaddress-excludeall.pem",
-    "src/pki/testdata/name_constraints_unittest/ipaddress-excluded.pem",
-    "src/pki/testdata/name_constraints_unittest/ipaddress-invalid_addr.pem",
-    "src/pki/testdata/name_constraints_unittest/ipaddress-invalid_mask_not_contiguous_1.pem",
-    "src/pki/testdata/name_constraints_unittest/ipaddress-invalid_mask_not_contiguous_2.pem",
-    "src/pki/testdata/name_constraints_unittest/ipaddress-invalid_mask_not_contiguous_3.pem",
-    "src/pki/testdata/name_constraints_unittest/ipaddress-invalid_mask_not_contiguous_4.pem",
-    "src/pki/testdata/name_constraints_unittest/ipaddress-mapped_addrs.pem",
-    "src/pki/testdata/name_constraints_unittest/ipaddress-permit_all.pem",
-    "src/pki/testdata/name_constraints_unittest/ipaddress-permit_prefix1.pem",
-    "src/pki/testdata/name_constraints_unittest/ipaddress-permit_prefix31.pem",
-    "src/pki/testdata/name_constraints_unittest/ipaddress-permit_singlehost.pem",
-    "src/pki/testdata/name_constraints_unittest/ipaddress.pem",
-    "src/pki/testdata/name_constraints_unittest/name-ca.pem",
-    "src/pki/testdata/name_constraints_unittest/name-de.pem",
-    "src/pki/testdata/name_constraints_unittest/name-empty.pem",
-    "src/pki/testdata/name_constraints_unittest/name-jp-tokyo.pem",
-    "src/pki/testdata/name_constraints_unittest/name-jp.pem",
-    "src/pki/testdata/name_constraints_unittest/name-us-arizona-1.1.1.1.pem",
-    "src/pki/testdata/name_constraints_unittest/name-us-arizona-192.168.1.1.pem",
-    "src/pki/testdata/name_constraints_unittest/name-us-arizona-email-invalidstring.pem",
-    "src/pki/testdata/name_constraints_unittest/name-us-arizona-email-localpartcase.pem",
-    "src/pki/testdata/name_constraints_unittest/name-us-arizona-email-multiple.pem",
-    "src/pki/testdata/name_constraints_unittest/name-us-arizona-email.pem",
-    "src/pki/testdata/name_constraints_unittest/name-us-arizona-foo.com.pem",
-    "src/pki/testdata/name_constraints_unittest/name-us-arizona-ipv6.pem",
-    "src/pki/testdata/name_constraints_unittest/name-us-arizona-permitted.example.com.pem",
-    "src/pki/testdata/name_constraints_unittest/name-us-arizona.pem",
-    "src/pki/testdata/name_constraints_unittest/name-us-california-192.168.1.1.pem",
-    "src/pki/testdata/name_constraints_unittest/name-us-california-mountain_view.pem",
-    "src/pki/testdata/name_constraints_unittest/name-us-california-permitted.example.com.pem",
-    "src/pki/testdata/name_constraints_unittest/name-us-california.pem",
-    "src/pki/testdata/name_constraints_unittest/name-us.pem",
-    "src/pki/testdata/name_constraints_unittest/othername-excluded.pem",
-    "src/pki/testdata/name_constraints_unittest/othername-permitted.pem",
-    "src/pki/testdata/name_constraints_unittest/registeredid-excluded.pem",
-    "src/pki/testdata/name_constraints_unittest/registeredid-permitted.pem",
-    "src/pki/testdata/name_constraints_unittest/rfc822name-excluded-empty.pem",
-    "src/pki/testdata/name_constraints_unittest/rfc822name-excluded-hostname.pem",
-    "src/pki/testdata/name_constraints_unittest/rfc822name-excluded-hostnamewithat.pem",
-    "src/pki/testdata/name_constraints_unittest/rfc822name-excluded-ipv4.pem",
-    "src/pki/testdata/name_constraints_unittest/rfc822name-excluded-quoted.pem",
-    "src/pki/testdata/name_constraints_unittest/rfc822name-excluded-subdomains.pem",
-    "src/pki/testdata/name_constraints_unittest/rfc822name-excluded.pem",
-    "src/pki/testdata/name_constraints_unittest/rfc822name-permitted-empty.pem",
-    "src/pki/testdata/name_constraints_unittest/rfc822name-permitted-hostname.pem",
-    "src/pki/testdata/name_constraints_unittest/rfc822name-permitted-hostnamewithat.pem",
-    "src/pki/testdata/name_constraints_unittest/rfc822name-permitted-ipv4.pem",
-    "src/pki/testdata/name_constraints_unittest/rfc822name-permitted-quoted.pem",
-    "src/pki/testdata/name_constraints_unittest/rfc822name-permitted-subdomains.pem",
-    "src/pki/testdata/name_constraints_unittest/rfc822name-permitted.pem",
-    "src/pki/testdata/name_constraints_unittest/san-directoryname.pem",
-    "src/pki/testdata/name_constraints_unittest/san-dnsname.pem",
-    "src/pki/testdata/name_constraints_unittest/san-edipartyname.pem",
-    "src/pki/testdata/name_constraints_unittest/san-excluded-directoryname.pem",
-    "src/pki/testdata/name_constraints_unittest/san-excluded-dnsname.pem",
-    "src/pki/testdata/name_constraints_unittest/san-excluded-ipaddress.pem",
-    "src/pki/testdata/name_constraints_unittest/san-invalid-empty.pem",
-    "src/pki/testdata/name_constraints_unittest/san-invalid-ipaddress.pem",
-    "src/pki/testdata/name_constraints_unittest/san-ipaddress4.pem",
-    "src/pki/testdata/name_constraints_unittest/san-ipaddress6.pem",
-    "src/pki/testdata/name_constraints_unittest/san-othername.pem",
-    "src/pki/testdata/name_constraints_unittest/san-permitted.pem",
-    "src/pki/testdata/name_constraints_unittest/san-registeredid.pem",
-    "src/pki/testdata/name_constraints_unittest/san-rfc822name-domaincase.pem",
-    "src/pki/testdata/name_constraints_unittest/san-rfc822name-empty-localpart.pem",
-    "src/pki/testdata/name_constraints_unittest/san-rfc822name-empty.pem",
-    "src/pki/testdata/name_constraints_unittest/san-rfc822name-ipv4.pem",
-    "src/pki/testdata/name_constraints_unittest/san-rfc822name-localpartcase.pem",
-    "src/pki/testdata/name_constraints_unittest/san-rfc822name-multiple.pem",
-    "src/pki/testdata/name_constraints_unittest/san-rfc822name-no-at.pem",
-    "src/pki/testdata/name_constraints_unittest/san-rfc822name-quoted.pem",
-    "src/pki/testdata/name_constraints_unittest/san-rfc822name-subdomain-no-at.pem",
-    "src/pki/testdata/name_constraints_unittest/san-rfc822name-subdomain-two-ats.pem",
-    "src/pki/testdata/name_constraints_unittest/san-rfc822name-subdomain.pem",
-    "src/pki/testdata/name_constraints_unittest/san-rfc822name-subdomaincase.pem",
-    "src/pki/testdata/name_constraints_unittest/san-rfc822name-two-ats.pem",
-    "src/pki/testdata/name_constraints_unittest/san-rfc822name.pem",
-    "src/pki/testdata/name_constraints_unittest/san-uri.pem",
-    "src/pki/testdata/name_constraints_unittest/san-x400address.pem",
-    "src/pki/testdata/name_constraints_unittest/uri-excluded.pem",
-    "src/pki/testdata/name_constraints_unittest/uri-permitted.pem",
-    "src/pki/testdata/name_constraints_unittest/x400address-excluded.pem",
-    "src/pki/testdata/name_constraints_unittest/x400address-permitted.pem",
-    "src/pki/testdata/nist-pkits/certs/AllCertificatesNoPoliciesTest2EE.crt",
-    "src/pki/testdata/nist-pkits/certs/AllCertificatesSamePoliciesTest10EE.crt",
-    "src/pki/testdata/nist-pkits/certs/AllCertificatesSamePoliciesTest13EE.crt",
-    "src/pki/testdata/nist-pkits/certs/AllCertificatesanyPolicyTest11EE.crt",
-    "src/pki/testdata/nist-pkits/certs/AnyPolicyTest14EE.crt",
-    "src/pki/testdata/nist-pkits/certs/BadCRLIssuerNameCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/BadCRLSignatureCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/BadSignedCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/BadnotAfterDateCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/BadnotBeforeDateCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/BasicSelfIssuedCRLSigningKeyCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/BasicSelfIssuedCRLSigningKeyCRLCert.crt",
-    "src/pki/testdata/nist-pkits/certs/BasicSelfIssuedNewKeyCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/BasicSelfIssuedNewKeyOldWithNewCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/BasicSelfIssuedOldKeyCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/BasicSelfIssuedOldKeyNewWithOldCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/CPSPointerQualifierTest20EE.crt",
-    "src/pki/testdata/nist-pkits/certs/DSACACert.crt",
-    "src/pki/testdata/nist-pkits/certs/DSAParametersInheritedCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/DifferentPoliciesTest12EE.crt",
-    "src/pki/testdata/nist-pkits/certs/DifferentPoliciesTest3EE.crt",
-    "src/pki/testdata/nist-pkits/certs/DifferentPoliciesTest4EE.crt",
-    "src/pki/testdata/nist-pkits/certs/DifferentPoliciesTest5EE.crt",
-    "src/pki/testdata/nist-pkits/certs/DifferentPoliciesTest7EE.crt",
-    "src/pki/testdata/nist-pkits/certs/DifferentPoliciesTest8EE.crt",
-    "src/pki/testdata/nist-pkits/certs/DifferentPoliciesTest9EE.crt",
-    "src/pki/testdata/nist-pkits/certs/GeneralizedTimeCRLnextUpdateCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/GoodCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/GoodsubCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/GoodsubCAPanyPolicyMapping1to2CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidBadCRLIssuerNameTest5EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidBadCRLSignatureTest4EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidBasicSelfIssuedCRLSigningKeyTest7EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidBasicSelfIssuedCRLSigningKeyTest8EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidBasicSelfIssuedNewWithOldTest5EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidBasicSelfIssuedOldWithNewTest2EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidCASignatureTest2EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidCAnotAfterDateTest5EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidCAnotBeforeDateTest1EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidDNSnameConstraintsTest31EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidDNSnameConstraintsTest33EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidDNSnameConstraintsTest38EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidDNandRFC822nameConstraintsTest28EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidDNandRFC822nameConstraintsTest29EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidDNnameConstraintsTest10EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidDNnameConstraintsTest12EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidDNnameConstraintsTest13EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidDNnameConstraintsTest15EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidDNnameConstraintsTest16EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidDNnameConstraintsTest17EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidDNnameConstraintsTest20EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidDNnameConstraintsTest2EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidDNnameConstraintsTest3EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidDNnameConstraintsTest7EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidDNnameConstraintsTest8EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidDNnameConstraintsTest9EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidDSASignatureTest6EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidEESignatureTest3EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidEEnotAfterDateTest6EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidEEnotBeforeDateTest2EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidIDPwithindirectCRLTest23EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidIDPwithindirectCRLTest26EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidLongSerialNumberTest18EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidMappingFromanyPolicyTest7EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidMappingToanyPolicyTest8EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidMissingCRLTest1EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidMissingbasicConstraintsTest1EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidNameChainingOrderTest2EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidNameChainingTest1EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidNegativeSerialNumberTest15EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidOldCRLnextUpdateTest11EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidPolicyMappingTest10EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidPolicyMappingTest2EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidPolicyMappingTest4EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidRFC822nameConstraintsTest22EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidRFC822nameConstraintsTest24EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidRFC822nameConstraintsTest26EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidRevokedCATest2EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidRevokedEETest3EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidSelfIssuedinhibitAnyPolicyTest10EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidSelfIssuedinhibitAnyPolicyTest8EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidSelfIssuedinhibitPolicyMappingTest10EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidSelfIssuedinhibitPolicyMappingTest11EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidSelfIssuedinhibitPolicyMappingTest8EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidSelfIssuedinhibitPolicyMappingTest9EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidSelfIssuedpathLenConstraintTest16EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidSelfIssuedrequireExplicitPolicyTest7EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidSelfIssuedrequireExplicitPolicyTest8EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidSeparateCertificateandCRLKeysTest20EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidSeparateCertificateandCRLKeysTest21EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidURInameConstraintsTest35EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidURInameConstraintsTest37EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidUnknownCRLEntryExtensionTest8EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidUnknownCRLExtensionTest10EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidUnknownCRLExtensionTest9EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidUnknownCriticalCertificateExtensionTest2EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidWrongCRLTest6EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidcAFalseTest2EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidcAFalseTest3EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidcRLIssuerTest27EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidcRLIssuerTest31EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidcRLIssuerTest32EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidcRLIssuerTest34EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidcRLIssuerTest35EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvaliddeltaCRLIndicatorNoBaseTest1EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvaliddeltaCRLTest10EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvaliddeltaCRLTest3EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvaliddeltaCRLTest4EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvaliddeltaCRLTest6EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvaliddeltaCRLTest9EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvaliddistributionPointTest2EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvaliddistributionPointTest3EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvaliddistributionPointTest6EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvaliddistributionPointTest8EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvaliddistributionPointTest9EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidinhibitAnyPolicyTest1EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidinhibitAnyPolicyTest4EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidinhibitAnyPolicyTest5EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidinhibitAnyPolicyTest6EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidinhibitPolicyMappingTest1EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidinhibitPolicyMappingTest3EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidinhibitPolicyMappingTest5EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidinhibitPolicyMappingTest6EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidkeyUsageCriticalcRLSignFalseTest4EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidkeyUsageCriticalkeyCertSignFalseTest1EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidkeyUsageNotCriticalcRLSignFalseTest5EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidkeyUsageNotCriticalkeyCertSignFalseTest2EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidonlyContainsAttributeCertsTest14EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidonlyContainsCACertsTest12EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidonlyContainsUserCertsTest11EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidonlySomeReasonsTest15EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidonlySomeReasonsTest16EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidonlySomeReasonsTest17EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidonlySomeReasonsTest20EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidonlySomeReasonsTest21EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidpathLenConstraintTest10EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidpathLenConstraintTest11EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidpathLenConstraintTest12EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidpathLenConstraintTest5EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidpathLenConstraintTest6EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidpathLenConstraintTest9EE.crt",
-    "src/pki/testdata/nist-pkits/certs/Invalidpre2000CRLnextUpdateTest12EE.crt",
-    "src/pki/testdata/nist-pkits/certs/Invalidpre2000UTCEEnotAfterDateTest7EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidrequireExplicitPolicyTest3EE.crt",
-    "src/pki/testdata/nist-pkits/certs/InvalidrequireExplicitPolicyTest5EE.crt",
-    "src/pki/testdata/nist-pkits/certs/LongSerialNumberCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/Mapping1to2CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/MappingFromanyPolicyCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/MappingToanyPolicyCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/MissingbasicConstraintsCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/NameOrderingCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/NegativeSerialNumberCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/NoCRLCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/NoPoliciesCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/NoissuingDistributionPointCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/OldCRLnextUpdateCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/OverlappingPoliciesTest6EE.crt",
-    "src/pki/testdata/nist-pkits/certs/P12Mapping1to3CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/P12Mapping1to3subCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/P12Mapping1to3subsubCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/P1Mapping1to234CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/P1Mapping1to234subCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/P1anyPolicyMapping1to2CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/PanyPolicyMapping1to2CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/PoliciesP1234CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/PoliciesP1234subCAP123Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/PoliciesP1234subsubCAP123P12Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/PoliciesP123CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/PoliciesP123subCAP12Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/PoliciesP123subsubCAP12P1Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/PoliciesP123subsubCAP12P2Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/PoliciesP123subsubsubCAP12P2P1Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/PoliciesP12CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/PoliciesP12subCAP1Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/PoliciesP12subsubCAP1P2Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/PoliciesP2subCA2Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/PoliciesP2subCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/PoliciesP3CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/RFC3280MandatoryAttributeTypesCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/RFC3280OptionalAttributeTypesCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/RevokedsubCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/RolloverfromPrintableStringtoUTF8StringCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/SeparateCertificateandCRLKeysCA2CRLSigningCert.crt",
-    "src/pki/testdata/nist-pkits/certs/SeparateCertificateandCRLKeysCA2CertificateSigningCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/SeparateCertificateandCRLKeysCRLSigningCert.crt",
-    "src/pki/testdata/nist-pkits/certs/SeparateCertificateandCRLKeysCertificateSigningCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/TrustAnchorRootCertificate.crt",
-    "src/pki/testdata/nist-pkits/certs/TwoCRLsCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/UIDCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/UTF8StringCaseInsensitiveMatchCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/UTF8StringEncodedNamesCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/UnknownCRLEntryExtensionCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/UnknownCRLExtensionCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/UserNoticeQualifierTest15EE.crt",
-    "src/pki/testdata/nist-pkits/certs/UserNoticeQualifierTest16EE.crt",
-    "src/pki/testdata/nist-pkits/certs/UserNoticeQualifierTest17EE.crt",
-    "src/pki/testdata/nist-pkits/certs/UserNoticeQualifierTest18EE.crt",
-    "src/pki/testdata/nist-pkits/certs/UserNoticeQualifierTest19EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidBasicSelfIssuedCRLSigningKeyTest6EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidBasicSelfIssuedNewWithOldTest3EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidBasicSelfIssuedNewWithOldTest4EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidBasicSelfIssuedOldWithNewTest1EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidCertificatePathTest1EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidDNSnameConstraintsTest30EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidDNSnameConstraintsTest32EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidDNandRFC822nameConstraintsTest27EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidDNnameConstraintsTest11EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidDNnameConstraintsTest14EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidDNnameConstraintsTest18EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidDNnameConstraintsTest19EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidDNnameConstraintsTest1EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidDNnameConstraintsTest4EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidDNnameConstraintsTest5EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidDNnameConstraintsTest6EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidDSAParameterInheritanceTest5EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidDSASignaturesTest4EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidGeneralizedTimeCRLnextUpdateTest13EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidGeneralizedTimenotAfterDateTest8EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidGeneralizedTimenotBeforeDateTest4EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidIDPwithindirectCRLTest22EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidIDPwithindirectCRLTest24EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidIDPwithindirectCRLTest25EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidLongSerialNumberTest16EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidLongSerialNumberTest17EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidNameChainingCapitalizationTest5EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidNameChainingWhitespaceTest3EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidNameChainingWhitespaceTest4EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidNameUIDsTest6EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidNegativeSerialNumberTest14EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidNoissuingDistributionPointTest10EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidPolicyMappingTest11EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidPolicyMappingTest12EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidPolicyMappingTest13EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidPolicyMappingTest14EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidPolicyMappingTest1EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidPolicyMappingTest3EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidPolicyMappingTest5EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidPolicyMappingTest6EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidPolicyMappingTest9EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidRFC3280MandatoryAttributeTypesTest7EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidRFC3280OptionalAttributeTypesTest8EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidRFC822nameConstraintsTest21EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidRFC822nameConstraintsTest23EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidRFC822nameConstraintsTest25EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidRolloverfromPrintableStringtoUTF8StringTest10EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidSelfIssuedinhibitAnyPolicyTest7EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidSelfIssuedinhibitAnyPolicyTest9EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidSelfIssuedinhibitPolicyMappingTest7EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidSelfIssuedpathLenConstraintTest15EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidSelfIssuedpathLenConstraintTest17EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidSelfIssuedrequireExplicitPolicyTest6EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidSeparateCertificateandCRLKeysTest19EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidTwoCRLsTest7EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidURInameConstraintsTest34EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidURInameConstraintsTest36EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidUTF8StringCaseInsensitiveMatchTest11EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidUTF8StringEncodedNamesTest9EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidUnknownNotCriticalCertificateExtensionTest1EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidbasicConstraintsNotCriticalTest4EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidcRLIssuerTest28EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidcRLIssuerTest29EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidcRLIssuerTest30EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidcRLIssuerTest33EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValiddeltaCRLTest2EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValiddeltaCRLTest5EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValiddeltaCRLTest7EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValiddeltaCRLTest8EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValiddistributionPointTest1EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValiddistributionPointTest4EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValiddistributionPointTest5EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValiddistributionPointTest7EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidinhibitAnyPolicyTest2EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidinhibitPolicyMappingTest2EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidinhibitPolicyMappingTest4EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidkeyUsageNotCriticalTest3EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidonlyContainsCACertsTest13EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidonlySomeReasonsTest18EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidonlySomeReasonsTest19EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidpathLenConstraintTest13EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidpathLenConstraintTest14EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidpathLenConstraintTest7EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidpathLenConstraintTest8EE.crt",
-    "src/pki/testdata/nist-pkits/certs/Validpre2000UTCnotBeforeDateTest3EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidrequireExplicitPolicyTest1EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidrequireExplicitPolicyTest2EE.crt",
-    "src/pki/testdata/nist-pkits/certs/ValidrequireExplicitPolicyTest4EE.crt",
-    "src/pki/testdata/nist-pkits/certs/WrongCRLCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/anyPolicyCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/basicConstraintsCriticalcAFalseCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/basicConstraintsNotCriticalCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/basicConstraintsNotCriticalcAFalseCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/deltaCRLCA1Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/deltaCRLCA2Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/deltaCRLCA3Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/deltaCRLIndicatorNoBaseCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/distributionPoint1CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/distributionPoint2CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/indirectCRLCA1Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/indirectCRLCA2Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/indirectCRLCA3Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/indirectCRLCA3cRLIssuerCert.crt",
-    "src/pki/testdata/nist-pkits/certs/indirectCRLCA4Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/indirectCRLCA4cRLIssuerCert.crt",
-    "src/pki/testdata/nist-pkits/certs/indirectCRLCA5Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/indirectCRLCA6Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/inhibitAnyPolicy0CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/inhibitAnyPolicy1CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/inhibitAnyPolicy1SelfIssuedCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/inhibitAnyPolicy1SelfIssuedsubCA2Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/inhibitAnyPolicy1subCA1Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/inhibitAnyPolicy1subCA2Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/inhibitAnyPolicy1subCAIAP5Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/inhibitAnyPolicy1subsubCA2Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/inhibitAnyPolicy5CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/inhibitAnyPolicy5subCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/inhibitAnyPolicy5subsubCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/inhibitAnyPolicyTest3EE.crt",
-    "src/pki/testdata/nist-pkits/certs/inhibitPolicyMapping0CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/inhibitPolicyMapping0subCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/inhibitPolicyMapping1P12CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/inhibitPolicyMapping1P12subCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/inhibitPolicyMapping1P12subCAIPM5Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/inhibitPolicyMapping1P12subsubCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/inhibitPolicyMapping1P12subsubCAIPM5Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/inhibitPolicyMapping1P1CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/inhibitPolicyMapping1P1SelfIssuedCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/inhibitPolicyMapping1P1SelfIssuedsubCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/inhibitPolicyMapping1P1subCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/inhibitPolicyMapping1P1subsubCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/inhibitPolicyMapping5CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/inhibitPolicyMapping5subCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/inhibitPolicyMapping5subsubCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/inhibitPolicyMapping5subsubsubCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/keyUsageCriticalcRLSignFalseCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/keyUsageCriticalkeyCertSignFalseCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/keyUsageNotCriticalCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/keyUsageNotCriticalcRLSignFalseCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/keyUsageNotCriticalkeyCertSignFalseCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/nameConstraintsDN1CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/nameConstraintsDN1SelfIssuedCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/nameConstraintsDN1subCA1Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/nameConstraintsDN1subCA2Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/nameConstraintsDN1subCA3Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/nameConstraintsDN2CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/nameConstraintsDN3CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/nameConstraintsDN3subCA1Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/nameConstraintsDN3subCA2Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/nameConstraintsDN4CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/nameConstraintsDN5CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/nameConstraintsDNS1CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/nameConstraintsDNS2CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/nameConstraintsRFC822CA1Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/nameConstraintsRFC822CA2Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/nameConstraintsRFC822CA3Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/nameConstraintsURI1CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/nameConstraintsURI2CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/onlyContainsAttributeCertsCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/onlyContainsCACertsCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/onlyContainsUserCertsCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/onlySomeReasonsCA1Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/onlySomeReasonsCA2Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/onlySomeReasonsCA3Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/onlySomeReasonsCA4Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/pathLenConstraint0CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/pathLenConstraint0SelfIssuedCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/pathLenConstraint0subCA2Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/pathLenConstraint0subCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/pathLenConstraint1CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/pathLenConstraint1SelfIssuedCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/pathLenConstraint1SelfIssuedsubCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/pathLenConstraint1subCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/pathLenConstraint6CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/pathLenConstraint6subCA0Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/pathLenConstraint6subCA1Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/pathLenConstraint6subCA4Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/pathLenConstraint6subsubCA00Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/pathLenConstraint6subsubCA11Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/pathLenConstraint6subsubCA41Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/pathLenConstraint6subsubsubCA11XCert.crt",
-    "src/pki/testdata/nist-pkits/certs/pathLenConstraint6subsubsubCA41XCert.crt",
-    "src/pki/testdata/nist-pkits/certs/pre2000CRLnextUpdateCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy0CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy0subCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy0subsubCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy0subsubsubCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy10CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy10subCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy10subsubCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy10subsubsubCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy2CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy2SelfIssuedCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy2SelfIssuedsubCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy2subCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy4CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy4subCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy4subsubCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy4subsubsubCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy5CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy5subCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy5subsubCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy5subsubsubCACert.crt",
-    "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy7CACert.crt",
-    "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy7subCARE2Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy7subsubCARE2RE4Cert.crt",
-    "src/pki/testdata/nist-pkits/certs/requireExplicitPolicy7subsubsubCARE2RE4Cert.crt",
-    "src/pki/testdata/nist-pkits/crls/BadCRLIssuerNameCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/BadCRLSignatureCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/BadSignedCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/BadnotAfterDateCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/BadnotBeforeDateCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/BasicSelfIssuedCRLSigningKeyCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/BasicSelfIssuedCRLSigningKeyCRLCertCRL.crl",
-    "src/pki/testdata/nist-pkits/crls/BasicSelfIssuedNewKeyCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/BasicSelfIssuedOldKeyCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/BasicSelfIssuedOldKeySelfIssuedCertCRL.crl",
-    "src/pki/testdata/nist-pkits/crls/DSACACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/DSAParametersInheritedCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/GeneralizedTimeCRLnextUpdateCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/GoodCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/GoodsubCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/GoodsubCAPanyPolicyMapping1to2CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/LongSerialNumberCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/Mapping1to2CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/MappingFromanyPolicyCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/MappingToanyPolicyCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/MissingbasicConstraintsCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/NameOrderCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/NegativeSerialNumberCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/NoPoliciesCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/NoissuingDistributionPointCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/OldCRLnextUpdateCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/P12Mapping1to3CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/P12Mapping1to3subCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/P12Mapping1to3subsubCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/P1Mapping1to234CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/P1Mapping1to234subCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/P1anyPolicyMapping1to2CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/PanyPolicyMapping1to2CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/PoliciesP1234CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/PoliciesP1234subCAP123CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/PoliciesP1234subsubCAP123P12CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/PoliciesP123CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/PoliciesP123subCAP12CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/PoliciesP123subsubCAP12P1CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/PoliciesP123subsubCAP2P2CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/PoliciesP123subsubsubCAP12P2P1CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/PoliciesP12CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/PoliciesP12subCAP1CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/PoliciesP12subsubCAP1P2CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/PoliciesP2subCA2CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/PoliciesP2subCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/PoliciesP3CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/RFC3280MandatoryAttributeTypesCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/RFC3280OptionalAttributeTypesCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/RevokedsubCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/RolloverfromPrintableStringtoUTF8StringCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/SeparateCertificateandCRLKeysCA2CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/SeparateCertificateandCRLKeysCRL.crl",
-    "src/pki/testdata/nist-pkits/crls/TrustAnchorRootCRL.crl",
-    "src/pki/testdata/nist-pkits/crls/TwoCRLsCABadCRL.crl",
-    "src/pki/testdata/nist-pkits/crls/TwoCRLsCAGoodCRL.crl",
-    "src/pki/testdata/nist-pkits/crls/UIDCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/UTF8StringCaseInsensitiveMatchCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/UTF8StringEncodedNamesCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/UnknownCRLEntryExtensionCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/UnknownCRLExtensionCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/WrongCRLCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/anyPolicyCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/basicConstraintsCriticalcAFalseCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/basicConstraintsNotCriticalCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/basicConstraintsNotCriticalcAFalseCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/deltaCRLCA1CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/deltaCRLCA1deltaCRL.crl",
-    "src/pki/testdata/nist-pkits/crls/deltaCRLCA2CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/deltaCRLCA2deltaCRL.crl",
-    "src/pki/testdata/nist-pkits/crls/deltaCRLCA3CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/deltaCRLCA3deltaCRL.crl",
-    "src/pki/testdata/nist-pkits/crls/deltaCRLIndicatorNoBaseCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/distributionPoint1CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/distributionPoint2CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/indirectCRLCA1CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/indirectCRLCA3CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/indirectCRLCA3cRLIssuerCRL.crl",
-    "src/pki/testdata/nist-pkits/crls/indirectCRLCA4cRLIssuerCRL.crl",
-    "src/pki/testdata/nist-pkits/crls/indirectCRLCA5CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/inhibitAnyPolicy0CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/inhibitAnyPolicy1CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/inhibitAnyPolicy1subCA1CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/inhibitAnyPolicy1subCA2CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/inhibitAnyPolicy1subCAIAP5CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/inhibitAnyPolicy1subsubCA2CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/inhibitAnyPolicy5CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/inhibitAnyPolicy5subCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/inhibitAnyPolicy5subsubCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/inhibitPolicyMapping0CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/inhibitPolicyMapping0subCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/inhibitPolicyMapping1P12CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/inhibitPolicyMapping1P12subCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/inhibitPolicyMapping1P12subCAIPM5CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/inhibitPolicyMapping1P12subsubCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/inhibitPolicyMapping1P12subsubCAIPM5CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/inhibitPolicyMapping1P1CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/inhibitPolicyMapping1P1subCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/inhibitPolicyMapping1P1subsubCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/inhibitPolicyMapping5CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/inhibitPolicyMapping5subCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/inhibitPolicyMapping5subsubCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/inhibitPolicyMapping5subsubsubCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/keyUsageCriticalcRLSignFalseCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/keyUsageCriticalkeyCertSignFalseCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/keyUsageNotCriticalCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/keyUsageNotCriticalcRLSignFalseCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/keyUsageNotCriticalkeyCertSignFalseCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/nameConstraintsDN1CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/nameConstraintsDN1subCA1CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/nameConstraintsDN1subCA2CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/nameConstraintsDN1subCA3CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/nameConstraintsDN2CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/nameConstraintsDN3CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/nameConstraintsDN3subCA1CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/nameConstraintsDN3subCA2CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/nameConstraintsDN4CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/nameConstraintsDN5CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/nameConstraintsDNS1CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/nameConstraintsDNS2CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/nameConstraintsRFC822CA1CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/nameConstraintsRFC822CA2CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/nameConstraintsRFC822CA3CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/nameConstraintsURI1CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/nameConstraintsURI2CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/onlyContainsAttributeCertsCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/onlyContainsCACertsCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/onlyContainsUserCertsCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/onlySomeReasonsCA1compromiseCRL.crl",
-    "src/pki/testdata/nist-pkits/crls/onlySomeReasonsCA1otherreasonsCRL.crl",
-    "src/pki/testdata/nist-pkits/crls/onlySomeReasonsCA2CRL1.crl",
-    "src/pki/testdata/nist-pkits/crls/onlySomeReasonsCA2CRL2.crl",
-    "src/pki/testdata/nist-pkits/crls/onlySomeReasonsCA3compromiseCRL.crl",
-    "src/pki/testdata/nist-pkits/crls/onlySomeReasonsCA3otherreasonsCRL.crl",
-    "src/pki/testdata/nist-pkits/crls/onlySomeReasonsCA4compromiseCRL.crl",
-    "src/pki/testdata/nist-pkits/crls/onlySomeReasonsCA4otherreasonsCRL.crl",
-    "src/pki/testdata/nist-pkits/crls/pathLenConstraint0CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/pathLenConstraint0subCA2CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/pathLenConstraint0subCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/pathLenConstraint1CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/pathLenConstraint1subCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/pathLenConstraint6CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/pathLenConstraint6subCA0CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/pathLenConstraint6subCA1CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/pathLenConstraint6subCA4CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/pathLenConstraint6subsubCA00CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/pathLenConstraint6subsubCA11CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/pathLenConstraint6subsubCA41CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/pathLenConstraint6subsubsubCA11XCRL.crl",
-    "src/pki/testdata/nist-pkits/crls/pathLenConstraint6subsubsubCA41XCRL.crl",
-    "src/pki/testdata/nist-pkits/crls/pre2000CRLnextUpdateCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy0CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy0subCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy0subsubCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy0subsubsubCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy10CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy10subCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy10subsubCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy10subsubsubCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy2CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy2subCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy4CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy4subCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy4subsubCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy4subsubsubCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy5CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy5subCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy5subsubCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy5subsubsubCACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy7CACRL.crl",
-    "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy7subCARE2CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy7subsubCARE2RE4CRL.crl",
-    "src/pki/testdata/nist-pkits/crls/requireExplicitPolicy7subsubsubCARE2RE4CRL.crl",
-    "src/pki/testdata/ocsp_unittest/bad_ocsp_type.pem",
-    "src/pki/testdata/ocsp_unittest/bad_signature.pem",
-    "src/pki/testdata/ocsp_unittest/bad_status.pem",
-    "src/pki/testdata/ocsp_unittest/good_response.pem",
-    "src/pki/testdata/ocsp_unittest/good_response_next_update.pem",
-    "src/pki/testdata/ocsp_unittest/good_response_sha256.pem",
-    "src/pki/testdata/ocsp_unittest/has_critical_ct_extension.pem",
-    "src/pki/testdata/ocsp_unittest/has_critical_response_extension.pem",
-    "src/pki/testdata/ocsp_unittest/has_critical_single_extension.pem",
-    "src/pki/testdata/ocsp_unittest/has_extension.pem",
-    "src/pki/testdata/ocsp_unittest/has_single_extension.pem",
-    "src/pki/testdata/ocsp_unittest/has_version.pem",
-    "src/pki/testdata/ocsp_unittest/malformed_request.pem",
-    "src/pki/testdata/ocsp_unittest/missing_response.pem",
-    "src/pki/testdata/ocsp_unittest/multiple_response.pem",
-    "src/pki/testdata/ocsp_unittest/no_response.pem",
-    "src/pki/testdata/ocsp_unittest/ocsp_extra_certs.pem",
-    "src/pki/testdata/ocsp_unittest/ocsp_sign_bad_indirect.pem",
-    "src/pki/testdata/ocsp_unittest/ocsp_sign_direct.pem",
-    "src/pki/testdata/ocsp_unittest/ocsp_sign_indirect.pem",
-    "src/pki/testdata/ocsp_unittest/ocsp_sign_indirect_missing.pem",
-    "src/pki/testdata/ocsp_unittest/other_response.pem",
-    "src/pki/testdata/ocsp_unittest/responder_id.pem",
-    "src/pki/testdata/ocsp_unittest/responder_name.pem",
-    "src/pki/testdata/ocsp_unittest/revoke_response.pem",
-    "src/pki/testdata/ocsp_unittest/revoke_response_reason.pem",
-    "src/pki/testdata/ocsp_unittest/unknown_response.pem",
-    "src/pki/testdata/parse_certificate_unittest/authority_key_identifier/empty_sequence.pem",
-    "src/pki/testdata/parse_certificate_unittest/authority_key_identifier/extra_contents_after_extension_sequence.pem",
-    "src/pki/testdata/parse_certificate_unittest/authority_key_identifier/extra_contents_after_issuer_and_serial.pem",
-    "src/pki/testdata/parse_certificate_unittest/authority_key_identifier/invalid_contents.pem",
-    "src/pki/testdata/parse_certificate_unittest/authority_key_identifier/invalid_issuer.pem",
-    "src/pki/testdata/parse_certificate_unittest/authority_key_identifier/invalid_key_identifier.pem",
-    "src/pki/testdata/parse_certificate_unittest/authority_key_identifier/invalid_serial.pem",
-    "src/pki/testdata/parse_certificate_unittest/authority_key_identifier/issuer_and_serial.pem",
-    "src/pki/testdata/parse_certificate_unittest/authority_key_identifier/issuer_only.pem",
-    "src/pki/testdata/parse_certificate_unittest/authority_key_identifier/key_identifier.pem",
-    "src/pki/testdata/parse_certificate_unittest/authority_key_identifier/key_identifier_and_issuer_and_serial.pem",
-    "src/pki/testdata/parse_certificate_unittest/authority_key_identifier/serial_only.pem",
-    "src/pki/testdata/parse_certificate_unittest/authority_key_identifier/url_issuer_and_serial.pem",
-    "src/pki/testdata/parse_certificate_unittest/authority_key_identifier_not_sequence.pem",
-    "src/pki/testdata/parse_certificate_unittest/bad_key_usage.pem",
-    "src/pki/testdata/parse_certificate_unittest/bad_policy_qualifiers.pem",
-    "src/pki/testdata/parse_certificate_unittest/bad_signature_algorithm_oid.pem",
-    "src/pki/testdata/parse_certificate_unittest/bad_validity.pem",
-    "src/pki/testdata/parse_certificate_unittest/basic_constraints_ca_false.pem",
-    "src/pki/testdata/parse_certificate_unittest/basic_constraints_ca_no_path.pem",
-    "src/pki/testdata/parse_certificate_unittest/basic_constraints_ca_path_9.pem",
-    "src/pki/testdata/parse_certificate_unittest/basic_constraints_negative_path.pem",
-    "src/pki/testdata/parse_certificate_unittest/basic_constraints_not_ca.pem",
-    "src/pki/testdata/parse_certificate_unittest/basic_constraints_path_too_large.pem",
-    "src/pki/testdata/parse_certificate_unittest/basic_constraints_pathlen_255.pem",
-    "src/pki/testdata/parse_certificate_unittest/basic_constraints_pathlen_256.pem",
-    "src/pki/testdata/parse_certificate_unittest/basic_constraints_pathlen_not_ca.pem",
-    "src/pki/testdata/parse_certificate_unittest/basic_constraints_unconsumed_data.pem",
-    "src/pki/testdata/parse_certificate_unittest/cert_algorithm_not_sequence.pem",
-    "src/pki/testdata/parse_certificate_unittest/cert_data_after_signature.pem",
-    "src/pki/testdata/parse_certificate_unittest/cert_empty_sequence.pem",
-    "src/pki/testdata/parse_certificate_unittest/cert_missing_signature.pem",
-    "src/pki/testdata/parse_certificate_unittest/cert_not_sequence.pem",
-    "src/pki/testdata/parse_certificate_unittest/cert_signature_not_bit_string.pem",
-    "src/pki/testdata/parse_certificate_unittest/cert_skeleton.pem",
-    "src/pki/testdata/parse_certificate_unittest/cert_version3.pem",
-    "src/pki/testdata/parse_certificate_unittest/crldp_1uri_noissuer.pem",
-    "src/pki/testdata/parse_certificate_unittest/crldp_3uri_noissuer.pem",
-    "src/pki/testdata/parse_certificate_unittest/crldp_full_name_as_dirname.pem",
-    "src/pki/testdata/parse_certificate_unittest/crldp_issuer_as_dirname.pem",
-    "src/pki/testdata/parse_certificate_unittest/extended_key_usage.pem",
-    "src/pki/testdata/parse_certificate_unittest/extension_critical.pem",
-    "src/pki/testdata/parse_certificate_unittest/extension_critical_0.pem",
-    "src/pki/testdata/parse_certificate_unittest/extension_critical_3.pem",
-    "src/pki/testdata/parse_certificate_unittest/extension_not_critical.pem",
-    "src/pki/testdata/parse_certificate_unittest/extensions_data_after_sequence.pem",
-    "src/pki/testdata/parse_certificate_unittest/extensions_duplicate_key_usage.pem",
-    "src/pki/testdata/parse_certificate_unittest/extensions_empty_sequence.pem",
-    "src/pki/testdata/parse_certificate_unittest/extensions_not_sequence.pem",
-    "src/pki/testdata/parse_certificate_unittest/extensions_real.pem",
-    "src/pki/testdata/parse_certificate_unittest/failed_signature_algorithm.pem",
-    "src/pki/testdata/parse_certificate_unittest/inhibit_any_policy.pem",
-    "src/pki/testdata/parse_certificate_unittest/issuer_bad_printable_string.pem",
-    "src/pki/testdata/parse_certificate_unittest/key_usage.pem",
-    "src/pki/testdata/parse_certificate_unittest/name_constraints_bad_ip.pem",
-    "src/pki/testdata/parse_certificate_unittest/policies.pem",
-    "src/pki/testdata/parse_certificate_unittest/policy_constraints_empty.pem",
-    "src/pki/testdata/parse_certificate_unittest/policy_constraints_inhibit.pem",
-    "src/pki/testdata/parse_certificate_unittest/policy_constraints_inhibit_require.pem",
-    "src/pki/testdata/parse_certificate_unittest/policy_constraints_require.pem",
-    "src/pki/testdata/parse_certificate_unittest/policy_qualifiers_empty_sequence.pem",
-    "src/pki/testdata/parse_certificate_unittest/serial_37_bytes.pem",
-    "src/pki/testdata/parse_certificate_unittest/serial_negative.pem",
-    "src/pki/testdata/parse_certificate_unittest/serial_not_minimal.pem",
-    "src/pki/testdata/parse_certificate_unittest/serial_not_number.pem",
-    "src/pki/testdata/parse_certificate_unittest/serial_zero.pem",
-    "src/pki/testdata/parse_certificate_unittest/serial_zero_padded.pem",
-    "src/pki/testdata/parse_certificate_unittest/serial_zero_padded_21_bytes.pem",
-    "src/pki/testdata/parse_certificate_unittest/signature_algorithm_null.pem",
-    "src/pki/testdata/parse_certificate_unittest/subject_alt_name.pem",
-    "src/pki/testdata/parse_certificate_unittest/subject_blank_subjectaltname_not_critical.pem",
-    "src/pki/testdata/parse_certificate_unittest/subject_key_identifier_not_octet_string.pem",
-    "src/pki/testdata/parse_certificate_unittest/subject_not_ascii.pem",
-    "src/pki/testdata/parse_certificate_unittest/subject_not_printable_string.pem",
-    "src/pki/testdata/parse_certificate_unittest/subject_printable_string_containing_utf8_client_cert.pem",
-    "src/pki/testdata/parse_certificate_unittest/subject_t61string.pem",
-    "src/pki/testdata/parse_certificate_unittest/subject_t61string_1-32.pem",
-    "src/pki/testdata/parse_certificate_unittest/subject_t61string_126-160.pem",
-    "src/pki/testdata/parse_certificate_unittest/subject_t61string_actual.pem",
-    "src/pki/testdata/parse_certificate_unittest/subjectaltname_bad_ip.pem",
-    "src/pki/testdata/parse_certificate_unittest/subjectaltname_dns_not_ascii.pem",
-    "src/pki/testdata/parse_certificate_unittest/subjectaltname_general_names_empty_sequence.pem",
-    "src/pki/testdata/parse_certificate_unittest/subjectaltname_trailing_data.pem",
-    "src/pki/testdata/parse_certificate_unittest/tbs_explicit_v1.pem",
-    "src/pki/testdata/parse_certificate_unittest/tbs_v1.pem",
-    "src/pki/testdata/parse_certificate_unittest/tbs_v1_extensions.pem",
-    "src/pki/testdata/parse_certificate_unittest/tbs_v2_extensions.pem",
-    "src/pki/testdata/parse_certificate_unittest/tbs_v2_issuer_and_subject_unique_id.pem",
-    "src/pki/testdata/parse_certificate_unittest/tbs_v2_issuer_unique_id.pem",
-    "src/pki/testdata/parse_certificate_unittest/tbs_v2_no_optionals.pem",
-    "src/pki/testdata/parse_certificate_unittest/tbs_v3_all_optionals.pem",
-    "src/pki/testdata/parse_certificate_unittest/tbs_v3_data_after_extensions.pem",
-    "src/pki/testdata/parse_certificate_unittest/tbs_v3_extensions.pem",
-    "src/pki/testdata/parse_certificate_unittest/tbs_v3_extensions_not_sequence.pem",
-    "src/pki/testdata/parse_certificate_unittest/tbs_v3_no_optionals.pem",
-    "src/pki/testdata/parse_certificate_unittest/tbs_v3_real.pem",
-    "src/pki/testdata/parse_certificate_unittest/tbs_v4.pem",
-    "src/pki/testdata/parse_certificate_unittest/tbs_validity_both_generalized_time.pem",
-    "src/pki/testdata/parse_certificate_unittest/tbs_validity_both_utc_time.pem",
-    "src/pki/testdata/parse_certificate_unittest/tbs_validity_generalized_time_and_utc_time.pem",
-    "src/pki/testdata/parse_certificate_unittest/tbs_validity_relaxed.pem",
-    "src/pki/testdata/parse_certificate_unittest/tbs_validity_utc_time_and_generalized_time.pem",
-    "src/pki/testdata/parse_certificate_unittest/v1_explicit_version.pem",
-    "src/pki/testdata/path_builder_unittest/key_id_name_and_serial_prioritization/int_match_name_only.pem",
-    "src/pki/testdata/path_builder_unittest/key_id_name_and_serial_prioritization/int_matching.pem",
-    "src/pki/testdata/path_builder_unittest/key_id_name_and_serial_prioritization/int_mismatch.pem",
-    "src/pki/testdata/path_builder_unittest/key_id_name_and_serial_prioritization/root.pem",
-    "src/pki/testdata/path_builder_unittest/key_id_name_and_serial_prioritization/root2.pem",
-    "src/pki/testdata/path_builder_unittest/key_id_name_and_serial_prioritization/target.pem",
-    "src/pki/testdata/path_builder_unittest/key_id_prioritization/int_different_ski_a.pem",
-    "src/pki/testdata/path_builder_unittest/key_id_prioritization/int_different_ski_b.pem",
-    "src/pki/testdata/path_builder_unittest/key_id_prioritization/int_different_ski_c.pem",
-    "src/pki/testdata/path_builder_unittest/key_id_prioritization/int_matching_ski_a.pem",
-    "src/pki/testdata/path_builder_unittest/key_id_prioritization/int_matching_ski_b.pem",
-    "src/pki/testdata/path_builder_unittest/key_id_prioritization/int_matching_ski_c.pem",
-    "src/pki/testdata/path_builder_unittest/key_id_prioritization/int_no_ski_a.pem",
-    "src/pki/testdata/path_builder_unittest/key_id_prioritization/int_no_ski_b.pem",
-    "src/pki/testdata/path_builder_unittest/key_id_prioritization/int_no_ski_c.pem",
-    "src/pki/testdata/path_builder_unittest/key_id_prioritization/root.pem",
-    "src/pki/testdata/path_builder_unittest/key_id_prioritization/target.pem",
-    "src/pki/testdata/path_builder_unittest/multi-root-A-by-B.pem",
-    "src/pki/testdata/path_builder_unittest/multi-root-B-by-C.pem",
-    "src/pki/testdata/path_builder_unittest/multi-root-B-by-F.pem",
-    "src/pki/testdata/path_builder_unittest/multi-root-C-by-D.pem",
-    "src/pki/testdata/path_builder_unittest/multi-root-C-by-E.pem",
-    "src/pki/testdata/path_builder_unittest/multi-root-D-by-D.pem",
-    "src/pki/testdata/path_builder_unittest/multi-root-E-by-E.pem",
-    "src/pki/testdata/path_builder_unittest/multi-root-F-by-E.pem",
-    "src/pki/testdata/path_builder_unittest/precertificate/precertificate.pem",
-    "src/pki/testdata/path_builder_unittest/precertificate/root.pem",
-    "src/pki/testdata/path_builder_unittest/self_issued_prioritization/root1.pem",
-    "src/pki/testdata/path_builder_unittest/self_issued_prioritization/root1_cross.pem",
-    "src/pki/testdata/path_builder_unittest/self_issued_prioritization/root2.pem",
-    "src/pki/testdata/path_builder_unittest/self_issued_prioritization/target.pem",
-    "src/pki/testdata/path_builder_unittest/validity_date_prioritization/int_ac.pem",
-    "src/pki/testdata/path_builder_unittest/validity_date_prioritization/int_ad.pem",
-    "src/pki/testdata/path_builder_unittest/validity_date_prioritization/int_bc.pem",
-    "src/pki/testdata/path_builder_unittest/validity_date_prioritization/int_bd.pem",
-    "src/pki/testdata/path_builder_unittest/validity_date_prioritization/root.pem",
-    "src/pki/testdata/path_builder_unittest/validity_date_prioritization/target.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/basic-constraints-pathlen-0-self-issued/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/basic-constraints-pathlen-0-self-issued/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/expired-intermediate/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/expired-intermediate/not-after.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/expired-intermediate/not-before.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/expired-root/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/expired-root/not-after-ta-with-constraints.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/expired-root/not-after-ta-with-expiration-and-constraints.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/expired-root/not-after-ta-with-expiration.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/expired-root/not-after.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/expired-root/not-before-ta-with-expiration.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/expired-root/not-before.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/expired-target/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/expired-target/not-after.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/expired-target/not-before.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/incorrect-trust-anchor/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/incorrect-trust-anchor/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-and-target-wrong-signature/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-and-target-wrong-signature/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-basic-constraints-ca-false/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-basic-constraints-ca-false/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-basic-constraints-not-critical/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-basic-constraints-not-critical/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-any-and-clientauth/any.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-any-and-clientauth/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-any-and-clientauth/clientauth-strict-leaf.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-any-and-clientauth/clientauth-strict.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-any-and-clientauth/clientauth.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-any-and-clientauth/serverauth-strict-leaf.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-any-and-clientauth/serverauth-strict.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-any-and-clientauth/serverauth.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-c2pamanifest/any.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-c2pamanifest/c2pamanifest.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-c2pamanifest/c2patimestamp.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-c2pamanifest/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-c2pamanifest/clientauth.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-c2pamanifest/serverauth.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-c2patimestamping/any.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-c2patimestamping/c2pamanifest.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-c2patimestamping/c2patimestamp.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-c2patimestamping/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-c2patimestamping/clientauth.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-c2patimestamping/serverauth.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-clientauth/any.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-clientauth/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-clientauth/clientauth-strict-leaf.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-clientauth/clientauth-strict.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-clientauth/clientauth.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-clientauth/serverauth-strict-leaf.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-clientauth/serverauth-strict.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-clientauth/serverauth.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-mlsclientauth-extra/any.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-mlsclientauth-extra/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-mlsclientauth-extra/mlsclientauth.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-mlsclientauth/any.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-mlsclientauth/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-mlsclientauth/clientauth.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-mlsclientauth/mlsclientauth.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-mlsclientauth/serverauth.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-server-gated-crypto/sha1-chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-server-gated-crypto/sha1-eku-any.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-server-gated-crypto/sha1-eku-clientAuth-strict.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-server-gated-crypto/sha1-eku-clientAuth.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-server-gated-crypto/sha1-eku-serverAuth-strict.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-server-gated-crypto/sha1-eku-serverAuth.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-server-gated-crypto/sha256-chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-server-gated-crypto/sha256-eku-any.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-server-gated-crypto/sha256-eku-clientAuth-strict.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-server-gated-crypto/sha256-eku-clientAuth.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-server-gated-crypto/sha256-eku-serverAuth-strict.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-eku-server-gated-crypto/sha256-eku-serverAuth.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-invalid-spki/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-invalid-spki/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-lacks-basic-constraints/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-lacks-basic-constraints/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-lacks-signing-key-usage/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-lacks-signing-key-usage/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-signed-with-sha1/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-signed-with-sha1/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-unknown-critical-extension/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-unknown-critical-extension/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-unknown-non-critical-extension/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-unknown-non-critical-extension/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-wrong-signature-no-authority-key-identifier/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/intermediate-wrong-signature-no-authority-key-identifier/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/issuer-and-subject-not-byte-for-byte-equal/anchor.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/issuer-and-subject-not-byte-for-byte-equal/anchor.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/issuer-and-subject-not-byte-for-byte-equal/target.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/issuer-and-subject-not-byte-for-byte-equal/target.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/key-rollover/longrolloverchain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/key-rollover/longrolloverchain.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/key-rollover/newchain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/key-rollover/newchain.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/key-rollover/oldchain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/key-rollover/oldchain.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/key-rollover/rolloverchain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/key-rollover/rolloverchain.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/many-names/ok-all-types.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/many-names/ok-all-types.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/many-names/toomany-all-types.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/many-names/toomany-all-types.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/many-names/toomany-dirnames-excluded.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/many-names/toomany-dirnames-excluded.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/many-names/toomany-dirnames-permitted.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/many-names/toomany-dirnames-permitted.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/many-names/toomany-dns-excluded.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/many-names/toomany-dns-excluded.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/many-names/toomany-dns-permitted.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/many-names/toomany-dns-permitted.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/many-names/toomany-ips-excluded.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/many-names/toomany-ips-excluded.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/many-names/toomany-ips-permitted.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/many-names/toomany-ips-permitted.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/non-self-signed-root/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/non-self-signed-root/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/non-self-signed-root/ta-with-constraints.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.1.2.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.1.3.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.1.4.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.1.5.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.1.6.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.10.1.2.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.10.1.3.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.10.10.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.10.13.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.10.2.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.10.3.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.10.4.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.10.5.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.10.6.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.10.7.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.10.8.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.11.1.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.11.10.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.11.11.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.11.3.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.11.5.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.11.6.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.11.8.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.11.9.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.12.1.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.12.10.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.12.3.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.12.4.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.12.5.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.12.6.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.12.8.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.10.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.12.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.13.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.15.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.16.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.17.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.2.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.20.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.21.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.22.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.23.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.24.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.25.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.26.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.27.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.28.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.29.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.3.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.31.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.33.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.34.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.35.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.36.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.37.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.38.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.7.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.8.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.13.9.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.16.2.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.2.1.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.2.2.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.2.5.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.2.6.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.2.7.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.3.1.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.3.2.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.6.1.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.6.10.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.6.11.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.6.12.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.6.16.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.6.2.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.6.3.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.6.5.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.6.6.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.6.9.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.7.1.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.7.2.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.8.1.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.8.12.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.8.14.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.8.2.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.8.3.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.8.4.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.8.5.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.8.6.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.8.7.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.8.8.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.8.9.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.9.3.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.9.5.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.9.7.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/pkits_errors/4.9.8.txt",
-    "src/pki/testdata/verify_certificate_chain_unittest/policies-inhibit-anypolicy-by-root-fail/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/policies-inhibit-anypolicy-by-root-fail/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/policies-inhibit-anypolicy-by-root-fail/ta-with-constraints.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/policies-inhibit-anypolicy-by-root-ok/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/policies-inhibit-anypolicy-by-root-ok/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/policies-inhibit-anypolicy-by-root-ok/ta-with-constraints.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/policies-inhibit-mapping-by-root-fail/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/policies-inhibit-mapping-by-root-fail/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/policies-inhibit-mapping-by-root-fail/ta-with-constraints.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/policies-inhibit-mapping-by-root-ok/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/policies-inhibit-mapping-by-root-ok/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/policies-inhibit-mapping-by-root-ok/ta-with-constraints.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/policies-ok/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/policies-ok/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/policies-ok/ta-with-constraints.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/policies-on-root-ok/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/policies-on-root-ok/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/policies-on-root-ok/ta-with-constraints.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/policies-on-root-wrong/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/policies-on-root-wrong/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/policies-on-root-wrong/ta-with-constraints.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/policies-required-by-root-fail/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/policies-required-by-root-fail/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/policies-required-by-root-fail/ta-with-constraints.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/policies-required-by-root-ok/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/policies-required-by-root-ok/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/policies-required-by-root-ok/ta-with-constraints.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/policy-mappings-on-root-fail/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/policy-mappings-on-root-fail/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/policy-mappings-on-root-fail/ta-with-constraints.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/policy-mappings-on-root-ok/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/policy-mappings-on-root-ok/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/policy-mappings-on-root-ok/ta-with-constraints.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/root-basic-constraints-ca-false/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/root-basic-constraints-ca-false/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/root-basic-constraints-ca-false/ta-with-constraints.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/root-eku-clientauth/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/root-eku-clientauth/serverauth-strict.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/root-eku-clientauth/serverauth-ta-with-constraints-strict.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/root-eku-clientauth/serverauth-ta-with-constraints.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/root-eku-clientauth/serverauth-ta-with-expiration-and-constraints.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/root-eku-clientauth/serverauth-ta-with-expiration.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/root-eku-clientauth/serverauth.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/root-lacks-basic-constraints/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/root-lacks-basic-constraints/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/root-lacks-basic-constraints/ta-with-constraints-require-basic-constraints.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/root-lacks-basic-constraints/ta-with-constraints.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/root-lacks-basic-constraints/ta-with-require-basic-constraints.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/root-lacks-keycertsign-key-usage/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/root-lacks-keycertsign-key-usage/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/root-lacks-keycertsign-key-usage/ta-with-constraints.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-and-intermediate/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-and-intermediate/distrusted-root-expired.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-and-intermediate/distrusted-root.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-and-intermediate/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-and-intermediate/ta-with-constraints.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-and-intermediate/ta-with-expiration.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-and-intermediate/trusted_leaf-and-trust_anchor.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-and-intermediate/trusted_leaf-root.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-and-intermediate/unspecified-trust-root.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-any/any.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-any/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-any/clientauth-strict-leaf.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-any/clientauth-strict.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-any/clientauth.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-any/mlsclientauth.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-any/serverauth-strict-leaf.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-any/serverauth-strict.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-any/serverauth.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-clientauth/any.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-clientauth/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-clientauth/clientauth-strict.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-clientauth/clientauth.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-clientauth/serverauth-strict.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-clientauth/serverauth.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-many/any.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-many/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-many/clientauth-strict-leaf.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-many/clientauth-strict.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-many/clientauth.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-many/mlsclientauth.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-many/serverauth-strict-leaf.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-many/serverauth-strict.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-many/serverauth.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-none/any.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-none/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-none/clientauth-strict-leaf.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-none/clientauth-strict.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-none/clientauth.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-none/mlsclientauth.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-none/serverauth-strict.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-eku-none/serverauth.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-has-512bit-rsa-key/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-has-512bit-rsa-key/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-has-ca-basic-constraints/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-has-ca-basic-constraints/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-has-ca-basic-constraints/strict.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-has-ca-basic-constraints/target_only-trusted_leaf-strict.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-has-ca-basic-constraints/target_only-trusted_leaf.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-has-ca-basic-constraints/target_only.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-has-keycertsign-but-not-ca/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-has-keycertsign-but-not-ca/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-has-pathlen-but-not-ca/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-has-pathlen-but-not-ca/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-msapplicationpolicies-and-eku/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-msapplicationpolicies-and-eku/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-msapplicationpolicies-no-eku/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-msapplicationpolicies-no-eku/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-not-end-entity/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-not-end-entity/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-not-end-entity/strict-leaf.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-not-end-entity/strict.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-only/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-only/trusted_anchor.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-only/trusted_leaf-and-trust_anchor.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-only/trusted_leaf-not_after.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-only/trusted_leaf-wrong_eku.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-only/trusted_leaf.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-only/trusted_leaf_require_self_signed.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-selfissued/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-selfissued/trusted_anchor.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-selfissued/trusted_leaf-and-trust_anchor.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-selfissued/trusted_leaf.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-selfissued/trusted_leaf_require_self_signed.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-selfsigned/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-selfsigned/trusted_leaf-and-trust_anchor.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-selfsigned/trusted_leaf-not_after.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-selfsigned/trusted_leaf-wrong_eku.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-selfsigned/trusted_leaf.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-selfsigned/trusted_leaf_require_self_signed.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-serverauth-various-keyusages/ec-decipherOnly.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-serverauth-various-keyusages/ec-decipherOnly.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-serverauth-various-keyusages/ec-digitalSignature.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-serverauth-various-keyusages/ec-digitalSignature.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-serverauth-various-keyusages/ec-keyAgreement.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-serverauth-various-keyusages/ec-keyAgreement.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-serverauth-various-keyusages/ec-keyEncipherment.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-serverauth-various-keyusages/ec-keyEncipherment.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-serverauth-various-keyusages/rsa-decipherOnly.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-serverauth-various-keyusages/rsa-decipherOnly.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-serverauth-various-keyusages/rsa-digitalSignature.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-serverauth-various-keyusages/rsa-digitalSignature.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-serverauth-various-keyusages/rsa-keyAgreement.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-serverauth-various-keyusages/rsa-keyAgreement.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-serverauth-various-keyusages/rsa-keyEncipherment.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-serverauth-various-keyusages/rsa-keyEncipherment.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-signed-by-512bit-rsa/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-signed-by-512bit-rsa/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-signed-using-ecdsa/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-signed-using-ecdsa/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-signed-with-sha1/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-signed-with-sha1/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-unknown-critical-extension/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-unknown-critical-extension/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-unknown-critical-extension/target_only-trusted_leaf.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-unknown-critical-extension/target_only.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-wrong-signature-no-authority-key-identifier/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-wrong-signature-no-authority-key-identifier/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-wrong-signature/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/target-wrong-signature/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/unknown-critical-policy-qualifier/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/unknown-critical-policy-qualifier/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/unknown-non-critical-policy-qualifier/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/unknown-non-critical-policy-qualifier/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/violates-basic-constraints-pathlen-0/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/violates-basic-constraints-pathlen-0/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/violates-pathlen-1-from-root/chain.pem",
-    "src/pki/testdata/verify_certificate_chain_unittest/violates-pathlen-1-from-root/main.test",
-    "src/pki/testdata/verify_certificate_chain_unittest/violates-pathlen-1-from-root/ta-with-constraints.test",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-BMPSTRING-case_swap-dupe_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-BMPSTRING-case_swap-extra_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-BMPSTRING-case_swap-extra_rdn.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-BMPSTRING-case_swap.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-BMPSTRING-extra_whitespace-dupe_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-BMPSTRING-extra_whitespace-extra_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-BMPSTRING-extra_whitespace-extra_rdn.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-BMPSTRING-extra_whitespace.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-BMPSTRING-unmangled-dupe_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-BMPSTRING-unmangled-extra_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-BMPSTRING-unmangled-extra_rdn.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-BMPSTRING-unmangled.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-PRINTABLESTRING-case_swap-dupe_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-PRINTABLESTRING-case_swap-extra_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-PRINTABLESTRING-case_swap-extra_rdn.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-PRINTABLESTRING-case_swap.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-PRINTABLESTRING-extra_whitespace-dupe_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-PRINTABLESTRING-extra_whitespace-extra_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-PRINTABLESTRING-extra_whitespace-extra_rdn.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-PRINTABLESTRING-extra_whitespace.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-PRINTABLESTRING-rdn_sorting_1.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-PRINTABLESTRING-rdn_sorting_2.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-PRINTABLESTRING-unmangled-dupe_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-PRINTABLESTRING-unmangled-extra_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-PRINTABLESTRING-unmangled-extra_rdn.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-PRINTABLESTRING-unmangled.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-T61STRING-case_swap-dupe_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-T61STRING-case_swap-extra_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-T61STRING-case_swap-extra_rdn.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-T61STRING-case_swap.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-T61STRING-extra_whitespace-dupe_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-T61STRING-extra_whitespace-extra_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-T61STRING-extra_whitespace-extra_rdn.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-T61STRING-extra_whitespace.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-T61STRING-unmangled-dupe_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-T61STRING-unmangled-extra_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-T61STRING-unmangled-extra_rdn.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-T61STRING-unmangled.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-UNIVERSALSTRING-case_swap-dupe_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-UNIVERSALSTRING-case_swap-extra_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-UNIVERSALSTRING-case_swap-extra_rdn.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-UNIVERSALSTRING-case_swap.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-UNIVERSALSTRING-extra_whitespace-dupe_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-UNIVERSALSTRING-extra_whitespace-extra_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-UNIVERSALSTRING-extra_whitespace-extra_rdn.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-UNIVERSALSTRING-extra_whitespace.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-UNIVERSALSTRING-unmangled-dupe_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-UNIVERSALSTRING-unmangled-extra_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-UNIVERSALSTRING-unmangled-extra_rdn.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-UNIVERSALSTRING-unmangled.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-UTF8-case_swap-dupe_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-UTF8-case_swap-extra_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-UTF8-case_swap-extra_rdn.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-UTF8-case_swap.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-UTF8-extra_whitespace-dupe_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-UTF8-extra_whitespace-extra_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-UTF8-extra_whitespace-extra_rdn.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-UTF8-extra_whitespace.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-UTF8-unmangled-dupe_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-UTF8-unmangled-extra_attr.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-UTF8-unmangled-extra_rdn.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-UTF8-unmangled.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-mixed-rdn_dupetype_sorting_1.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/ascii-mixed-rdn_dupetype_sorting_2.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/custom-custom-normalized.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/invalid-AttributeTypeAndValue-badAttributeType.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/invalid-AttributeTypeAndValue-empty.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/invalid-AttributeTypeAndValue-extradata.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/invalid-AttributeTypeAndValue-onlyOneElement.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/invalid-AttributeTypeAndValue-setNotSequence.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/invalid-Name-setInsteadOfSequence.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/invalid-RDN-empty.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/invalid-RDN-sequenceInsteadOfSet.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/unicode-mixed-normalized.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/unicode-mixed-unnormalized.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/unicode_bmp-BMPSTRING-unmangled.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/unicode_bmp-UNIVERSALSTRING-unmangled.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/unicode_bmp-UTF8-unmangled.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/unicode_supplementary-UNIVERSALSTRING-unmangled.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/unicode_supplementary-UTF8-unmangled.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/valid-Name-empty.pem",
-    "src/pki/testdata/verify_name_match_unittest/names/valid-minimal.pem",
-    "src/pki/testdata/verify_signed_data_unittest/ecdsa-prime256v1-sha512-spki-params-null.pem",
-    "src/pki/testdata/verify_signed_data_unittest/ecdsa-prime256v1-sha512-unused-bits-signature.pem",
-    "src/pki/testdata/verify_signed_data_unittest/ecdsa-prime256v1-sha512-using-ecdh-key.pem",
-    "src/pki/testdata/verify_signed_data_unittest/ecdsa-prime256v1-sha512-using-ecmqv-key.pem",
-    "src/pki/testdata/verify_signed_data_unittest/ecdsa-prime256v1-sha512-using-rsa-algorithm.pem",
-    "src/pki/testdata/verify_signed_data_unittest/ecdsa-prime256v1-sha512-wrong-signature-format.pem",
-    "src/pki/testdata/verify_signed_data_unittest/ecdsa-prime256v1-sha512.pem",
-    "src/pki/testdata/verify_signed_data_unittest/ecdsa-secp384r1-sha256-corrupted-data.pem",
-    "src/pki/testdata/verify_signed_data_unittest/ecdsa-secp384r1-sha256.pem",
-    "src/pki/testdata/verify_signed_data_unittest/ecdsa-using-rsa-key.pem",
-    "src/pki/testdata/verify_signed_data_unittest/rsa-pkcs1-sha1-bad-key-der-length.pem",
-    "src/pki/testdata/verify_signed_data_unittest/rsa-pkcs1-sha1-bad-key-der-null.pem",
-    "src/pki/testdata/verify_signed_data_unittest/rsa-pkcs1-sha1-key-params-absent.pem",
-    "src/pki/testdata/verify_signed_data_unittest/rsa-pkcs1-sha1-using-pss-key-no-params.pem",
-    "src/pki/testdata/verify_signed_data_unittest/rsa-pkcs1-sha1-wrong-algorithm.pem",
-    "src/pki/testdata/verify_signed_data_unittest/rsa-pkcs1-sha1.pem",
-    "src/pki/testdata/verify_signed_data_unittest/rsa-pkcs1-sha256-key-encoded-ber.pem",
-    "src/pki/testdata/verify_signed_data_unittest/rsa-pkcs1-sha256-spki-non-null-params.pem",
-    "src/pki/testdata/verify_signed_data_unittest/rsa-pkcs1-sha256-using-ecdsa-algorithm.pem",
-    "src/pki/testdata/verify_signed_data_unittest/rsa-pkcs1-sha256-using-id-ea-rsa.pem",
-    "src/pki/testdata/verify_signed_data_unittest/rsa-pkcs1-sha256.pem",
-    "src/pki/testdata/verify_signed_data_unittest/rsa-pss-sha256-using-pss-key-with-params.pem",
-    "src/pki/testdata/verify_signed_data_unittest/rsa-pss-sha256-wrong-salt.pem",
-    "src/pki/testdata/verify_signed_data_unittest/rsa-pss-sha256.pem",
-    "src/pki/testdata/verify_signed_data_unittest/rsa-using-ec-key.pem",
-    "src/pki/testdata/verify_signed_data_unittest/rsa2048-pkcs1-sha512.pem",
-    "src/pki/testdata/verify_unittest/google-intermediate1.der",
-    "src/pki/testdata/verify_unittest/google-intermediate2.der",
-    "src/pki/testdata/verify_unittest/google-leaf.der",
-    "src/pki/testdata/verify_unittest/lencr-intermediate-r3.der",
-    "src/pki/testdata/verify_unittest/lencr-leaf.der",
-    "src/pki/testdata/verify_unittest/lencr-root-dst-x3.der",
-    "src/pki/testdata/verify_unittest/lencr-root-x1-cross-signed.der",
-    "src/pki/testdata/verify_unittest/lencr-root-x1.der",
-    "src/pki/testdata/verify_unittest/mozilla_roots.der",
-    "src/pki/testdata/verify_unittest/self-issued.pem"
-  ],
-  "rust_bssl_crypto": [
-    "src/rust/bssl-crypto/src/aead.rs",
-    "src/rust/bssl-crypto/src/aes.rs",
-    "src/rust/bssl-crypto/src/cipher/aes_cbc.rs",
-    "src/rust/bssl-crypto/src/cipher/aes_ctr.rs",
-    "src/rust/bssl-crypto/src/cipher/mod.rs",
-    "src/rust/bssl-crypto/src/digest.rs",
-    "src/rust/bssl-crypto/src/ec.rs",
-    "src/rust/bssl-crypto/src/ecdh.rs",
-    "src/rust/bssl-crypto/src/ecdsa.rs",
-    "src/rust/bssl-crypto/src/ed25519.rs",
-    "src/rust/bssl-crypto/src/hkdf.rs",
-    "src/rust/bssl-crypto/src/hmac.rs",
-    "src/rust/bssl-crypto/src/hpke.rs",
-    "src/rust/bssl-crypto/src/lib.rs",
-    "src/rust/bssl-crypto/src/macros.rs",
-    "src/rust/bssl-crypto/src/mem.rs",
-    "src/rust/bssl-crypto/src/mldsa.rs",
-    "src/rust/bssl-crypto/src/mlkem.rs",
-    "src/rust/bssl-crypto/src/rand.rs",
-    "src/rust/bssl-crypto/src/rsa.rs",
-    "src/rust/bssl-crypto/src/scoped.rs",
-    "src/rust/bssl-crypto/src/slhdsa.rs",
-    "src/rust/bssl-crypto/src/test_helpers.rs",
-    "src/rust/bssl-crypto/src/x25519.rs"
-  ],
-  "rust_bssl_sys": [
-    "src/rust/bssl-sys/src/lib.rs"
-  ],
-  "ssl": [
-    "src/ssl/bio_ssl.cc",
-    "src/ssl/d1_both.cc",
-    "src/ssl/d1_lib.cc",
-    "src/ssl/d1_pkt.cc",
-    "src/ssl/d1_srtp.cc",
-    "src/ssl/dtls_method.cc",
-    "src/ssl/dtls_record.cc",
-    "src/ssl/encrypted_client_hello.cc",
-    "src/ssl/extensions.cc",
-    "src/ssl/handoff.cc",
-    "src/ssl/handshake.cc",
-    "src/ssl/handshake_client.cc",
-    "src/ssl/handshake_server.cc",
-    "src/ssl/s3_both.cc",
-    "src/ssl/s3_lib.cc",
-    "src/ssl/s3_pkt.cc",
-    "src/ssl/ssl_aead_ctx.cc",
-    "src/ssl/ssl_asn1.cc",
-    "src/ssl/ssl_buffer.cc",
-    "src/ssl/ssl_cert.cc",
-    "src/ssl/ssl_cipher.cc",
-    "src/ssl/ssl_credential.cc",
-    "src/ssl/ssl_file.cc",
-    "src/ssl/ssl_key_share.cc",
-    "src/ssl/ssl_lib.cc",
-    "src/ssl/ssl_privkey.cc",
-    "src/ssl/ssl_session.cc",
-    "src/ssl/ssl_stat.cc",
-    "src/ssl/ssl_transcript.cc",
-    "src/ssl/ssl_versions.cc",
-    "src/ssl/ssl_x509.cc",
-    "src/ssl/t1_enc.cc",
-    "src/ssl/tls13_both.cc",
-    "src/ssl/tls13_client.cc",
-    "src/ssl/tls13_enc.cc",
-    "src/ssl/tls13_server.cc",
-    "src/ssl/tls_method.cc",
-    "src/ssl/tls_record.cc"
-  ],
-  "ssl_headers": [
-    "src/include/openssl/dtls1.h",
-    "src/include/openssl/srtp.h",
-    "src/include/openssl/ssl.h",
-    "src/include/openssl/ssl3.h",
-    "src/include/openssl/tls1.h"
-  ],
-  "ssl_internal_headers": [
-    "src/ssl/internal.h"
-  ],
-  "ssl_test": [
-    "src/crypto/test/gtest_main.cc",
-    "src/ssl/span_test.cc",
-    "src/ssl/ssl_c_test.c",
-    "src/ssl/ssl_internal_test.cc",
-    "src/ssl/ssl_test.cc"
-  ],
-  "test_support": [
-    "src/crypto/test/abi_test.cc",
-    "src/crypto/test/file_test.cc",
-    "src/crypto/test/file_test_gtest.cc",
-    "src/crypto/test/file_util.cc",
-    "src/crypto/test/test_data.cc",
-    "src/crypto/test/test_util.cc",
-    "src/crypto/test/wycheproof_util.cc"
-  ],
-  "test_support_headers": [
-    "src/crypto/test/abi_test.h",
-    "src/crypto/test/file_test.h",
-    "src/crypto/test/file_util.h",
-    "src/crypto/test/gtest_main.h",
-    "src/crypto/test/test_data.h",
-    "src/crypto/test/test_util.h",
-    "src/crypto/test/wycheproof_util.h",
-    "src/ssl/test/async_bio.h",
-    "src/ssl/test/fuzzer.h",
-    "src/ssl/test/fuzzer_tags.h",
-    "src/ssl/test/handshake_util.h",
-    "src/ssl/test/mock_quic_transport.h",
-    "src/ssl/test/packeted_bio.h",
-    "src/ssl/test/settings_writer.h",
-    "src/ssl/test/test_config.h",
-    "src/ssl/test/test_state.h"
-  ],
-  "tool": [
-    "src/tool/args.cc",
-    "src/tool/ciphers.cc",
-    "src/tool/client.cc",
-    "src/tool/const.cc",
-    "src/tool/digest.cc",
-    "src/tool/fd.cc",
-    "src/tool/file.cc",
-    "src/tool/generate_ech.cc",
-    "src/tool/generate_ed25519.cc",
-    "src/tool/genrsa.cc",
-    "src/tool/pkcs12.cc",
-    "src/tool/rand.cc",
-    "src/tool/server.cc",
-    "src/tool/sign.cc",
-    "src/tool/speed.cc",
-    "src/tool/tool.cc",
-    "src/tool/transport_common.cc"
-  ],
-  "tool_headers": [
-    "src/tool/internal.h",
-    "src/tool/transport_common.h"
-  ],
-  "urandom_test": [
-    "src/crypto/rand/urandom_test.cc"
-  ]
-}
\ No newline at end of file
diff --git a/src/.bazelignore b/src/.bazelignore
deleted file mode 100644
index 9dad64c..0000000
--- a/src/.bazelignore
+++ /dev/null
@@ -1,2 +0,0 @@
-third_party/googletest
-util/bazel-example
diff --git a/src/.bazelrc b/src/.bazelrc
deleted file mode 100644
index 803b785..0000000
--- a/src/.bazelrc
+++ /dev/null
@@ -1,50 +0,0 @@
-# Copyright 2024 The BoringSSL Authors
-#
-# 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
-#
-#     https://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 is a bazelrc file, documented in https://bazel.build/run/bazelrc and
-# specifies default flags when BoringSSL is the root project. It has no effect
-# on downstream projects, which define their own toolchains and configs.
-
-# See https://bazel.build/run/bazelrc#enable_platform_specific_config.
-# This expands to --config=osname which, in turn, expands to the options
-# specified below.
-build --enable_platform_specific_config
-
-# Enable additional checks.
-build --features=layering_check
-build --features=parse_headers
-
-# Bazel has no abstractions for setting C++ versions and expects the root
-# project to use the compiler-specific options for their toolchains. (Bazel only
-# wants the root to set the C++ version for the sake of projects like Abseil
-# whose ABI depends on the C++ version.)
-build:linux --cxxopt=-std=c++17
-build:macos --cxxopt=-std=c++17
-build:windows --cxxopt=/std:c++17
-
-# Our own builds should strictly build without warnings, but we don't add those
-# in targets like other flags because we can't assume all users will have clean
-# builds too.
-build:linux --cxxopt=-Werror
-build:macos --cxxopt=-Werror
-
-# Without setting a minimum macOS version, std::optional does not work.
-build:macos --cxxopt=-mmacosx-version-min=10.15
-
-# Without /Zc:__cplusplus, MSVC does not define the right value for
-# __cplusplus. See https://devblogs.microsoft.com/cppblog/msvc-now-correctly-reports-__cplusplus/
-build:windows --cxxopt=/Zc:__cplusplus
-
-# https://bazel.build/configure/best-practices#bazelrc-file
-try-import %workspace%/user.bazelrc
diff --git a/src/.bazelversion b/src/.bazelversion
deleted file mode 100644
index 18bb418..0000000
--- a/src/.bazelversion
+++ /dev/null
@@ -1 +0,0 @@
-7.5.0
diff --git a/src/.bcr/README.md b/src/.bcr/README.md
deleted file mode 100644
index fa7d4f4..0000000
--- a/src/.bcr/README.md
+++ /dev/null
@@ -1,6 +0,0 @@
-# BCR Configuration
-
-This directory contains configuration information for BCR. It is patterned after
-the [Publish to BCR app](https://github.com/bazel-contrib/publish-to-bcr/tree/main/templates),
-which we have [opted not to use](https://github.com/bazel-contrib/publish-to-bcr/issues/157).
-However, `presubmit.yml` is used by [our own BCR tooling](../docs/releasing.md).
diff --git a/src/.bcr/config.yml b/src/.bcr/config.yml
deleted file mode 100644
index e69de29..0000000
--- a/src/.bcr/config.yml
+++ /dev/null
diff --git a/src/.bcr/metadata.template.json b/src/.bcr/metadata.template.json
deleted file mode 100644
index ed376c9..0000000
--- a/src/.bcr/metadata.template.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
-  "homepage": "https://boringssl.googlesource.com/boringssl/",
-  "maintainers": [
-    {
-      "email": "agl@google.com",
-      "github": "agl",
-      "name": "Adam Langley"
-    },
-    {
-      "email": "davidben@google.com",
-      "github": "davidben",
-      "name": "David Benjamin"
-    },
-    {
-      "email": "dadrian@google.com",
-      "github": "dadrian",
-      "name": "David Adrian"
-    }
-  ],
-  "repository": [
-    "github:google/boringssl"
-  ],
-  "versions": [],
-  "yanked_versions": {}
-}
diff --git a/src/.bcr/presubmit.yml b/src/.bcr/presubmit.yml
deleted file mode 100644
index 44e4b7a..0000000
--- a/src/.bcr/presubmit.yml
+++ /dev/null
@@ -1,61 +0,0 @@
-build_targets: &build_targets
-  - "@boringssl//:crypto"
-  - "@boringssl//:ssl"
-
-matrix: &matrix
-  linux_platforms:
-    - debian11
-    - ubuntu2204
-  bazel: [7.x]
-tasks:
-  verify_targets_on_linux:
-    name: Verify build targets on Linux
-    platform: ${{ linux_platforms }}
-    bazel: ${{ bazel }}
-    build_targets: *build_targets
-    build_flags:
-      - '--cxxopt=-std=c++17'
-  verify_targets_on_windows:
-    name: Verify build targets on Windows
-    platform: windows
-    bazel: ${{ bazel }}
-    build_targets: *build_targets
-    build_flags:
-      - '--cxxopt=/std:c++17'
-  # Work around https://github.com/bazelbuild/bazel/issues/10472
-  verify_targets_on_macos:
-    name: Verify build targets on macOS
-    platform: macos
-    bazel: ${{ bazel }}
-    build_targets: *build_targets
-    build_flags: &macos_workaround
-      - '--cxxopt=-std=c++17'
-      - '--sandbox_block_path=/usr/local'
-bcr_test_module:
-  module_path: util/bazel-example
-  matrix: *matrix
-  tasks:
-    run_test_module_on_linux:
-      name: Run test module on Linux
-      platform: ${{ linux_platforms }}
-      bazel: ${{ bazel }}
-      build_targets:
-        - //...
-      build_flags:
-        - '--cxxopt=-std=c++17'
-    run_test_module_on_windows:
-      name: Run test module on Windows
-      platform: windows
-      bazel: ${{ bazel }}
-      build_targets:
-        - //...
-      build_flags:
-        - '--cxxopt=/std:c++17'
-    # Work around https://github.com/bazelbuild/bazel/issues/10472
-    run_test_module_on_macos:
-      name: Run test module on macOS
-      platform: macos
-      bazel: ${{ bazel }}
-      build_targets:
-        - //...
-      build_flags: *macos_workaround
diff --git a/src/.bcr/source.template.json b/src/.bcr/source.template.json
deleted file mode 100644
index 2037471..0000000
--- a/src/.bcr/source.template.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-  "integrity": "",
-  "strip_prefix": "{REPO}-{VERSION}",
-  "url": "https://github.com/{OWNER}/{REPO}/releases/download/{TAG}/{REPO}-{TAG}.tar.gz"
-}
diff --git a/src/.clang-format b/src/.clang-format
deleted file mode 100644
index 4ab7f98..0000000
--- a/src/.clang-format
+++ /dev/null
@@ -1,80 +0,0 @@
-BasedOnStyle: Google
-MaxEmptyLinesToKeep: 3
-AllowShortIfStatementsOnASingleLine: false
-AllowShortLoopsOnASingleLine: false
-DerivePointerAlignment: false
-PointerAlignment: Right
-# TODO(davidben): The default for Google style is now Regroup, but the default
-# IncludeCategories does not recognize <openssl/header.h>. We should
-# reconfigure IncludeCategories to match. For now, keep it at Preserve.
-IncludeBlocks: Preserve
-InsertBraces: true
-TypenameMacros: ['LHASH_OF', 'STACK_OF']
-StatementMacros:
-  - "DECLARE_ASN1_ALLOC_FUNCTIONS"
-  - "DECLARE_ASN1_ALLOC_FUNCTIONS_name"
-  - "DECLARE_ASN1_ENCODE_FUNCTIONS"
-  - "DECLARE_ASN1_ENCODE_FUNCTIONS_const"
-  - "DECLARE_ASN1_FUNCTIONS"
-  - "DECLARE_ASN1_FUNCTIONS_const"
-  - "DECLARE_ASN1_FUNCTIONS_fname"
-  - "DECLARE_ASN1_FUNCTIONS_name"
-  - "DECLARE_PEM_read"
-  - "DECLARE_PEM_read_bio"
-  - "DECLARE_PEM_read_fp"
-  - "DECLARE_PEM_rw"
-  - "DECLARE_PEM_rw_cb"
-  - "DECLARE_PEM_rw_const"
-  - "DECLARE_PEM_write"
-  - "DECLARE_PEM_write_bio"
-  - "DECLARE_PEM_write_bio_const"
-  - "DECLARE_PEM_write_cb"
-  - "DECLARE_PEM_write_cb_bio"
-  - "DECLARE_PEM_write_cb_fp"
-  - "DECLARE_PEM_write_const"
-  - "DECLARE_PEM_write_fp"
-  - "DECLARE_PEM_write_fp_const"
-  - "IMPLEMENT_ASN1_ALLOC_FUNCTIONS"
-  - "IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname"
-  - "IMPLEMENT_ASN1_ALLOC_FUNCTIONS_pfname"
-  - "IMPLEMENT_ASN1_DUP_FUNCTION"
-  - "IMPLEMENT_ASN1_DUP_FUNCTION_const"
-  - "IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname"
-  - "IMPLEMENT_ASN1_ENCODE_FUNCTIONS_fname"
-  - "IMPLEMENT_ASN1_FUNCTIONS"
-  - "IMPLEMENT_ASN1_FUNCTIONS_const"
-  - "IMPLEMENT_ASN1_FUNCTIONS_const_fname"
-  - "IMPLEMENT_ASN1_FUNCTIONS_ENCODE_name"
-  - "IMPLEMENT_ASN1_FUNCTIONS_fname"
-  - "IMPLEMENT_ASN1_FUNCTIONS_name"
-  - "IMPLEMENT_ASN1_TYPE_ex"
-  - "IMPLEMENT_STATIC_ASN1_ALLOC_FUNCTIONS"
-  - "IMPLEMENT_PEM_read"
-  - "IMPLEMENT_PEM_read_bio"
-  - "IMPLEMENT_PEM_read_fp"
-  - "IMPLEMENT_PEM_rw"
-  - "IMPLEMENT_PEM_rw_cb"
-  - "IMPLEMENT_PEM_rw_const"
-  - "IMPLEMENT_PEM_write"
-  - "IMPLEMENT_PEM_write_bio"
-  - "IMPLEMENT_PEM_write_bio_const"
-  - "IMPLEMENT_PEM_write_cb"
-  - "IMPLEMENT_PEM_write_cb_bio"
-  - "IMPLEMENT_PEM_write_cb_bio_const"
-  - "IMPLEMENT_PEM_write_cb_const"
-  - "IMPLEMENT_PEM_write_cb_fp"
-  - "IMPLEMENT_PEM_write_cb_fp_const"
-  - "IMPLEMENT_PEM_write_const"
-  - "IMPLEMENT_PEM_write_fp"
-  - "IMPLEMENT_PEM_write_fp_const"
-  - "ASN1_ADB_END"
-  - "ASN1_CHOICE_END"
-  - "ASN1_CHOICE_END_cb"
-  - "ASN1_ITEM_TEMPLATE_END"
-  - "ASN1_SEQUENCE_END"
-  - "ASN1_SEQUENCE_END_cb"
-  - "ASN1_SEQUENCE_END_enc"
-  - "ASN1_SEQUENCE_END_ref"
-  # This isn't quite right, but it causes clang-format to do a slightly better
-  # job with this macro.
-  - "ASN1_EX_TEMPLATE_TYPE"
diff --git a/src/.gitignore b/src/.gitignore
deleted file mode 100644
index 8c3524b..0000000
--- a/src/.gitignore
+++ /dev/null
@@ -1,40 +0,0 @@
-/bazel-*
-/build
-/build32
-/build64
-/ssl/test/runner/runner
-*.pyc
-*.swp
-*.swo
-/doc/*.html
-/doc/doc.css
-/rust/Cargo.lock
-/rust/bssl-crypto/Cargo.lock
-/rust/target
-/user.bazelrc
-
-/util/bazel-example/bazel-*
-/util/bazel-example/MODULE.bazel.lock
-
-/util/bot/android_ndk
-/util/bot/android_sdk/public
-/util/bot/cmake
-/util/bot/golang
-/util/bot/libFuzzer
-/util/bot/libcxx
-/util/bot/libcxxabi
-/util/bot/llvm-build
-/util/bot/llvm-libc
-/util/bot/nasm-win32.exe
-/util/bot/ninja
-/util/bot/perl-win32
-/util/bot/qemu-static
-/util/bot/sde-linux64
-/util/bot/sde-linux64.tar.xz
-/util/bot/sde-win32
-/util/bot/sde-win32.tar.xz
-/util/bot/tools
-/util/bot/windows_sdk
-
-# Ignore target under any directory.
-target/
diff --git a/src/API-CONVENTIONS.md b/src/API-CONVENTIONS.md
deleted file mode 100644
index 93506e9..0000000
--- a/src/API-CONVENTIONS.md
+++ /dev/null
@@ -1,324 +0,0 @@
-# BoringSSL API Conventions
-
-This document describes conventions for BoringSSL APIs. The [style
-guide](./STYLE.md) also includes guidelines, but this document is targeted at
-both API consumers and developers. API documentation in BoringSSL may assume
-these conventions by default, rather than repeating them for every function.
-
-
-## Documentation
-
-All supported public APIs are documented in the public header files, found in
-`include/openssl`. The API documentation is also available
-[online](https://commondatastorage.googleapis.com/chromium-boringssl-docs/headers.html).
-
-Experimental public APIs are found in `include/openssl/experimental`. Use of
-these will likely be incompatible with changes in the near future as they are
-finalized.
-
-## Forward declarations
-
-Do not write `typedef struct foo_st FOO` or try otherwise to define BoringSSL's
-types. Including `openssl/base.h` (or `openssl/ossl_typ.h` for consumers who
-wish to be OpenSSL-compatible) will forward-declare each type without importing
-the rest of the library or invasive macros.
-
-
-## Error-handling
-
-Most functions in BoringSSL may fail, either due to allocation failures or input
-errors. Functions which return an `int` typically return one on success and zero
-on failure. Functions which return a pointer typically return `NULL` on failure.
-However, due to legacy constraints, some functions are more complex. Consult the
-API documentation before using a function.
-
-On error, most functions also push errors on the error queue, an `errno`-like
-mechanism. See the documentation for
-[err.h](https://commondatastorage.googleapis.com/chromium-boringssl-docs/err.h.html)
-for more details.
-
-As with `errno`, callers must test the function's return value, not the error
-queue to determine whether an operation failed. Some codepaths may not interact
-with the error queue, and the error queue may have state from a previous failed
-operation. After checking for failure, the caller can then inspect the error
-queue in the failure case for details.
-
-As a notable exception, some functions in the SSL/TLS library use a multi-step
-process to indicate failure: First, the return value indicates whether the
-operation failed. Then, `SSL_get_error` indicates whether the failure was due to
-an error (`SSL_ERROR_SSL`) or some recoverable condition (e.g.
-`SSL_ERROR_WANT_READ`). In the former case, the caller can use the error queue
-for more information.
-
-When ignoring a failed operation, it is recommended to call `ERR_clear_error` to
-avoid the state interacting with future operations. Failing to do so should not
-affect the actual behavior of any functions, but may result in errors from both
-operations being mixed in error logging. We hope to
-[improve](https://bugs.chromium.org/p/boringssl/issues/detail?id=38) this
-situation in the future.
-
-Where possible, avoid conditioning on specific reason codes and limit usage to
-logging. The reason codes are very fine-grained and tend to leak details of the
-library's internal structure. Changes in the library often have a side effect of
-changing the exact reason code returned.
-
-
-## Memory allocation
-
-BoringSSL allocates memory via `OPENSSL_malloc`, found in `mem.h`. Use
-`OPENSSL_free`, found in the same header file, to release it. BoringSSL
-functions will fail gracefully on allocation error, but it is recommended to use
-a `malloc` implementation that `abort`s on failure.
-
-
-## Pointers and slices
-
-Unless otherwise specified, pointer parameters that refer to a single object,
-either as an input or output parameter, may not be `NULL`. In this case,
-BoringSSL often will not check for `NULL` before dereferencing, so passing
-`NULL` may crash or exhibit other undefined behavior. (Sometimes the function
-will check for `NULL` anyway, for OpenSSL compatibility, but we still consider
-passing `NULL` to be a caller error.)
-
-Pointer parameters may also refer to a contiguous sequence of objects, sometimes
-referred to as a *slice*. These will typically be a pair of pointer and length
-parameters named like `plaintext` and `plaintext_len`, or `objs` and `num_objs`.
-We prefer the former for byte buffers and the latter for sequences of other
-types. The documentation will usually refer to both parameters together, e.g.
-"`EVP_DigestUpdate` hashes `len` bytes from `data`."
-
-Parameters in C and C++ that use array syntax, such as
-`uint8_t out[SHA256_DIGEST_LENGTH]`, are really pointers. In BoringSSL's uses of
-this syntax, the pointer must point to the specified number of values.
-
-In other cases, the documentation will describe how the function parameters
-determine the slice's length. For example, a slice's length may be measured in
-units other than element count, multiple slice parameters may share a length, or
-a slice's length may be implicitly determined by other means like RSA key size.
-
-By default, BoringSSL follows C++'s
-[slice conventions](https://davidben.net/2024/01/15/empty-slices.html)
-for pointers. That is, unless otherwise specified, pointers for non-empty
-(non-zero length) slices must be represented by a valid pointer to that many
-objects in memory. Pointers for empty (zero length) slices must either be `NULL`
-or point within some sequence of objects of a compatible type.
-
-WARNING: The dangling, non-null pointer used by Rust empty slices may *not* be
-passed into BoringSSL. Rust FFIs must adjust such pointers to before passing to
-BoringSSL. For example, see the `FfiSlice` abstraction in `bssl-crypto`. (We may
-relax this if pointer arithmetic rules in C/C++ are adjusted to permit Rust's
-pointers. Until then, it is impractical for a C/C++ library to act on such a
-slice representation. See
-[this document](https://davidben.net/2024/01/15/empty-slices.html) for more
-discussion.)
-
-In some cases, OpenSSL compatibility requires that a function will treat `NULL`
-slice pointers differently from non-`NULL` pointers. Such behavior will be
-described in documentation. For examples, see `EVP_EncryptUpdate`,
-`EVP_DigestSignFinal`, and `HMAC_Init_ex`. Callers passing potentially empty
-slices into such functions should take care that the `NULL` case is either
-unreachable or still has the desired behavior.
-
-If a `const char *` parameter is described as a "NUL-terminated string" or a
-"C string", it must point to a sequence of `char` values containing a NUL (zero)
-value, which determines the length. Unless otherwise specified, the pointer may
-not be `NULL`, matching the C standard library.
-
-For purposes of C and C++'s
-[strict aliasing](https://en.cppreference.com/w/c/language/object#Strict_aliasing)
-requirements, objects passed by pointers must be accessible as the specified
-type. `uint8_t` may be assumed to be the same type as `unsigned char` and thus
-may be the pointer type for all object types. BoringSSL does not support
-platforms where `uint8_t` is a non-character type. However, there is no
-strict aliasing sanitizer, very few C and C++ codebases are valid by strict
-aliasing, and BoringSSL itself has some
-[known strict aliasing bugs](https://crbug.com/boringssl/444), thus we strongly
-recommend consumers build with `-fno-strict-aliasing`.
-
-Pointer parameters additionally have ownership and lifetime requirements,
-discussed in the section below.
-
-
-## Object initialization and cleanup
-
-BoringSSL defines a number of structs for use in its APIs. It is a C library,
-so the caller is responsible for ensuring these structs are properly
-initialized and released. Consult the documentation for a module for the
-proper use of its types. Some general conventions are listed below.
-
-
-### Heap-allocated types
-
-Some types, such as `RSA`, are heap-allocated. All instances will be allocated
-and returned from BoringSSL's APIs. It is an error to instantiate a heap-
-allocated type on the stack or embedded within another object.
-
-Heap-allocated types may have functioned named like `RSA_new` which allocates a
-fresh blank `RSA`. Other functions may also return newly-allocated instances.
-For example, `RSA_parse_public_key` is documented to return a newly-allocated
-`RSA` object.
-
-Heap-allocated objects must be released by the corresponding free function,
-named like `RSA_free`. Like C's `free` and C++'s `delete`, all free functions
-internally check for `NULL`. It is redundant to check for `NULL` before calling.
-
-A heap-allocated type may be reference-counted. In this case, a function named
-like `RSA_up_ref` will be available to take an additional reference count. The
-free function must be called to decrement the reference count. It will only
-release resources when the final reference is released. For OpenSSL
-compatibility, these functions return `int`, but callers may assume they always
-successfully return one because reference counts use saturating arithmetic.
-
-C++ consumers are recommended to use `bssl::UniquePtr` to manage heap-allocated
-objects. `bssl::UniquePtr<T>`, like other types, is forward-declared in
-`openssl/base.h`. Code that needs access to the free functions, such as code
-which destroys a `bssl::UniquePtr`, must include the corresponding module's
-header. (This matches `std::unique_ptr`'s relationship with forward
-declarations.) Note, despite the name, `bssl::UniquePtr` is also used with
-reference-counted types. It owns a single reference to the object. To take an
-additional reference, use the `bssl::UpRef` function, which will return a
-separate `bssl::UniquePtr`.
-
-
-### Stack-allocated types
-
-Other types in BoringSSL are stack-allocated, such as `EVP_MD_CTX`. These
-types may be allocated on the stack or embedded within another object.
-However, they must still be initialized before use.
-
-Every stack-allocated object in BoringSSL has a *zero state*, analogous to
-initializing a pointer to `NULL`. In this state, the object may not be
-completely initialized, but it is safe to call cleanup functions. Entering the
-zero state cannot fail. (It is usually `memset(0)`.)
-
-The function to enter the zero state is named like `EVP_MD_CTX_init` or
-`CBB_zero` and will always return `void`. To release resources associated with
-the type, call the cleanup function, named like `EVP_MD_CTX_cleanup`. The
-cleanup function must be called on all codepaths, regardless of success or
-failure. For example:
-
-    uint8_t md[EVP_MAX_MD_SIZE];
-    unsigned md_len;
-    EVP_MD_CTX ctx;
-    EVP_MD_CTX_init(&ctx);  /* Enter the zero state. */
-    int ok = EVP_DigestInit_ex(&ctx, EVP_sha256(), NULL) &&
-             EVP_DigestUpdate(&ctx, "hello ", 6) &&
-             EVP_DigestUpdate(&ctx, "world", 5) &&
-             EVP_DigestFinal_ex(&ctx, md, &md_len);
-    EVP_MD_CTX_cleanup(&ctx);  /* Release |ctx|. */
-
-Note that `EVP_MD_CTX_cleanup` is called whether or not the `EVP_Digest*`
-operations succeeded. More complex C functions may use the `goto err` pattern:
-
-      int ret = 0;
-      EVP_MD_CTX ctx;
-      EVP_MD_CTX_init(&ctx);
-
-      if (!some_other_operation()) {
-        goto err;
-      }
-
-      uint8_t md[EVP_MAX_MD_SIZE];
-      unsigned md_len;
-      if (!EVP_DigestInit_ex(&ctx, EVP_sha256(), NULL) ||
-          !EVP_DigestUpdate(&ctx, "hello ", 6) ||
-          !EVP_DigestUpdate(&ctx, "world", 5) ||
-          !EVP_DigestFinal_ex(&ctx, md, &md_len) {
-        goto err;
-      }
-
-      ret = 1;
-
-    err:
-      EVP_MD_CTX_cleanup(&ctx);
-      return ret;
-
-Note that, because `ctx` is set to the zero state before any failures,
-`EVP_MD_CTX_cleanup` is safe to call even if the first operation fails before
-`EVP_DigestInit_ex`. However, it would be illegal to move the `EVP_MD_CTX_init`
-below the `some_other_operation` call.
-
-As a rule of thumb, enter the zero state of stack-allocated structs in the
-same place they are declared.
-
-C++ consumers are recommended to use the wrappers named like
-`bssl::ScopedEVP_MD_CTX`, defined in the corresponding module's header. These
-wrappers are automatically initialized to the zero state and are automatically
-cleaned up.
-
-
-### Data-only types
-
-A few types, such as `SHA_CTX`, are data-only types and do not require cleanup.
-These are usually for low-level cryptographic operations. These types may be
-used freely without special cleanup conventions.
-
-
-### Ownership and lifetime
-
-When working with allocated objects, it is important to think about *ownership*
-of each object, or what code is responsible for releasing it. This matches the
-corresponding notion in higher-level languages like C++ and Rust.
-
-Ownership applies to both uniquely-owned types and reference-counted types. For
-the latter, ownership means the code is responsible for releasing one
-reference. Note a *reference* in BoringSSL refers to an increment (and eventual
-decrement) of an object's reference count, not `T&` in C++. Thus, to "take a
-reference" means to increment the reference count and take ownership of
-decrementing it.
-
-As BoringSSL's APIs are primarily in C, ownership and lifetime obligations are
-not rigorously annotated in the type signatures or checked at compile-time.
-Instead, they are described in
-[API documentation](https://commondatastorage.googleapis.com/chromium-boringssl-docs/headers.html).
-This section describes some conventions.
-
-Unless otherwise documented, functions do not take ownership of pointer
-arguments. The pointer typically must remain valid for the duration of the
-function call. The function may internally copy information from the argument or
-take a reference, but the caller is free to release its copy or reference at any
-point after the call completes.
-
-A function may instead be documented to *take* or *transfer* ownership of a
-pointer. The caller must own the object before the function call and, after
-transfer, no longer owns it. As a corollary, the caller may no longer reference
-the object without a separate guarantee on the lifetime. The function may even
-release the object before returning. Callers that wish to independently retain a
-transfered object must therefore take a reference or make a copy before
-transferring. Callers should also take note of whether the function is
-documented to transfer pointers unconditionally or only on success. Unlike C++
-and Rust, functions in BoringSSL typically only transfer on success.
-
-Likewise, output pointers may be owning or non-owning. Unless otherwise
-documented, functions output non-owning pointers. The caller is not responsible
-for releasing the output pointer, but it must not use the pointer beyond its
-lifetime. The pointer may be released when the parent object is released or even
-sooner on state change in the parent object.
-
-If documented to output a *newly-allocated* object or a *reference* or *copy* of
-one, the caller is responsible for releasing the object when it is done.
-
-By convention, functions named `get0` return non-owning pointers. Functions
-named `new` or `get1` return owning pointers. Functions named `set0` take
-ownership of arguments. Functions named `set1` do not. They typically take a
-reference or make a copy internally. These names originally referred to the
-effect on a reference count, but the convention applies equally to
-non-reference-counted types.
-
-API documentation may also describe more complex obligations. For instance, an
-object may borrow a pointer for longer than the duration of a single function
-call, in which case the caller must ensure the lifetime extends accordingly.
-
-Memory errors are one of the most common and dangerous bugs in C and C++, so
-callers are encouraged to make use of tools such as
-[AddressSanitizer](https://clang.llvm.org/docs/AddressSanitizer.html) and
-higher-level languages.
-
-
-## Thread safety
-
-BoringSSL is internally aware of the platform threading library and calls into
-it as needed. Consult the API documentation for the threading guarantees of
-particular objects. In general, stateless reference-counted objects like `RSA`
-or `EVP_PKEY` which represent keys may typically be used from multiple threads
-simultaneously, provided no thread mutates the key.
diff --git a/src/AUTHORS b/src/AUTHORS
deleted file mode 100644
index f3e85c0..0000000
--- a/src/AUTHORS
+++ /dev/null
@@ -1,50 +0,0 @@
-# This is the list of BoringSSL's significant contributors.
-#
-# This does not necessarily list everyone who has contributed code,
-# especially since many employees of one corporation may be contributing.
-# To see the full list of contributors, see the revision history in
-# source control.
-Google LLC
-Brian Smith
-Apple Inc
-
-# Additionally, much of the code in BoringSSL is derived from code in the
-# OpenSSL project. We thank the OpenSSL project’s contributors for their
-# work. Some of these contributors are listed below. For the full list of
-# these contributors, see AUTHORS.md in OpenSSL and the revision history
-# in OpenSSL’s source control.
-OpenSSL Software Services, Inc.
-OpenSSL Software Foundation, Inc.
-Andy Polyakov
-Ben Laurie
-Ben Kaduk
-Bernd Edlinger
-Bodo Möller
-David Benjamin
-David von Oheimb
-Dmitry Belyavskiy (Дмитрий Белявский)
-Emilia Käsper
-Eric Young
-Geoff Thorpe
-Holger Reif
-Kurt Roeckx
-Lutz Jänicke
-Mark J. Cox
-Matt Caswell
-Matthias St. Pierre
-Nicola Tuveri
-Nils Larsch
-Patrick Steuer
-Paul Dale
-Paul C. Sutton
-Paul Yang
-Ralf S. Engelschall
-Rich Salz
-Richard Levitte
-Shane Lontis
-Stephen Henson
-Steve Marquess
-Tim Hudson
-Tomáš Mráz
-Ulf Möller
-Viktor Dukhovni
diff --git a/src/BREAKING-CHANGES.md b/src/BREAKING-CHANGES.md
deleted file mode 100644
index 1bf6233..0000000
--- a/src/BREAKING-CHANGES.md
+++ /dev/null
@@ -1,88 +0,0 @@
-# How to change BoringSSL's API
-
-BoringSSL has more flexibility in changing things than many other library projects because we have a reasonable idea of who our users are. Still, breaking changes require some care. We depend on tight feedback loops with our consumers so that we can learn about mistakes and fix them. For that to work, updating BoringSSL must be smooth.
-
-Ultimately, the strategy for each breaking change is decided on a case-by-case basis. This document provides guidelines and techniques to help with a smooth transition.
-
-## Breakage risk
-
-Traditionally, breaking changes are defined in terms of API or ABI surface. Exposed symbols and type signatures cannot change, etc. But this is a poor approximation of the true impact. Removing an API may not a breaking change if no one is using it. Conversely, [Hyrum's Law](http://www.hyrumslaw.com/) applies. Fixing a bug may be a breaking change for some consumer which was depending on that bug.
-
-Thus, we do not think about whether a change is formally a breaking change, but about the *risk* of it breaking someone.
-
-Some changes, such as internal cleanups or bug-fixes, are low risk and do not need special measures. Any problems can be handled when the affected consumer updates BoringSSL and notices.
-
-Other changes, such as removing an API, forbidding some edge case, or adjusting some behavior, are more likely to break things. To help the consumer triage any resulting failures, include some text in the commit message, prefixed by `Update-Note: `. This can include what this change may break and instructions on how to fix the issue.
-
-## Code Search
-
-The vast majority of BoringSSL consumers are conveniently indexed in various Code Search instances. This can predict the impact of a risky change and identify code to fix ahead of time. The document &ldquo;How to Code Search&rdquo; in the (Google-only) [go/boringssl-folder](https://goto.google.com/boringssl-folder) includes notes on this.
-
-## Evaluate a change's cost
-
-If some change has high cost (from having to fix consumers) and relatively little benefit to BoringSSL, it may not be worth the trouble. For instance, it is likely not worth removing a small compatibility function in the corner of the library that is easily dropped by the static linker.
-
-Conversely, a change that leads to a major improvement to all BoringSSL consumers, at the cost of fixing one or two consumers, is typically worth it.
-
-## Fixing consumers
-
-If code search reveals call sites that are definitely going to break, prefer to handle these before making the change. While unexpected breakage is always possible, we generally consider it the responsibility of the developer or group making a change to handle impact of that change. Teams are generally unhappy to be surprised by new migration work but happy to have migration work done for them.
-
-In most cases, this is straightforward:
-
-1. Add the replacement API.
-2. As the replacement API enters each consuming repository, migrate callers to it.
-3. Remove the original API once all consumers have been migrated.
-
-The removal should still include an `Update-Note` tag, in case some were missed.
-
-In some cases, this kind of staged approach is not feasible: perhaps the same code cannot simultaneously work before and after the change, or perhaps there are too many different versions in play. For instance, [Conscrypt](https://github.com/google/conscrypt) feeds into three different repositories. The GitHub repository consumes BoringSSL's `main` branch directly. It is pushed into Android, where it consumes Android's `external/boringssl`. Yet another copy is pushed into the internal repository, where it consumes that copy of BoringSSL. As each of these Conscrypts are updated independently from their corresponding BoringSSLs, Conscrypt upstream cannot rely on a new BoringSSL API until it is present in all copies of BoringSSL its downstreams rely on.
-
-In that case, a multi-sided change may be more appropriate:
-
-1. Upload the breaking change to Gerrit, but do not submit it yet. Increment the `BORINGSSL_API_VERSION` symbol.
-2. Update the consuming repository with `#if BORINGSSL_API_VERSION < N` preprocessor logic. Leave a comment to remove this later, linking to your BoringSSL change.
-3. When the `BORINGSSL_API_VERSION` check has propagated to relevant copies of the consuming repository, submit the BoringSSL change.
-4. When the BoringSSL change has propagated to relevant copies of BoringSSL, remove the staging logic from the consumer.
-
-Finally, in some cases, the consumer's change may be committed atomically with the BoringSSL update. This can only be done for code which only consumes one instance of BoringSSL (so the Conscrypt example above is not eligible). Check with that project's maintainer first or, better, be that project's maintainer.
-
-If more complex changes are needed in some consumer, communicate with the relevant maintainers to plan the transition.
-
-## Fail early, fail closed
-
-When breaking changes do occur, they should fail as early and as detectably as possible.
-
-Ideally, problematic consumers fail to compile. Prefer to remove functions completely over leaving an always failing stub function. Sometimes this is not possible due to other consumers, particularly bindings libraries. Alternatively, if a stub function can be reasonably justified as still satisfying the API constraints, consider adding one to improve compatibility. For example, BoringSSL has many no-op stubs corresponding to OpenSSL's many initialization functions.
-
-If some parameter now must be `NULL`, change the type to an opaque struct pointer. Consumers passing non-`NULL` pointers will then fail to compile.
-
-If breaking the compile is not feasible, break at runtime, in the hope that consumers have some amount of test coverage. When doing so, try to fail on the common case. In particular, do not rely on consumers adequately testing or even checking for failure cases. One strategy is to bring the object into a &ldquo;poison&rdquo; state: if an illegal operation occurs, set a flag to fail all subsequent ones.
-
-In other functions, it may be appropriate to simply call `abort()`.
-
-## Unexpected breakage
-
-While we try to avoid breaking things, sometimes things unexpectedly break. Depending on the impact, we may fix the consumer, make a small fix to BoringSSL, or revert the change to either try again later or revise the approach.
-
-If we do not ultimately fix the consumer, add a test in BoringSSL to capture the unexpected API contract, so future regressions are caught quickly.
-
-## Canary changes and bake time
-
-When planning a large project that depends on a breaking change, prefer to make the breaking change first&mdash;before committing larger changes. Or, when changing toolchain or language requirements, add a small instance of the dependency somewhere first then wait a couple of weeks for the change to appear in consumers. This ensures that reverting the change is still feasible if necessary.
-
-While we rely on a tight feedback loop with our consumers, there are a few consumers which update less frequently. For extremely risky changes, such as introducing C++ to a target, it may be prudent to wait much longer.
-
-## Third-party code
-
-In many cases, we are interested in changing behavior which came from OpenSSL. OpenSSL's API surface is huge, but only a small subset is actually used. So we can and occasionally do change these behaviors. This is more complex than changing BoringSSL-only behavior due to third-party code.
-
-We use BoringSSL with many third-party projects that normally use OpenSSL. Generally, we consider this our burden to make this work and do not encourage external projects to depend on BoringSSL. While we can and do maintain patches for this as necessary, it has overhead and so the cost of breaking third-party code is higher.
-
-We lean fairly strongly towards making changes to BoringSSL over patching third-party code, unless the third-party change fixes a security problem.
-
-Additionally, changing an OpenSSL API will not only affect third-party code we use today, but also any third-party code we use in the future. Thus Code Search is less useful as an absolute predictor, and the various other considerations in this document are more important.
-
-If the patch to support a BoringSSL change can be generally useful to the third-party project, send it upstream. For instance, it may use the APIs better, clean up code, or help support newer versions of OpenSSL. In general, we try to target compatibility with &ldquo;most&rdquo; &ldquo;well-behaved&rdquo; OpenSSL consumers.
-
-Finally, if some particular OpenSSL API or pattern is problematic to BoringSSL, it is likely problematic to OpenSSL too. Consider filing a bug with them to suggest a change, either in new code going forward or for the next API break. OpenSSL's release cycles and feedback loops are much longer than BoringSSL's, so this is usually not immediately useful, but it keeps the ecosystem moving in the right direction.
diff --git a/src/BUILD.bazel b/src/BUILD.bazel
deleted file mode 100644
index b7dc359..0000000
--- a/src/BUILD.bazel
+++ /dev/null
@@ -1,201 +0,0 @@
-# Copyright 2024 The BoringSSL Authors
-#
-# 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
-#
-#     https://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.
-
-load("@rules_license//rules:license.bzl", "license")
-load(
-    ":gen/sources.bzl",
-    "bcm_internal_headers",
-    "bcm_sources",
-    "bcm_sources_asm",
-    "bssl_internal_headers",
-    "bssl_sources",
-    "crypto_headers",
-    "crypto_internal_headers",
-    "crypto_sources",
-    "crypto_sources_asm",
-    "crypto_test_data",
-    "crypto_test_sources",
-    "decrepit_internal_headers",
-    "decrepit_sources",
-    "decrepit_test_sources",
-    "pki_headers",
-    "pki_internal_headers",
-    "pki_sources",
-    "pki_test_data",
-    "pki_test_sources",
-    "ssl_headers",
-    "ssl_internal_headers",
-    "ssl_sources",
-    "ssl_test_sources",
-    "test_support_internal_headers",
-    "test_support_sources",
-    "test_support_sources_asm",
-    "urandom_test_sources",
-)
-load(":util/util.bzl", "bssl_cc_binary", "bssl_cc_library", "bssl_cc_test")
-
-package(
-    default_applicable_licenses = [":license"],
-    # Disable the parse_headers feature. It does not work well in C right now.
-    # See https://github.com/bazelbuild/bazel/issues/23460 for details. When
-    # that is fixed, if enabled, we likely also need to rename some headers to
-    # .inc per
-    # https://google.github.io/styleguide/cppguide.html#Self_contained_Headers
-    features = ["-parse_headers"],
-)
-
-license(
-    name = "license",
-    package_name = "BoringSSL",
-    license_kinds = [
-        "@rules_license//licenses/spdx:Apache-2.0",
-    ],
-    license_text = "LICENSE",
-)
-
-exports_files(["LICENSE"])
-
-bssl_cc_library(
-    name = "crypto",
-    srcs = bcm_sources + crypto_sources,
-    hdrs = crypto_headers,
-    asm_srcs = bcm_sources_asm + crypto_sources_asm,
-    copts = ["-DBORINGSSL_IMPLEMENTATION"],
-    includes = ["include"],
-    internal_hdrs = bcm_internal_headers + crypto_internal_headers,
-    linkopts = select({
-        "@platforms//os:windows": [
-            "-defaultlib:advapi32.lib",
-            "-defaultlib:ws2_32.lib",
-        ],
-        "//conditions:default": ["-pthread"],
-    }),
-    visibility = ["//visibility:public"],
-)
-
-bssl_cc_library(
-    name = "ssl",
-    srcs = ssl_sources,
-    hdrs = ssl_headers,
-    copts = ["-DBORINGSSL_IMPLEMENTATION"],
-    internal_hdrs = ssl_internal_headers,
-    visibility = ["//visibility:public"],
-    deps = [":crypto_internal"],
-)
-
-bssl_cc_library(
-    name = "test_support",
-    testonly = True,
-    srcs = test_support_sources,
-    asm_srcs = test_support_sources_asm,
-    copts = ["-DBORINGSSL_USE_BAZEL_RUNFILES"],
-    internal_hdrs = test_support_internal_headers,
-    deps = [
-        ":crypto_internal",
-        "@bazel_tools//tools/cpp/runfiles",
-        "@googletest//:gtest",
-    ],
-)
-
-bssl_cc_test(
-    name = "crypto_test",
-    size = "large",
-    srcs = crypto_test_sources,
-    data = crypto_test_data,
-    # crypto_test references assembly symbols directly and thus must be linked
-    # statically.
-    linkstatic = True,
-    shard_count = 32,
-    deps = [
-        ":crypto_internal",
-        ":test_support",
-        "@googletest//:gtest",
-    ],
-)
-
-bssl_cc_test(
-    name = "urandom_test",
-    srcs = urandom_test_sources,
-    deps = [
-        ":crypto_internal",
-        ":test_support",
-        "@googletest//:gtest",
-    ],
-)
-
-bssl_cc_test(
-    name = "ssl_test",
-    srcs = ssl_test_sources,
-    deps = [
-        ":crypto_internal",
-        ":ssl_internal",
-        ":test_support",
-        "@googletest//:gtest",
-    ],
-)
-
-bssl_cc_binary(
-    name = "bssl",
-    srcs = bssl_sources + bssl_internal_headers,
-    visibility = ["//visibility:public"],
-    deps = [
-        ":crypto_internal",
-        ":ssl_internal",
-    ],
-)
-
-# Build, but do not export libdecrepit.
-bssl_cc_library(
-    name = "decrepit",
-    srcs = decrepit_sources,
-    copts = ["-DBORINGSSL_IMPLEMENTATION"],
-    internal_hdrs = decrepit_internal_headers,
-    deps = [
-        ":crypto_internal",
-        ":ssl_internal",
-    ],
-)
-
-bssl_cc_test(
-    name = "decrepit_test",
-    srcs = decrepit_test_sources,
-    deps = [
-        ":crypto_internal",
-        ":decrepit",
-        ":test_support",
-        "@googletest//:gtest",
-    ],
-)
-
-# Build, but do not (yet) export libpki.
-bssl_cc_library(
-    name = "pki",
-    srcs = pki_sources,
-    hdrs = pki_headers,
-    copts = ["-DBORINGSSL_IMPLEMENTATION"],
-    internal_hdrs = pki_internal_headers,
-    deps = [":crypto"],
-)
-
-bssl_cc_test(
-    name = "pki_test",
-    srcs = pki_test_sources,
-    data = pki_test_data,
-    deps = [
-        ":crypto_internal",
-        ":pki",
-        ":test_support",
-        "@googletest//:gtest",
-    ],
-)
diff --git a/src/BUILDING.md b/src/BUILDING.md
deleted file mode 100644
index e7e7f0e..0000000
--- a/src/BUILDING.md
+++ /dev/null
@@ -1,221 +0,0 @@
-# Building BoringSSL
-
-## Checking out BoringSSL
-
-    git clone "https://boringssl.googlesource.com/boringssl"
-
-## Build Prerequisites
-
-The standalone CMake build is primarily intended for developers. If embedding
-BoringSSL into another project with a pre-existing build system, see
-[INCORPORATING.md](./INCORPORATING.md).
-
-Unless otherwise noted, build tools must at most five years old, matching
-[Abseil guidelines](https://abseil.io/about/compatibility). If in doubt, use the
-most recent stable version of each tool.
-
-  * [CMake](https://cmake.org/download/) 3.12 or later is required.
-
-  * Building with [Ninja](https://ninja-build.org/) instead of Make is
-    recommended, because it makes builds faster. On Windows, CMake's Visual
-    Studio generator may also work, but it not tested regularly and requires
-    recent versions of CMake for assembly support.
-
-  * On Windows only, [NASM](https://www.nasm.us/) is required. If not found
-    by CMake, it may be configured explicitly by setting
-    `CMAKE_ASM_NASM_COMPILER`.
-
-  * Compilers for C11 and C++17, or later, are required. On Windows, MSVC from
-    Visual Studio 2022 or later with Windows 10 SDK 2104 or later are
-    supported, but using the latest versions is recommended. Recent versions of
-    GCC (6.1+) and Clang should work on non-Windows platforms, and maybe on
-    Windows too.
-
-## Building
-
-Using Ninja (note the 'N' is capitalized in the cmake invocation):
-
-    cmake -GNinja -B build
-    ninja -C build
-
-Using Make (does not work on Windows):
-
-    cmake -B build
-    make -C build
-
-This produces a debug build by default. Optimisation isn't enabled, and debug
-assertions are included. Pass `-DCMAKE_BUILD_TYPE=Release` to `cmake` to
-configure a release build:
-
-    cmake -GNinja -B build -DCMAKE_BUILD_TYPE=Release
-    ninja -C build
-
-If you want to cross-compile then there is an example toolchain file for 32-bit
-Intel in `util/`. Wipe out the build directory, run `cmake` like this:
-
-    cmake -B build -DCMAKE_TOOLCHAIN_FILE=../util/32-bit-toolchain.cmake -GNinja
-
-If you want to build as a shared library, pass `-DBUILD_SHARED_LIBS=1`. On
-Windows, where functions need to be tagged with `dllimport` when coming from a
-shared library, define `BORINGSSL_SHARED_LIBRARY` in any code which `#include`s
-the BoringSSL headers.
-
-In order to serve environments where code-size is important as well as those
-where performance is the overriding concern, `OPENSSL_SMALL` can be defined to
-remove some code that is especially large.
-
-See [CMake's documentation](https://cmake.org/cmake/help/v3.4/manual/cmake-variables.7.html)
-for other variables which may be used to configure the build.
-
-You usually don't need to run `cmake` again after changing `CMakeLists.txt`
-files because the build scripts will detect changes to them and rebuild
-themselves automatically.
-
-### Building for Android
-
-It's possible to build BoringSSL with the Android NDK using CMake. Recent
-versions of the NDK include a CMake toolchain file which works with CMake 3.6.0
-or later. This has been tested with version r16b of the NDK.
-
-Unpack the Android NDK somewhere and export `ANDROID_NDK` to point to the
-directory. Then run CMake like this:
-
-    cmake -DANDROID_ABI=armeabi-v7a \
-          -DANDROID_PLATFORM=android-19 \
-          -DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK}/build/cmake/android.toolchain.cmake \
-          -GNinja -B build
-
-Once you've run that, Ninja should produce Android-compatible binaries.  You
-can replace `armeabi-v7a` in the above with `arm64-v8a` and use API level 21 or
-higher to build aarch64 binaries.
-
-For other options, see the documentation in the toolchain file.
-
-To debug the resulting binaries on an Android device with `gdb`, run the
-commands below. Replace `ARCH` with the architecture of the target device, e.g.
-`arm` or `arm64`.
-
-    adb push ${ANDROID_NDK}/prebuilt/android-ARCH/gdbserver/gdbserver \
-        /data/local/tmp
-    adb forward tcp:5039 tcp:5039
-    adb shell /data/local/tmp/gdbserver :5039 /path/on/device/to/binary
-
-Then run the following in a separate shell. Replace `HOST` with the OS and
-architecture of the host machine, e.g. `linux-x86_64`.
-
-    ${ANDROID_NDK}/prebuilt/HOST/bin/gdb
-    target remote :5039  # in gdb
-
-### Building for iOS
-
-To build for iOS, pass `-DCMAKE_OSX_SYSROOT=iphoneos` and
-`-DCMAKE_OSX_ARCHITECTURES=ARCH` to CMake, where `ARCH` is the desired
-architecture, matching values used in the `-arch` flag in Apple's toolchain.
-
-Passing multiple architectures for a multiple-architecture build is not
-supported.
-
-### Building with Prefixed Symbols
-
-BoringSSL's build system has experimental support for adding a custom prefix to
-all symbols. This can be useful when linking multiple versions of BoringSSL in
-the same project to avoid symbol conflicts. Symbol prefixing requires the most
-recent stable version of [Go](https://go.dev/).
-
-In order to build with prefixed symbols, the `BORINGSSL_PREFIX` CMake variable
-should specify the prefix to add to all symbols, and the
-`BORINGSSL_PREFIX_SYMBOLS` CMake variable should specify the path to a file
-which contains a list of symbols which should be prefixed (one per line;
-comments are supported with `#`). In other words, `cmake -B build
--DBORINGSSL_PREFIX=MY_CUSTOM_PREFIX
--DBORINGSSL_PREFIX_SYMBOLS=/path/to/symbols.txt` will configure the build to add
-the prefix `MY_CUSTOM_PREFIX` to all of the symbols listed in
-`/path/to/symbols.txt`.
-
-It is currently the caller's responsibility to create and maintain the list of
-symbols to be prefixed. Alternatively, `util/read_symbols.go` reads the list of
-exported symbols from a `.a` file, and can be used in a build script to generate
-the symbol list on the fly (by building without prefixing, using
-`read_symbols.go` to construct a symbol list, and then building again with
-prefixing).
-
-This mechanism is under development and may change over time. Please contact the
-BoringSSL maintainers if making use of it.
-
-## Known Limitations on Windows
-
-  * CMake can generate Visual Studio projects, but the generated project files
-    don't have steps for assembling the assembly language source files, so they
-    currently cannot be used to build BoringSSL.
-
-## ARM CPU Capabilities
-
-ARM, unlike Intel, does not have a userspace instruction that allows
-applications to discover the capabilities of the processor. Instead, the
-capability information has to be provided by a combination of compile-time
-information and the operating system.
-
-BoringSSL determines capabilities at compile-time based on `__ARM_NEON`,
-`__ARM_FEATURE_AES`, and other preprocessor symbols defined in
-[Arm C Language Extensions (ACLE)](https://developer.arm.com/architectures/system-architectures/software-standards/acle).
-These values are usually controlled by the `-march` flag. You can also define
-any of the following to enable the corresponding ARM feature, but using the ACLE
-symbols via `-march` is recommended.
-
-  * `OPENSSL_STATIC_ARMCAP_NEON`
-  * `OPENSSL_STATIC_ARMCAP_AES`
-  * `OPENSSL_STATIC_ARMCAP_SHA1`
-  * `OPENSSL_STATIC_ARMCAP_SHA256`
-  * `OPENSSL_STATIC_ARMCAP_PMULL`
-
-The resulting binary will assume all such features are always present. This can
-reduce code size, by allowing the compiler to omit fallbacks. However, if the
-feature is not actually supported at runtime, BoringSSL will likely crash.
-
-BoringSSL will additionally query the operating system at runtime for additional
-features, e.g. with `getauxval` on Linux. This allows a single binary to use
-newer instructions when present, but still function on CPUs without them. But
-some environments don't support runtime queries. If building for those, define
-`OPENSSL_STATIC_ARMCAP` to limit BoringSSL to compile-time capabilities. If not
-defined, the target operating system must be known to BoringSSL.
-
-## Binary Size
-
-The implementations of some algorithms require a trade-off between binary size
-and performance. For instance, BoringSSL's fastest P-256 implementation uses a
-148 KiB pre-computed table. To optimize instead for binary size, pass
-`-DOPENSSL_SMALL=1` to CMake or define the `OPENSSL_SMALL` preprocessor symbol.
-
-# Running Tests
-
-There are two additional dependencies for running tests:
-
-  * The most recent stable version of [Go](https://go.dev/) is required.
-    Note Go is exempt from the five year support window. If not found by CMake,
-    the go executable may be configured explicitly by setting `GO_EXECUTABLE`.
-
-  * On x86_64 Linux, the tests have an optional
-    [libunwind](https://www.nongnu.org/libunwind/) dependency to test the
-    assembly more thoroughly.
-
-There are two sets of tests: the C/C++ tests and the blackbox tests. For former
-are built by Ninja and can be run from the top-level directory with `go run
-util/all_tests.go`. The latter have to be run separately by running `go test`
-from within `ssl/test/runner`.
-
-Both sets of tests may also be run with `ninja -C build run_tests`, but CMake
-3.2 or later is required to avoid Ninja's output buffering.
-
-# Pre-generated Files
-
-If modifying perlasm files, or `util/pregenerate/build.json`, you will need to
-run `go run ./util/pregenerate` to refresh some pre-generated files. To do this,
-you will need a recent version of Perl.
-
-On Windows, [Active State Perl](http://www.activestate.com/activeperl/) has been
-reported to work, as has MSYS Perl.
-[Strawberry Perl](http://strawberryperl.com/) also works but it adds GCC
-to `PATH`, which can confuse some build tools when identifying the compiler
-(removing `C:\Strawberry\c\bin` from `PATH` should resolve any problems).
-
-See (gen/README.md)[./gen/README.md] for more details.
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
deleted file mode 100644
index 4211db0..0000000
--- a/src/CMakeLists.txt
+++ /dev/null
@@ -1,811 +0,0 @@
-# Copyright 2014 The BoringSSL Authors
-#
-# 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
-#
-#     https://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.
-
-cmake_minimum_required(VERSION 3.16)
-
-# Defer enabling C and CXX languages.
-project(BoringSSL NONE)
-
-# Don't install BoringSSL to system directories by default; it has no stable
-# ABI. Instead, default to an "install" directory under the source.
-if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
-  set(CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/install CACHE PATH "" FORCE)
-endif()
-
-if(WIN32)
-  # On Windows, prefer cl over gcc if both are available. By default most of
-  # the CMake generators prefer gcc, even on Windows.
-  set(CMAKE_GENERATOR_CC cl)
-endif()
-
-include(cmake/go.cmake)
-include(cmake/paths.cmake)
-include(gen/sources.cmake)
-
-enable_language(C)
-enable_language(CXX)
-
-# TODO(crbug,com/389897612): Register tests with CTest. For now, we include this
-# only to pick up the standard |BUILD_TESTING| option.
-include(CTest)
-include(GNUInstallDirs)
-
-set(INSTALL_ENABLED 1)
-
-if(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND NOT CMAKE_CROSSCOMPILING)
-  find_package(PkgConfig QUIET)
-  if (PkgConfig_FOUND)
-    pkg_check_modules(LIBUNWIND libunwind-generic>=1.3.0)
-    if(LIBUNWIND_FOUND)
-      add_definitions(-DBORINGSSL_HAVE_LIBUNWIND)
-    else()
-      message("libunwind not found. Disabling unwind tests.")
-    endif()
-  else()
-    message("pkgconfig not found. Disabling unwind tests.")
-  endif()
-endif()
-
-string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_LOWER)
-if(NOT FIPS)
-  if(CMAKE_BUILD_TYPE_LOWER STREQUAL "relwithassert" OR
-     NOT CMAKE_BUILD_TYPE_LOWER MATCHES "rel")
-    add_definitions(-DBORINGSSL_DISPATCH_TEST)
-    # CMake automatically connects include_directories to the NASM
-    # command-line, but not add_definitions.
-    set(CMAKE_ASM_NASM_FLAGS "${CMAKE_ASM_NASM_FLAGS} -DBORINGSSL_DISPATCH_TEST")
-  endif()
-endif()
-
-# Add a RelWithAsserts build configuration. It is the same as Release, except it
-# does not define NDEBUG, so asserts run.
-foreach(VAR CMAKE_C_FLAGS CMAKE_CXX_FLAGS CMAKE_ASM_FLAGS)
-  string(REGEX REPLACE "(^| )[/-]DNDEBUG( |$)" " " "${VAR}_RELWITHASSERTS"
-         "${${VAR}_RELEASE}")
-endforeach()
-
-if(BORINGSSL_PREFIX AND BORINGSSL_PREFIX_SYMBOLS)
-  require_go()
-  add_definitions(-DBORINGSSL_PREFIX=${BORINGSSL_PREFIX})
-  # CMake automatically connects include_directories to the NASM command-line,
-  # but not add_definitions.
-  set(CMAKE_ASM_NASM_FLAGS "${CMAKE_ASM_NASM_FLAGS} -DBORINGSSL_PREFIX=${BORINGSSL_PREFIX}")
-
-  # Use "symbol_prefix_include" to store generated header files
-  include_directories(${CMAKE_CURRENT_BINARY_DIR}/symbol_prefix_include)
-  add_custom_command(
-    OUTPUT symbol_prefix_include/boringssl_prefix_symbols.h
-           symbol_prefix_include/boringssl_prefix_symbols_asm.h
-           symbol_prefix_include/boringssl_prefix_symbols_nasm.inc
-    COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/symbol_prefix_include
-    COMMAND ${GO_EXECUTABLE} run ${CMAKE_CURRENT_SOURCE_DIR}/util/make_prefix_headers.go -out ${CMAKE_CURRENT_BINARY_DIR}/symbol_prefix_include ${BORINGSSL_PREFIX_SYMBOLS}
-    DEPENDS util/make_prefix_headers.go
-            ${BORINGSSL_PREFIX_SYMBOLS})
-
-  # add_dependencies needs a target, not a file, so we add an intermediate
-  # target.
-  add_custom_target(
-    boringssl_prefix_symbols
-    DEPENDS symbol_prefix_include/boringssl_prefix_symbols.h
-            symbol_prefix_include/boringssl_prefix_symbols_asm.h
-            symbol_prefix_include/boringssl_prefix_symbols_nasm.inc)
-elseif(BORINGSSL_PREFIX OR BORINGSSL_PREFIX_SYMBOLS)
-  message(FATAL_ERROR "Must specify both or neither of BORINGSSL_PREFIX and BORINGSSL_PREFIX_SYMBOLS")
-else()
-  add_custom_target(boringssl_prefix_symbols)
-endif()
-
-if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
-  set(CLANG 1)
-endif()
-
-if(CMAKE_SYSTEM_NAME STREQUAL "Emscripten")
-  set(EMSCRIPTEN 1)
-endif()
-
-set(CMAKE_CXX_STANDARD 17)
-set(CMAKE_CXX_STANDARD_REQUIRED ON)
-set(CMAKE_C_STANDARD 11)
-set(CMAKE_C_STANDARD_REQUIRED ON)
-
-if(CMAKE_COMPILER_IS_GNUCXX OR CLANG)
-  # Note clang-cl is odd and sets both CLANG and MSVC. We base our configuration
-  # primarily on our normal Clang one.
-  set(C_CXX_FLAGS "-Werror -Wformat=2 -Wsign-compare -Wwrite-strings -Wvla -Wshadow -Wtype-limits -Wmissing-field-initializers")
-  if(MSVC)
-    # clang-cl sets different default warnings than clang. It also treats -Wall
-    # as -Weverything, to match MSVC. Instead -W3 is the alias for -Wall.
-    # See http://llvm.org/viewvc/llvm-project?view=revision&revision=319116
-    set(C_CXX_FLAGS "${C_CXX_FLAGS} -W3 -Wno-unused-parameter -fmsc-version=1900")
-  else()
-    if(EMSCRIPTEN)
-      # emscripten's emcc/clang does not accept the "-ggdb" flag.
-      set(C_CXX_FLAGS "${C_CXX_FLAGS} -g")
-    else()
-      set(C_CXX_FLAGS "${C_CXX_FLAGS} -ggdb")
-    endif()
-
-    set(C_CXX_FLAGS "${C_CXX_FLAGS} -Wall -fvisibility=hidden -fno-common")
-  endif()
-
-  if(CLANG)
-    set(C_CXX_FLAGS "${C_CXX_FLAGS} -Wnewline-eof -Wextra-semi -fcolor-diagnostics")
-  else()
-    # GCC (at least 4.8.4) has a bug where it'll find unreachable free() calls
-    # and declare that the code is trying to free a stack pointer.
-    set(C_CXX_FLAGS "${C_CXX_FLAGS} -Wno-free-nonheap-object")
-  endif()
-
-  # -Wstring-concatenation was added in Clang 12.0.0, which corresponds to
-  # AppleClang 13.0.0 per the table in
-  # https://en.wikipedia.org/wiki/Xcode#Toolchain_versions
-  if((CMAKE_C_COMPILER_ID STREQUAL "Clang" AND
-      CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL "12.0.0") OR
-     (CMAKE_C_COMPILER_ID STREQUAL "AppleClang" AND
-      CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL "13.0.0"))
-    set(C_CXX_FLAGS "${C_CXX_FLAGS} -Wstring-concatenation")
-  endif()
-
-  # Clang 12's -Wframe-larger-than reportedly does not work in clang-cl. See
-  # https://crbug.com/boringssl/709. Clang 13 includes the following fix, which
-  # may be related. Speculatively gate on Clang 13. That corresponds to
-  # AppleClang 13.1.6.
-  # https://github.com/llvm/llvm-project/commit/6aaf4fa2885600b0e31042071ad06f78218ab0f2
-  if((CMAKE_C_COMPILER_ID STREQUAL "Clang" AND
-      CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL "13.0.0") OR
-     (CMAKE_C_COMPILER_ID STREQUAL "AppleClang" AND
-      CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL "13.1.6"))
-    set(C_CXX_FLAGS "${C_CXX_FLAGS} -Wframe-larger-than=25344")
-  endif()
-
-  # -Wctad-maybe-unsupported was added in Clang 10, which is AppleClang 12.0.0.
-  if((CMAKE_C_COMPILER_ID STREQUAL "Clang" AND
-      CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL "10.0.0") OR
-     (CMAKE_C_COMPILER_ID STREQUAL "AppleClang" AND
-      CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL "12.0.0"))
-    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wctad-maybe-unsupported")
-  endif()
-
-  if(CLANG OR CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL "7.0.0")
-    set(C_CXX_FLAGS "${C_CXX_FLAGS} -Wimplicit-fallthrough")
-  endif()
-
-  if(CMAKE_COMPILER_IS_GNUCXX)
-    set(C_CXX_FLAGS "${C_CXX_FLAGS} -Wformat-signedness")
-  endif()
-
-  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${C_CXX_FLAGS} -Wmissing-prototypes -Wold-style-definition -Wstrict-prototypes")
-  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${C_CXX_FLAGS} -Wmissing-declarations -Wnon-virtual-dtor")
-
-  # In GCC, -Wmissing-declarations is the C++ spelling of -Wmissing-prototypes
-  # and using the wrong one is an error. In Clang, -Wmissing-prototypes is the
-  # spelling for both and -Wmissing-declarations is some other warning.
-  #
-  # https://gcc.gnu.org/onlinedocs/gcc-7.1.0/gcc/Warning-Options.html#Warning-Options
-  # https://clang.llvm.org/docs/DiagnosticsReference.html#wmissing-prototypes
-  # https://clang.llvm.org/docs/DiagnosticsReference.html#wmissing-declarations
-  if(CLANG)
-    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wmissing-prototypes")
-  endif()
-elseif(MSVC)
-  set(MSVC_DISABLED_WARNINGS_LIST
-      "C4100" # 'exarg' : unreferenced formal parameter
-      "C4127" # conditional expression is constant
-      "C4244" # 'function' : conversion from 'int' to 'uint8_t',
-              # possible loss of data
-      "C4267" # conversion from 'size_t' to 'int', possible loss of data
-      "C4702" # unreachable code; MSVC's warning is too aggressive. See
-              # https://crbug.com/385161043
-      "C4706" # assignment within conditional expression
-      )
-  string(REPLACE "C" " -wd" MSVC_DISABLED_WARNINGS_STR
-                            ${MSVC_DISABLED_WARNINGS_LIST})
-  set(CMAKE_C_FLAGS   "-utf-8 -W4 -WX ${MSVC_DISABLED_WARNINGS_STR}")
-  # Without /Zc:__cplusplus, MSVC does not define the right value for
-  # __cplusplus. See https://devblogs.microsoft.com/cppblog/msvc-now-correctly-reports-__cplusplus/
-  # If this becomes too problematic for downstream code, we can look at
-  # _MSVC_LANG.
-  set(CMAKE_CXX_FLAGS "-utf-8 -W4 -WX ${MSVC_DISABLED_WARNINGS_STR} -Zc:__cplusplus")
-endif()
-
-if(WIN32)
-  add_definitions(-D_HAS_EXCEPTIONS=0)
-  add_definitions(-DWIN32_LEAN_AND_MEAN)
-  add_definitions(-DNOMINMAX)
-  # Allow use of fopen.
-  add_definitions(-D_CRT_SECURE_NO_WARNINGS)
-endif()
-
-# pthread_rwlock_t on Linux requires a feature flag. We limit this to Linux
-# because, on Apple platforms, it instead disables APIs we use. See compat(5)
-# and sys/cdefs.h. Reportedly, FreeBSD also breaks when this is set. See
-# https://crbug.com/boringssl/471.
-if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
-  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_XOPEN_SOURCE=700")
-endif()
-
-if(FUZZ)
-  if(NOT CLANG)
-    message(FATAL_ERROR "You need to build with Clang for fuzzing to work")
-  endif()
-
-  if(CMAKE_C_COMPILER_VERSION VERSION_LESS "6.0.0")
-    message(FATAL_ERROR "You need Clang ≥ 6.0.0")
-  endif()
-
-  add_definitions(-DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION)
-  set(RUNNER_ARGS "-deterministic" "-fuzzer" "-shim-config" "fuzzer_mode.json")
-
-  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address,fuzzer-no-link -fsanitize-coverage=edge,indirect-calls")
-  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address,fuzzer-no-link -fsanitize-coverage=edge,indirect-calls")
-endif()
-
-add_definitions(-DBORINGSSL_IMPLEMENTATION)
-
-if(BUILD_SHARED_LIBS)
-  add_definitions(-DBORINGSSL_SHARED_LIBRARY)
-  # Enable position-independent code globally. This is needed because
-  # some library targets are OBJECT libraries.
-  set(CMAKE_POSITION_INDEPENDENT_CODE TRUE)
-endif()
-
-if(MSAN)
-  if(NOT CLANG)
-    message(FATAL_ERROR "Cannot enable MSAN unless using Clang")
-  endif()
-
-  if(ASAN)
-    message(FATAL_ERROR "ASAN and MSAN are mutually exclusive")
-  endif()
-
-  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=memory -fsanitize-memory-track-origins -fno-omit-frame-pointer")
-  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=memory -fsanitize-memory-track-origins -fno-omit-frame-pointer")
-  set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -fsanitize=memory -fsanitize-memory-track-origins -fno-omit-frame-pointer")
-endif()
-
-if(ASAN)
-  if(NOT CLANG)
-    message(FATAL_ERROR "Cannot enable ASAN unless using Clang")
-  endif()
-
-  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fsanitize-address-use-after-scope -fno-omit-frame-pointer")
-  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fsanitize-address-use-after-scope -fno-omit-frame-pointer")
-endif()
-
-if(CFI)
-  if(NOT CLANG)
-    message(FATAL_ERROR "Cannot enable CFI unless using Clang")
-  endif()
-
-  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=cfi -fno-sanitize-trap=cfi -flto=thin")
-  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=cfi -fno-sanitize-trap=cfi -flto=thin")
-  # We use Chromium's copy of clang, which requires -fuse-ld=lld if building
-  # with -flto. That, in turn, can't handle -ggdb.
-  set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=lld")
-  string(REPLACE "-ggdb" "-g" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
-  string(REPLACE "-ggdb" "-g" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
-  # -flto causes object files to contain LLVM bitcode. Mixing those with
-  # assembly output in the same static library breaks the linker.
-  set(OPENSSL_NO_ASM "1")
-endif()
-
-if(TSAN)
-  if(NOT CLANG)
-    message(FATAL_ERROR "Cannot enable TSAN unless using Clang")
-  endif()
-
-  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=thread")
-  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=thread")
-  set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=thread")
-endif()
-
-if(UBSAN)
-  if(NOT CLANG)
-    message(FATAL_ERROR "Cannot enable UBSAN unless using Clang")
-  endif()
-
-  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=undefined")
-  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined")
-  set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=undefined")
-
-  if(NOT UBSAN_RECOVER)
-    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-sanitize-recover=undefined")
-    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-sanitize-recover=undefined")
-    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fno-sanitize-recover=undefined")
-  endif()
-endif()
-
-if(GCOV)
-  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-arcs -ftest-coverage")
-  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage")
-endif()
-
-if(FIPS)
-  require_go()
-  add_definitions(-DBORINGSSL_FIPS)
-  if(FIPS_BREAK_TEST)
-    add_definitions("-DBORINGSSL_FIPS_BREAK_${FIPS_BREAK_TEST}=1")
-  endif()
-  # The FIPS integrity check does not work for ASan and MSan builds.
-  if(NOT ASAN AND NOT MSAN)
-    if(BUILD_SHARED_LIBS)
-      set(FIPS_SHARED "1")
-    else()
-      set(FIPS_DELOCATE "1")
-    endif()
-  endif()
-  if(FIPS_SHARED)
-    # The Android CMake files set -ffunction-sections and -fdata-sections,
-    # which is incompatible with FIPS_SHARED.
-    set(CMAKE_C_FLAGS
-        "${CMAKE_C_FLAGS} -fno-function-sections -fno-data-sections")
-    set(CMAKE_CXX_FLAGS
-        "${CMAKE_CXX_FLAGS} -fno-function-sections -fno-data-sections")
-  endif()
-endif()
-
-if(OPENSSL_SMALL)
-  add_definitions(-DOPENSSL_SMALL)
-endif()
-
-if(CONSTANT_TIME_VALIDATION)
-  add_definitions(-DBORINGSSL_CONSTANT_TIME_VALIDATION)
-endif()
-
-if(MALLOC_FAILURE_TESTING)
-  add_definitions(-DBORINGSSL_MALLOC_FAILURE_TESTING)
-endif()
-
-if(OPENSSL_NO_ASM)
-  add_definitions(-DOPENSSL_NO_ASM)
-endif()
-
-if(FIPS_DELOCATE OR NOT OPENSSL_NO_ASM)
-  # On x86 and x86_64 Windows, we use the NASM output.
-  if(WIN32 AND CMAKE_SYSTEM_PROCESSOR MATCHES "AMD64|x86_64|amd64|x86|i[3-6]86")
-    enable_language(ASM_NASM)
-    set(OPENSSL_NASM TRUE)
-    set(CMAKE_ASM_NASM_FLAGS "${CMAKE_ASM_NASM_FLAGS} -gcv8")
-  else()
-    enable_language(ASM)
-    if (NOT OPENSSL_NO_ASM)
-      set(OPENSSL_ASM TRUE)
-    endif()
-    # Work around https://gitlab.kitware.com/cmake/cmake/-/issues/20771 in older
-    # CMake versions.
-    if(APPLE AND CMAKE_VERSION VERSION_LESS 3.19)
-      if(CMAKE_OSX_SYSROOT)
-        set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -isysroot \"${CMAKE_OSX_SYSROOT}\"")
-      endif()
-      foreach(arch ${CMAKE_OSX_ARCHITECTURES})
-        set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -arch ${arch}")
-      endforeach()
-    endif()
-    if(NOT WIN32)
-      set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -Wa,--noexecstack")
-    endif()
-    # Clang's integerated assembler does not support debug symbols.
-    if(NOT CMAKE_ASM_COMPILER_ID MATCHES "Clang")
-      set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -Wa,-g")
-    endif()
-  endif()
-endif()
-
-if(OPENSSL_NO_SSE2_FOR_TESTING)
-  add_definitions(-DOPENSSL_NO_SSE2_FOR_TESTING)
-endif()
-
-if(USE_CUSTOM_LIBCXX)
-  if(NOT CLANG)
-    message(FATAL_ERROR "USE_CUSTOM_LIBCXX only supported with Clang")
-  endif()
-
-  # CMake does not allow installing a library without installing dependencies.
-  # If we installed libcrypto, we'd have to install our custom libc++, which
-  # does not make sense. As this is a test-only configuration, disable
-  # installing.
-  set(INSTALL_ENABLED 0)
-
-  # CMAKE_CXX_FLAGS ends up in the linker flags as well, so use
-  # add_compile_options. There does not appear to be a way to set
-  # language-specific compile-only flags.
-  add_compile_options("-nostdinc++")
-  set(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} -nostdlib++")
-  include_directories(
-    SYSTEM
-    util/bot/libcxx-config
-    util/bot/libcxx/include
-    util/bot/libcxxabi/include
-  )
-
-  # This is patterned after buildtools/third_party/libc++/BUILD.gn and
-  # buildtools/third_party/libc++abi/BUILD.gn in Chromium.
-
-  file(GLOB LIBCXX_SOURCES "util/bot/libcxx/src/*.cpp")
-  file(GLOB LIBCXXABI_SOURCES "util/bot/libcxxabi/src/*.cpp")
-
-  # This file is meant for exception-less builds.
-  list(REMOVE_ITEM LIBCXXABI_SOURCES "trunk/src/cxa_noexception.cpp")
-  # libc++ also defines new and delete.
-  list(REMOVE_ITEM LIBCXXABI_SOURCES "trunk/src/stdlib_new_delete.cpp")
-  if(TSAN)
-    # ThreadSanitizer tries to intercept these symbols. Skip them to avoid
-    # symbol conflicts.
-    list(REMOVE_ITEM LIBCXXABI_SOURCES "trunk/src/cxa_guard.cpp")
-  endif()
-
-  add_library(libcxxabi ${LIBCXXABI_SOURCES})
-  target_compile_definitions(
-    libcxxabi PRIVATE
-    -D_LIBCPP_ENABLE_CXX17_REMOVED_UNEXPECTED_FUNCTIONS
-  )
-
-  add_library(libcxx ${LIBCXX_SOURCES})
-  if(ASAN OR MSAN OR TSAN)
-    # Sanitizers try to intercept new and delete.
-    target_compile_definitions(
-      libcxx PRIVATE
-      -D_LIBCPP_DISABLE_NEW_DELETE_DEFINITIONS
-    )
-  endif()
-  target_compile_definitions(
-    libcxx PRIVATE
-    -D_LIBCPP_BUILDING_LIBRARY
-    -DLIBCXX_BUILDING_LIBCXXABI
-    -DLIBC_NAMESPACE=bssl_llvm_libc
-  )
-  # LLVM libc++ depends on some shared headers from LLVM libc.
-  target_include_directories(libcxx PRIVATE util/bot/llvm-libc)
-  set_target_properties(
-    libcxx libcxxabi PROPERTIES
-    COMPILE_FLAGS "-Wno-missing-prototypes -Wno-implicit-fallthrough"
-    # libc++ and libc++abi must be built in C++23 mode.
-    CXX_STANDARD 23
-    CXX_STANDARD_REQUIRED TRUE
-  )
-  # libc++abi depends on libc++ internal headers.
-  set_property(TARGET libcxx libcxxabi APPEND PROPERTY INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/util/bot/libcxx/src")
-  target_link_libraries(libcxx libcxxabi)
-endif()
-
-if(BUILD_TESTING)
-  # Add minimal googletest targets. The provided one has many side-effects, and
-  # googletest has a very straightforward build.
-  add_library(
-    boringssl_gtest
-    third_party/googletest/googlemock/src/gmock-all.cc
-    third_party/googletest/googletest/src/gtest-all.cc
-  )
-  if(USE_CUSTOM_LIBCXX)
-    target_link_libraries(boringssl_gtest libcxx)
-  endif()
-  target_include_directories(
-      boringssl_gtest
-      PUBLIC
-      third_party/googletest/googlemock/include
-      third_party/googletest/googletest/include
-      PRIVATE
-      third_party/googletest/googlemock
-      third_party/googletest/googletest
-  )
-
-  # Declare a dummy target to build all unit tests. Test targets should inject
-  # themselves as dependencies next to the target definition.
-  add_custom_target(all_tests)
-
-  add_subdirectory(ssl/test)
-endif()
-
-if(OPENSSL_ASM)
-  set(CRYPTO_SOURCES_ASM_USED ${CRYPTO_SOURCES_ASM})
-  set(BCM_SOURCES_ASM_USED ${BCM_SOURCES_ASM})
-  set(TEST_SUPPORT_SOURCES_ASM_USED ${TEST_SUPPORT_SOURCES_ASM})
-elseif(OPENSSL_NASM)
-  set(CRYPTO_SOURCES_ASM_USED ${CRYPTO_SOURCES_NASM})
-  set(BCM_SOURCES_ASM_USED ${BCM_SOURCES_NASM})
-  set(TEST_SUPPORT_SOURCES_ASM_USED ${TEST_SUPPORT_SOURCES_NASM})
-endif()
-
-if(FIPS_DELOCATE AND FIPS_SHARED)
-  message(FATAL_ERROR "Can't set both delocate and shared mode for FIPS build")
-endif()
-
-# OSS-Fuzz relies on BORINGSSL_ALLOW_CXX_RUNTIME because -fno-rtti and
-# -fsanitize=vptr are incompatible.
-set(NO_CXX_RUNTIME_FLAGS)
-if(NOT MSVC AND NOT BORINGSSL_ALLOW_CXX_RUNTIME)
-  # Without -fno-exceptions, use of std::unique_ptr emits a call to
-  # std::terminate.
-  set(NO_CXX_RUNTIME_FLAGS -fno-exceptions -fno-rtti)
-endif()
-
-if(FIPS_DELOCATE)
-  add_library(bcm_c_generated_asm STATIC ${BCM_SOURCES})
-  # The C++ code in libcrypto shouldn't depend on libstdc++.
-  target_compile_options(bcm_c_generated_asm PRIVATE $<$<COMPILE_LANGUAGE:CXX>:${NO_CXX_RUNTIME_FLAGS}> "-S")
-  add_dependencies(bcm_c_generated_asm boringssl_prefix_symbols)
-  target_include_directories(bcm_c_generated_asm PRIVATE ${PROJECT_SOURCE_DIR}/include)
-  set_target_properties(bcm_c_generated_asm PROPERTIES POSITION_INDEPENDENT_CODE ON)
-  if(CLANG)
-    # Clang warns when passing both -c (from CMake) and -S.
-    target_compile_options(bcm_c_generated_asm PRIVATE "-Wno-unused-command-line-argument")
-  endif()
-
-  set(TARGET_FLAG "")
-  if(CMAKE_ASM_COMPILER_TARGET)
-    set(TARGET_FLAG "--target=${CMAKE_ASM_COMPILER_TARGET}")
-  endif()
-
-  go_executable(delocate boringssl.googlesource.com/boringssl.git/util/fipstools/delocate)
-  add_custom_command(
-    OUTPUT bcm-delocated.S
-    COMMAND ${CMAKE_CURRENT_BINARY_DIR}/delocate
-            -a $<TARGET_FILE:bcm_c_generated_asm>
-            -o ${CMAKE_CURRENT_BINARY_DIR}/bcm-delocated.S
-            -cc ${CMAKE_ASM_COMPILER}
-            -cc-flags "${TARGET_FLAG} ${CMAKE_ASM_FLAGS}"
-            ${BCM_SOURCES_ASM_USED}
-            ${CRYPTO_HEADERS}
-    DEPENDS bcm_c_generated_asm
-            delocate
-            ${BCM_SOURCES_ASM_USED}
-            ${CRYPTO_HEADERS}
-    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
-  )
-
-  add_library(bcm_hashunset STATIC bcm-delocated.S)
-  set_target_properties(bcm_hashunset PROPERTIES POSITION_INDEPENDENT_CODE ON)
-  set_target_properties(bcm_hashunset PROPERTIES LINKER_LANGUAGE C)
-
-  go_executable(inject_hash
-                boringssl.googlesource.com/boringssl.git/util/fipstools/inject_hash)
-  add_custom_command(
-    OUTPUT bcm.o
-    COMMAND ./inject_hash -o bcm.o -in-archive $<TARGET_FILE:bcm_hashunset>
-    DEPENDS bcm_hashunset inject_hash
-    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
-  )
-  set(CRYPTO_FIPS_OBJECTS bcm.o)
-elseif(FIPS_SHARED)
-  if(NOT BUILD_SHARED_LIBS)
-    message(FATAL_ERROR "FIPS_SHARED set but not BUILD_SHARED_LIBS")
-  endif()
-
-  add_library(bcm_library STATIC ${BCM_SOURCES} ${BCM_SOURCES_ASM_USED})
-  # The C++ code in libcrypto shouldn't depend on libstdc++.
-  target_compile_options(bcm_library PRIVATE $<$<COMPILE_LANGUAGE:CXX>:${NO_CXX_RUNTIME_FLAGS}>)
-  add_dependencies(bcm_library boringssl_prefix_symbols)
-  target_include_directories(bcm_library PRIVATE ${PROJECT_SOURCE_DIR}/include)
-
-  add_custom_command(
-    OUTPUT bcm.o
-    COMMAND ${CMAKE_LINKER} -r -T ${CMAKE_CURRENT_SOURCE_DIR}/crypto/fipsmodule/fips_shared.lds -o bcm.o --whole-archive $<TARGET_FILE:bcm_library>
-    DEPENDS bcm_library crypto/fipsmodule/fips_shared.lds
-    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
-  )
-  set(CRYPTO_FIPS_OBJECTS bcm.o)
-else()
-  add_library(fipsmodule OBJECT ${BCM_SOURCES} ${BCM_SOURCES_ASM_USED})
-  # The C++ code in libcrypto shouldn't depend on libstdc++.
-  target_compile_options(fipsmodule PRIVATE $<$<COMPILE_LANGUAGE:CXX>:${NO_CXX_RUNTIME_FLAGS}>)
-  add_dependencies(fipsmodule boringssl_prefix_symbols)
-  target_include_directories(fipsmodule PRIVATE ${PROJECT_SOURCE_DIR}/include)
-  set(CRYPTO_FIPS_OBJECTS $<TARGET_OBJECTS:fipsmodule>)
-endif()
-
-add_library(crypto ${CRYPTO_SOURCES} ${CRYPTO_FIPS_OBJECTS} ${CRYPTO_SOURCES_ASM_USED})
-  # The C++ code in libcrypto shouldn't depend on libstdc++.
-target_compile_options(crypto PRIVATE $<$<COMPILE_LANGUAGE:CXX>:${NO_CXX_RUNTIME_FLAGS}>)
-target_include_directories(crypto PUBLIC
-  $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
-  $<INSTALL_INTERFACE:include>
-)
-set_property(TARGET crypto PROPERTY EXPORT_NAME Crypto)
-
-if(FIPS_SHARED)
-  # Rewrite libcrypto.so to inject the correct module hash value. This assumes
-  # UNIX-style library naming, but we only support FIPS mode on Linux anyway.
-  add_custom_command(
-    TARGET crypto POST_BUILD
-    COMMAND ${GO_EXECUTABLE} run
-    ${CMAKE_CURRENT_SOURCE_DIR}/util/fipstools/inject_hash/inject_hash.go
-    -o libcrypto.so -in-object libcrypto.so
-    # The DEPENDS argument to a POST_BUILD rule appears to be ignored. Thus
-    # go_executable isn't used (as it doesn't get built), but we list this
-    # dependency anyway in case it starts working in some CMake version.
-    DEPENDS util/fipstools/inject_hash/inject_hash.go
-    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
-  )
-endif()
-
-add_dependencies(crypto boringssl_prefix_symbols)
-if(WIN32)
-  target_link_libraries(crypto ws2_32)
-endif()
-
-# CMAKE_SYSTEM_NAME is "Generic" for embedded OSes:
-# https://cmake.org/cmake/help/book/mastering-cmake/chapter/Cross%20Compiling%20With%20CMake.html#toolchain-files
-#
-# For now we assume embedded OSes do not have threads. Additionally, the Threads
-# package does not work with Android, but Android does not require any extra
-# parameters to link pthreads.
-if(NOT CMAKE_SYSTEM_NAME MATCHES "^(Generic|Android)$")
-  find_package(Threads REQUIRED)
-  target_link_libraries(crypto Threads::Threads)
-endif()
-
-# Every target depends on crypto, so we add libcxx as a dependency here to
-# simplify injecting it everywhere.
-if(USE_CUSTOM_LIBCXX)
-  target_link_libraries(crypto libcxx)
-endif()
-
-add_library(ssl ${SSL_SOURCES})
-# Although libssl also provides headers that require an include directory, the
-# flag is already specified by libcrypto, so we omit target_include_directories
-# here.
-set_property(TARGET ssl PROPERTY EXPORT_NAME SSL)
-target_link_libraries(ssl crypto)
-
-add_library(decrepit ${DECREPIT_SOURCES})
-target_link_libraries(decrepit ssl crypto)
-
-if(APPLE)
-  set(PKI_CXX_FLAGS "-fno-aligned-new")
-endif()
-add_library(pki ${PKI_SOURCES})
-target_link_libraries(pki crypto)
-target_compile_options(pki PRIVATE ${PKI_CXX_FLAGS})
-
-if(BUILD_TESTING)
-  add_library(test_support_lib STATIC
-              ${TEST_SUPPORT_SOURCES} ${TEST_SUPPORT_SOURCES_ASM_USED})
-  if(LIBUNWIND_FOUND)
-    target_compile_options(test_support_lib PRIVATE ${LIBUNWIND_CFLAGS_OTHER})
-    target_include_directories(test_support_lib PRIVATE ${LIBUNWIND_INCLUDE_DIRS})
-    target_link_libraries(test_support_lib ${LIBUNWIND_LDFLAGS})
-  endif()
-  if(WIN32)
-    target_link_libraries(test_support_lib dbghelp)
-  endif()
-  target_link_libraries(test_support_lib boringssl_gtest crypto)
-
-  # urandom_test is a separate binary because it needs to be able to observe the
-  # PRNG initialisation, which means that it can't have other tests running before
-  # it does.
-  add_executable(urandom_test ${URANDOM_TEST_SOURCES})
-  target_link_libraries(urandom_test test_support_lib boringssl_gtest crypto)
-  add_dependencies(all_tests urandom_test)
-
-  add_executable(crypto_test ${CRYPTO_TEST_SOURCES})
-  target_link_libraries(crypto_test test_support_lib boringssl_gtest crypto)
-  add_dependencies(all_tests crypto_test)
-
-  add_executable(ssl_test ${SSL_TEST_SOURCES})
-  target_link_libraries(ssl_test test_support_lib boringssl_gtest ssl crypto)
-  add_dependencies(all_tests ssl_test)
-  add_executable(decrepit_test ${DECREPIT_TEST_SOURCES})
-  target_link_libraries(decrepit_test test_support_lib boringssl_gtest
-                        decrepit ssl crypto)
-  add_dependencies(all_tests decrepit_test)
-
-  add_executable(pki_test ${PKI_TEST_SOURCES})
-  target_link_libraries(pki_test test_support_lib boringssl_gtest pki crypto)
-  target_compile_options(pki_test PRIVATE ${PKI_CXX_FLAGS})
-  add_dependencies(all_tests pki_test)
-
-  add_executable(test_fips util/fipstools/test_fips.cc)
-  target_link_libraries(test_fips crypto)
-endif()
-
-if(FIPS)
-  add_executable(modulewrapper ${MODULEWRAPPER_SOURCES})
-  target_link_libraries(modulewrapper crypto)
-endif()
-
-add_executable(bssl ${BSSL_SOURCES})
-target_link_libraries(bssl ssl crypto)
-
-if(FUZZ)
-  if(LIBFUZZER_FROM_DEPS)
-    file(GLOB LIBFUZZER_SOURCES "util/bot/libFuzzer/*.cpp")
-    add_library(Fuzzer STATIC ${LIBFUZZER_SOURCES})
-    # libFuzzer does not pass our aggressive warnings. It also must be built
-    # without -fsanitize-coverage options or clang crashes.
-    set_target_properties(
-      Fuzzer PROPERTIES
-      COMPILE_FLAGS "-Wno-shadow -Wno-format-nonliteral -Wno-missing-prototypes -fsanitize-coverage=0"
-    )
-  endif()
-
-  add_subdirectory(fuzz)
-endif()
-
-if(RUST_BINDINGS)
-  find_program(BINDGEN_EXECUTABLE bindgen)
-  if(NOT BINDGEN_EXECUTABLE)
-    message(FATAL_ERROR "Could not find bindgen but was asked to generate Rust bindings.")
-  else()
-    add_subdirectory(rust)
-  endif()
-endif()
-
-if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
-  set(HANDSHAKER_ARGS "-handshaker-path" $<TARGET_FILE:handshaker>)
-endif()
-
-if(BUILD_TESTING)
-  if(FIPS)
-    add_custom_target(
-      acvp_tests
-      COMMAND ${GO_EXECUTABLE} build -o ${CMAKE_CURRENT_BINARY_DIR}/acvptool
-              boringssl.googlesource.com/boringssl.git/util/fipstools/acvp/acvptool
-      COMMAND ${GO_EXECUTABLE} build -o ${CMAKE_CURRENT_BINARY_DIR}/testmodulewrapper
-              boringssl.googlesource.com/boringssl.git/util/fipstools/acvp/acvptool/testmodulewrapper
-      COMMAND cd util/fipstools/acvp/acvptool/test &&
-              ${GO_EXECUTABLE} run check_expected.go
-              -tool ${CMAKE_CURRENT_BINARY_DIR}/acvptool
-              -module-wrappers modulewrapper:$<TARGET_FILE:modulewrapper>,testmodulewrapper:${CMAKE_CURRENT_BINARY_DIR}/testmodulewrapper
-              -tests tests.json
-      WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
-      DEPENDS modulewrapper
-      USES_TERMINAL)
-
-    add_custom_target(
-      fips_specific_tests_if_any
-      DEPENDS acvp_tests
-    )
-  else()
-    add_custom_target(fips_specific_tests_if_any)
-  endif()
-
-  file(STRINGS util/go_tests.txt GO_TESTS)
-  set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS
-              util/go_tests.txt)
-
-  if(GO_EXECUTABLE)
-    add_custom_target(
-        run_tests
-        COMMAND ${CMAKE_COMMAND} -E echo "Running Go tests"
-        COMMAND ${GO_EXECUTABLE} test ${GO_TESTS}
-        COMMAND ${CMAKE_COMMAND} -E echo
-        COMMAND ${CMAKE_COMMAND} -E echo "Running unit tests"
-        COMMAND ${GO_EXECUTABLE} run util/all_tests.go -build-dir
-                ${CMAKE_CURRENT_BINARY_DIR}
-        COMMAND ${CMAKE_COMMAND} -E echo
-        COMMAND ${CMAKE_COMMAND} -E echo "Running SSL tests"
-        COMMAND cd ssl/test/runner &&
-                ${GO_EXECUTABLE} test -shim-path $<TARGET_FILE:bssl_shim>
-                  ${HANDSHAKER_ARGS} ${RUNNER_ARGS}
-        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
-        DEPENDS all_tests bssl_shim handshaker fips_specific_tests_if_any
-        USES_TERMINAL)
-  else()
-    add_custom_target(
-        run_tests
-        COMMAND ${CMAKE_COMMAND} -E echo "Running tests requires Go"
-        COMMAND ${CMAKE_COMMAND} -E false)
-  endif()
-endif()
-
-if(INSTALL_ENABLED)
-  install(TARGETS crypto ssl EXPORT OpenSSLTargets)
-  install(TARGETS bssl)
-  install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
-  install(EXPORT OpenSSLTargets
-          FILE OpenSSLTargets.cmake
-          NAMESPACE OpenSSL::
-          DESTINATION lib/cmake/OpenSSL)
-  install(FILES cmake/OpenSSLConfig.cmake DESTINATION lib/cmake/OpenSSL)
-endif()
diff --git a/src/CONTRIBUTING.md b/src/CONTRIBUTING.md
deleted file mode 100644
index 4d9279a..0000000
--- a/src/CONTRIBUTING.md
+++ /dev/null
@@ -1,96 +0,0 @@
-Want to contribute? Great! First, read this page (including the small print at the end).
-
-### Before you contribute
-Before we can use your code, you must sign the
-[Google Individual Contributor License Agreement](https://cla.developers.google.com/about/google-individual)
-(CLA), which you can do online. The CLA is necessary mainly because you own the
-copyright to your changes, even after your contribution becomes part of our
-codebase, so we need your permission to use and distribute your code. We also
-need to be sure of various other things—for instance that you'll tell us if you
-know that your code infringes on other people's patents. You don't have to sign
-the CLA until after you've submitted your code for review and a member has
-approved it, but you must do it before we can put your code into our codebase.
-Before you start working on a larger contribution, you should get in touch with
-us first via email with your idea so that we can help out and possibly guide
-you. Coordinating up front makes it much easier to avoid frustration later on.
-
-### Code reviews
-All submissions, including submissions by project members, require review. We
-use [Gerrit](https://boringssl-review.googlesource.com) for this purpose.
-
-#### Setup
-If you have not done so on this machine, you will need to set up a password for
-Gerrit. Sign in with a Google account, visit
-[this link](https://boringssl.googlesource.com/), and click the "Generate
-Password" link in the top right.
-
-You must also have a Gerrit account associated with
-your Google account.  To do this visit the [Gerrit review server](https://boringssl-review.googlesource.com)
-and click "Sign in" (top right).
-
-Finally, you will need to prepare your checkout to
-[add Change-Ids](https://gerrit-review.googlesource.com/Documentation/cmd-hook-commit-msg.html)
-on commit. Run:
-
-    curl -Lo .git/hooks/commit-msg https://boringssl-review.googlesource.com/tools/hooks/commit-msg
-    chmod u+x .git/hooks/commit-msg
-
-#### Uploading changes
-To upload a change, push it to the special `refs/for/main` target:
-
-    git push origin HEAD:refs/for/main
-
-The output will then give you a link to the change. Add `agl@google.com`,
-`davidben@google.com` as reviewers.
-
-Pushing a commit with the same Change-Id as an existing change will upload a new
-version of it. (Use the `git rebase` or `git commit --amend` commands.)
-
-For more detailed instructions, see the
-[Gerrit User Guide](https://gerrit-review.googlesource.com/Documentation/intro-user.html).
-
-### Copyright headers
-New files contributed directly to BoringSSL should use the following copyright
-header, where `YEAR` is the year the file was added:
-
-    Copyright YEAR The BoringSSL Authors
-
-To list individual contributors, we maintain an [AUTHORS](./AUTHORS) file at the
-top level of the project. See [this documentation](https://opensource.google/documentation/reference/releasing/authors)
-for more details. If you wish to be added, you are welcome to add yourself as
-part of your contribution, or request that we add you.
-
-We started the AUTHORS file after the project began, and after receiving many
-valuable contributions. To avoid being presumptuous, we did not proactively list
-all past contributors. If you previously made a contribution, you are likewise
-welcome to send us a patch to be added, or request that we add you.
-
-After the copyright lines, files should include the license notice described in
-the Apache 2.0 appendix. Thus new files should begin with the following header:
-
-    // Copyright YEAR The BoringSSL Authors
-    //
-    // 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
-    //
-    //     https://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 small print
-Contributions made by corporations are covered by a different agreement than
-the one above, the
-[Software Grant and Corporate Contributor License Agreement](https://cla.developers.google.com/about/google-corporate).
-
-The following are Google-internal bug numbers where explicit permission from
-some authors is recorded for use of their work. (This is purely for our own
-record keeping.)
-*  27287199
-*  27287880
-*  27287883
-*  263291445
diff --git a/src/FUZZING.md b/src/FUZZING.md
deleted file mode 100644
index 3689ad0..0000000
--- a/src/FUZZING.md
+++ /dev/null
@@ -1,78 +0,0 @@
-# Fuzz testing
-
-Modern fuzz testers are very effective and we wish to use them to ensure that no silly bugs creep into BoringSSL.
-
-We use Clang's [libFuzzer](http://llvm.org/docs/LibFuzzer.html) for fuzz testing and there are a number of fuzz testing functions in `fuzz/`. They are not built by default because they require that the rest of BoringSSL be built with some changes that make fuzzing much more effective, but are completely unsafe for real use.
-
-In order to build the fuzz tests you will need at least Clang 6.0. Pass `-DFUZZ=1` on the CMake command line to enable building BoringSSL with coverage and AddressSanitizer, and to build the fuzz test binaries. You'll probably need to set the `CC` and `CXX` environment variables too, like this:
-
-```
-CC=clang CXX=clang++ cmake -GNinja -DFUZZ=1 -B build
-ninja -C build
-```
-
-
-From the `build/` directory, you can then run the fuzzers. For example:
-
-```
-./fuzz/cert -max_len=10000 -jobs=32 -workers=32 ../fuzz/cert_corpus/
-```
-
-The arguments to `jobs` and `workers` should be the number of cores that you wish to dedicate to fuzzing. By default, libFuzzer uses the largest test in the corpus (or 64 if empty) as the maximum test case length. The `max_len` argument overrides this.
-
-The recommended values of `max_len` for each test are:
-
-| Test          | `max_len` value |
-|---------------|-----------------|
-| `bn_div`      | 384             |
-| `bn_mod_exp`  | 4096            |
-| `cert`        | 10000           |
-| `client`      | 20000           |
-| `pkcs8`       | 2048            |
-| `privkey`     | 2048            |
-| `server`      | 4096            |
-| `session`     | 8192            |
-| `spki`        | 1024            |
-| `read_pem`    | 512             |
-| `ssl_ctx_api` | 256             |
-
-These were determined by rounding up the length of the largest case in the corpus.
-
-There are directories in `fuzz/` for each of the fuzzing tests which contain seed files for fuzzing. Some of the seed files were generated manually but many of them are “interesting” results generated by the fuzzing itself. (Where “interesting” means that it triggered a previously unknown path in the code.)
-
-## Minimising the corpora
-
-When a large number of new seeds are available, it's a good idea to minimise the corpus so that different seeds that trigger the same code paths can be deduplicated.
-
-In order to minimise all the corpora, build for fuzzing and run `./fuzz/minimise_corpora.sh`. Note that minimisation is, oddly, often not idempotent for unknown reasons.
-
-## Fuzzer mode
-
-When `-DFUZZ=1` is passed into CMake, BoringSSL builds with `FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION` defined. BoringSSL will then:
-
-* Replace `RAND_bytes` with a deterministic PRNG. Call `RAND_reset_for_fuzzing()` at the start of fuzzers which use `RAND_bytes` to reset the PRNG state.
-
-Additionally, if `CRYPTO_set_fuzzer_mode()` is called to enable fuzzer mode, BoringSSL will:
-
-* Modify the TLS stack to perform all signature checks (CertificateVerify and ServerKeyExchange) and the Finished check, but always act as if the check succeeded.
-
-* Treat every cipher as the NULL cipher.
-
-* Tickets are unencrypted and the MAC check is performed but ignored.
-
-* renegotiation\_info checks are ignored.
-
-This is to prevent the fuzzer from getting stuck at a cryptographic invariant in the protocol.
-
-## TLS transcripts
-
-The `client` and `server` corpora are seeded from the test suite. The test suite has a `-fuzzer` flag which mirrors the fuzzer mode changes above and a `-deterministic` flag which removes all non-determinism on the Go side. Not all tests pass, so `ssl/test/runner/fuzzer_mode.json` contains the necessary suppressions. The `run_tests` target will pass appropriate command-line flags.
-
-There are separate fuzzers, `client_no_fuzzer_mode` and `server_no_fuzzer_mode`, with fuzzer mode disabled. This configuration is run in the same way but without `-fuzzer` and `-shim-config` flags.
-
-If both sets of tests pass, refresh the fuzzer corpora with `refresh_ssl_corpora.sh`:
-
-```
-cd fuzz
-./refresh_ssl_corpora.sh /path/to/fuzzer/mode/build /path/to/non/fuzzer/mode/build
-```
diff --git a/src/INCORPORATING.md b/src/INCORPORATING.md
deleted file mode 100644
index bc80923..0000000
--- a/src/INCORPORATING.md
+++ /dev/null
@@ -1,121 +0,0 @@
-# Incorporating BoringSSL into a project
-
-**Note**: if your target project is not a Google project then first read the
-[main README](./README.md) about the purpose of BoringSSL.
-
-If you are porting BoringSSL to a new platform see
-["go/boringssl-on-new-platform"](https://goto.corp.google.com/boringssl-on-new-platform) (Google
-Internal) for information about porting BoringSSL to a new platform for a Google
-project.
-
-## Which branch to use
-
-BoringSSL usage typically follows a
-["live at head"](https://abseil.io/about/philosophy#we-recommend-that-you-choose-to-live-at-head)
-model. Projects pin to whatever the current latest of BoringSSL is at the time
-of update, and regularly update it to pick up new changes.
-
-Some systems cannot consume git revisions and expect git tags. BoringSSL tags
-periodic snapshots as "releases", to meet the needs of those systems. These
-versions do not represent any kind of stability or development milestone.
-BoringSSL does not branch at these releases and will not cherry-pick bugfixes to
-them. Unless there is a technical constraint to use one of these revisions,
-projects should simply use the latest untagged revision when updating.
-
-While the BoringSSL repository may contain project-specific branches, e.g.
-`chromium-2214`, those are _not_ supported release branches and must not as
-such. In rare cases, BoringSSL will temporarily maintain a short-lived branch on
-behalf of a project. Most such branches are no longer updated, because the
-corresponding project no longer needs them, and we do not create new ones to
-replace the ones that are no longer updated. E.g., not every Chromium release
-branch has a corresponding BoringSSL `chromium-*` branch. Even while active, the
-branch may not contain all changes relevant to a general BoringSSL consumer.
-
-## Bazel
-
-If you are using [Bazel](https://bazel.build) then you can use the [boringssl
-module](https://registry.bazel.build/modules/boringssl) in the Bazel Central
-Registry with bzlmod. Look up the latest version and add the following to your
-`MODULE.bazel` file:
-
-    bazel_dep(name = "boringssl", version = "INSERT_VERSION_HERE")
-
-Substitute the latest version in for `INSERT_VERSION_HERE`.
-
-BoringSSL will periodically ship snapshots to Bazel Central Registry. As with
-other dependencies, periodically keep the referenced version up-to-date.
-
-## Directory layout
-
-Typically projects create a `third_party/boringssl` directory to put
-BoringSSL-specific files into. The source code of BoringSSL itself goes into
-`third_party/boringssl/src`, either by copying or as a
-[submodule](https://git-scm.com/docs/git-submodule).
-
-It's generally a mistake to put BoringSSL's source code into
-`third_party/boringssl` directly because custom build files need to go somewhere
-and merging these with the BoringSSL source code makes updating things more
-complex.
-
-## Build support
-
-BoringSSL is designed to work with many different build systems. The project
-currently has [CMake](https://cmake.org/) and [Bazel](https://bazel.build/)
-builds checked in. Other build systems, and embedders with custom build needs,
-are supported by separating the source list, maintained by BoringSSL, and the
-top-level build logic, maintained by the embedder.
-
-Source lists for various build systems are pre-generated and live in the `gen`
-directory. For example, source lists for
-[GN](https://gn.googlesource.com/gn/+/main/docs/quick_start.md) live in
-[gen/sources.gni](./gen/sources.gni). There is also a generic
-[gen/sources.json](./gen/sources.json) file for projects to consume if needed.
-[util/build/build.go](./util/build/build.go) describes what the various source
-lists mean. Most projects should concatenate the `bcm` and `crypto` targets.
-
-If you don't use any of the supported build systems, you should augment the
-[util/pregenerate](./util/pregenerate) tool to support it, or
-consume [gen/sources.json](./gen/sources.json).
-
-Historically, source lists were generated at update time with the
-[`util/generate_build_files.py`](./util/generate_build_files.py) script. We are
-in the process of transitioning builds to the pre-generated files, so that
-embedders do not need to run a custom script when updating BoringSSL.
-
-## Defines
-
-BoringSSL does not present a lot of configurability in order to reduce the
-number of configurations that need to be tested. But there are a couple of
-\#defines that you may wish to set:
-
-`OPENSSL_NO_ASM` prevents the use of assembly code (although it's up to you to
-ensure that the build system doesn't link it in if you wish to reduce binary
-size). This will have a significant performance impact but can be useful if you
-wish to use tools like
-[AddressSanitizer](http://clang.llvm.org/docs/AddressSanitizer.html) that
-interact poorly with assembly code.
-
-`OPENSSL_SMALL` removes some code that is especially large at some performance
-cost.
-
-## Symbols
-
-You cannot link multiple versions of BoringSSL or OpenSSL into a single binary
-without dealing with symbol conflicts. If you are statically linking multiple
-versions together, there's not a lot that can be done because C doesn't have a
-module system.
-
-If you are using multiple versions in a single binary, in different shared
-objects, ensure you build BoringSSL with `-fvisibility=hidden` and do not
-export any of BoringSSL's symbols. This will prevent any collisions with other
-verisons that may be included in other shared objects. Note that this requires
-that all callers of BoringSSL APIs live in the same shared object as BoringSSL.
-
-If you require that BoringSSL APIs be used across shared object boundaries,
-continue to build with `-fvisibility=hidden` but define
-`BORINGSSL_SHARED_LIBRARY` in both BoringSSL and consumers. BoringSSL's own
-source files (but *not* consumers' source files) must also build with
-`BORINGSSL_IMPLEMENTATION` defined. This will export BoringSSL's public symbols
-in the resulting shared object while hiding private symbols. However note that,
-as with a static link, this precludes dynamically linking with another version
-of BoringSSL or OpenSSL.
diff --git a/src/MODULE.bazel b/src/MODULE.bazel
deleted file mode 100644
index 6737496..0000000
--- a/src/MODULE.bazel
+++ /dev/null
@@ -1,36 +0,0 @@
-# Copyright 2024 The BoringSSL Authors
-#
-# 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
-#
-#     https://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.
-
-# When tagging a new periodic snapshot, bump the version here and then tag at
-# the revision where we bump the version.
-module(
-    name = "boringssl",
-    version = "0.20250415.0",
-    compatibility_level = 2,
-)
-
-# Periodically update the following dependencies to their latest versions
-# listed on https://registry.bazel.build/. When doing so, run
-# `bazelisk test ...` to update the hashes in MODULE.bazel.lock.
-
-# In principle, googletest is only needed for tests and could be a
-# dev_dependency. But it would then be impossible for downstream modules to run
-# BoringSSL's tests. The downstream module provides the toolchain, so we may
-# need to request they run tests when triaging issues. If
-# https://github.com/bazelbuild/bazel/issues/22187 is ever fixed, we can change
-# this.
-bazel_dep(name = "googletest", version = "1.16.0")
-bazel_dep(name = "platforms", version = "0.0.11")
-bazel_dep(name = "rules_cc", version = "0.1.1")
-bazel_dep(name = "rules_license", version = "1.0.0")
diff --git a/src/MODULE.bazel.lock b/src/MODULE.bazel.lock
deleted file mode 100644
index 351fe6b..0000000
--- a/src/MODULE.bazel.lock
+++ /dev/null
@@ -1,136 +0,0 @@
-{
-  "lockFileVersion": 13,
-  "registryFileHashes": {
-    "https://bcr.bazel.build/bazel_registry.json": "8a28e4aff06ee60aed2a8c281907fb8bcbf3b753c91fb5a5c57da3215d5b3497",
-    "https://bcr.bazel.build/modules/abseil-cpp/20210324.2/MODULE.bazel": "7cd0312e064fde87c8d1cd79ba06c876bd23630c83466e9500321be55c96ace2",
-    "https://bcr.bazel.build/modules/abseil-cpp/20211102.0/MODULE.bazel": "70390338f7a5106231d20620712f7cccb659cd0e9d073d1991c038eb9fc57589",
-    "https://bcr.bazel.build/modules/abseil-cpp/20230125.1/MODULE.bazel": "89047429cb0207707b2dface14ba7f8df85273d484c2572755be4bab7ce9c3a0",
-    "https://bcr.bazel.build/modules/abseil-cpp/20230802.0.bcr.1/MODULE.bazel": "1c8cec495288dccd14fdae6e3f95f772c1c91857047a098fad772034264cc8cb",
-    "https://bcr.bazel.build/modules/abseil-cpp/20230802.0/MODULE.bazel": "d253ae36a8bd9ee3c5955384096ccb6baf16a1b1e93e858370da0a3b94f77c16",
-    "https://bcr.bazel.build/modules/abseil-cpp/20240116.2/MODULE.bazel": "73939767a4686cd9a520d16af5ab440071ed75cec1a876bf2fcfaf1f71987a16",
-    "https://bcr.bazel.build/modules/abseil-cpp/20250127.0/MODULE.bazel": "d1086e248cda6576862b4b3fe9ad76a214e08c189af5b42557a6e1888812c5d5",
-    "https://bcr.bazel.build/modules/abseil-cpp/20250127.0/source.json": "1b996859f840d8efc7c720efc61dcf2a84b1261cb3974cbbe9b6666ebf567775",
-    "https://bcr.bazel.build/modules/apple_support/1.15.1/MODULE.bazel": "a0556fefca0b1bb2de8567b8827518f94db6a6e7e7d632b4c48dc5f865bc7c85",
-    "https://bcr.bazel.build/modules/apple_support/1.15.1/source.json": "517f2b77430084c541bc9be2db63fdcbb7102938c5f64c17ee60ffda2e5cf07b",
-    "https://bcr.bazel.build/modules/apple_support/1.5.0/MODULE.bazel": "50341a62efbc483e8a2a6aec30994a58749bd7b885e18dd96aa8c33031e558ef",
-    "https://bcr.bazel.build/modules/bazel_features/1.1.1/MODULE.bazel": "27b8c79ef57efe08efccbd9dd6ef70d61b4798320b8d3c134fd571f78963dbcd",
-    "https://bcr.bazel.build/modules/bazel_features/1.11.0/MODULE.bazel": "f9382337dd5a474c3b7d334c2f83e50b6eaedc284253334cf823044a26de03e8",
-    "https://bcr.bazel.build/modules/bazel_features/1.19.0/MODULE.bazel": "59adcdf28230d220f0067b1f435b8537dd033bfff8db21335ef9217919c7fb58",
-    "https://bcr.bazel.build/modules/bazel_features/1.19.0/source.json": "d7bf14517c1b25b9d9c580b0f8795fceeae08a7590f507b76aace528e941375d",
-    "https://bcr.bazel.build/modules/bazel_features/1.9.1/MODULE.bazel": "8f679097876a9b609ad1f60249c49d68bfab783dd9be012faf9d82547b14815a",
-    "https://bcr.bazel.build/modules/bazel_skylib/1.0.3/MODULE.bazel": "bcb0fd896384802d1ad283b4e4eb4d718eebd8cb820b0a2c3a347fb971afd9d8",
-    "https://bcr.bazel.build/modules/bazel_skylib/1.1.1/MODULE.bazel": "1add3e7d93ff2e6998f9e118022c84d163917d912f5afafb3058e3d2f1545b5e",
-    "https://bcr.bazel.build/modules/bazel_skylib/1.2.0/MODULE.bazel": "44fe84260e454ed94ad326352a698422dbe372b21a1ac9f3eab76eb531223686",
-    "https://bcr.bazel.build/modules/bazel_skylib/1.2.1/MODULE.bazel": "f35baf9da0efe45fa3da1696ae906eea3d615ad41e2e3def4aeb4e8bc0ef9a7a",
-    "https://bcr.bazel.build/modules/bazel_skylib/1.3.0/MODULE.bazel": "20228b92868bf5cfc41bda7afc8a8ba2a543201851de39d990ec957b513579c5",
-    "https://bcr.bazel.build/modules/bazel_skylib/1.4.1/MODULE.bazel": "a0dcb779424be33100dcae821e9e27e4f2901d9dfd5333efe5ac6a8d7ab75e1d",
-    "https://bcr.bazel.build/modules/bazel_skylib/1.5.0/MODULE.bazel": "32880f5e2945ce6a03d1fbd588e9198c0a959bb42297b2cfaf1685b7bc32e138",
-    "https://bcr.bazel.build/modules/bazel_skylib/1.6.1/MODULE.bazel": "8fdee2dbaace6c252131c00e1de4b165dc65af02ea278476187765e1a617b917",
-    "https://bcr.bazel.build/modules/bazel_skylib/1.7.1/MODULE.bazel": "3120d80c5861aa616222ec015332e5f8d3171e062e3e804a2a0253e1be26e59b",
-    "https://bcr.bazel.build/modules/bazel_skylib/1.7.1/source.json": "f121b43eeefc7c29efbd51b83d08631e2347297c95aac9764a701f2a6a2bb953",
-    "https://bcr.bazel.build/modules/buildozer/7.1.2/MODULE.bazel": "2e8dd40ede9c454042645fd8d8d0cd1527966aa5c919de86661e62953cd73d84",
-    "https://bcr.bazel.build/modules/buildozer/7.1.2/source.json": "c9028a501d2db85793a6996205c8de120944f50a0d570438fcae0457a5f9d1f8",
-    "https://bcr.bazel.build/modules/google_benchmark/1.8.2/MODULE.bazel": "a70cf1bba851000ba93b58ae2f6d76490a9feb74192e57ab8e8ff13c34ec50cb",
-    "https://bcr.bazel.build/modules/googletest/1.11.0/MODULE.bazel": "3a83f095183f66345ca86aa13c58b59f9f94a2f81999c093d4eeaa2d262d12f4",
-    "https://bcr.bazel.build/modules/googletest/1.14.0.bcr.1/MODULE.bazel": "22c31a561553727960057361aa33bf20fb2e98584bc4fec007906e27053f80c6",
-    "https://bcr.bazel.build/modules/googletest/1.14.0/MODULE.bazel": "cfbcbf3e6eac06ef9d85900f64424708cc08687d1b527f0ef65aa7517af8118f",
-    "https://bcr.bazel.build/modules/googletest/1.15.2/MODULE.bazel": "6de1edc1d26cafb0ea1a6ab3f4d4192d91a312fd2d360b63adaa213cd00b2108",
-    "https://bcr.bazel.build/modules/googletest/1.16.0/MODULE.bazel": "a175623c69e94fca4ca7acbc12031e637b0c489318cd4805606981d4d7adb34a",
-    "https://bcr.bazel.build/modules/googletest/1.16.0/source.json": "dd011b202542efcd4c0e3df34b1558d41598c6f287846728315ded5f7984b77a",
-    "https://bcr.bazel.build/modules/jsoncpp/1.9.5/MODULE.bazel": "31271aedc59e815656f5736f282bb7509a97c7ecb43e927ac1a37966e0578075",
-    "https://bcr.bazel.build/modules/jsoncpp/1.9.5/source.json": "4108ee5085dd2885a341c7fab149429db457b3169b86eb081fa245eadf69169d",
-    "https://bcr.bazel.build/modules/libpfm/4.11.0/MODULE.bazel": "45061ff025b301940f1e30d2c16bea596c25b176c8b6b3087e92615adbd52902",
-    "https://bcr.bazel.build/modules/platforms/0.0.10/MODULE.bazel": "8cb8efaf200bdeb2150d93e162c40f388529a25852b332cec879373771e48ed5",
-    "https://bcr.bazel.build/modules/platforms/0.0.11/MODULE.bazel": "0daefc49732e227caa8bfa834d65dc52e8cc18a2faf80df25e8caea151a9413f",
-    "https://bcr.bazel.build/modules/platforms/0.0.11/source.json": "f7e188b79ebedebfe75e9e1d098b8845226c7992b307e28e1496f23112e8fc29",
-    "https://bcr.bazel.build/modules/platforms/0.0.4/MODULE.bazel": "9b328e31ee156f53f3c416a64f8491f7eb731742655a47c9eec4703a71644aee",
-    "https://bcr.bazel.build/modules/platforms/0.0.5/MODULE.bazel": "5733b54ea419d5eaf7997054bb55f6a1d0b5ff8aedf0176fef9eea44f3acda37",
-    "https://bcr.bazel.build/modules/platforms/0.0.6/MODULE.bazel": "ad6eeef431dc52aefd2d77ed20a4b353f8ebf0f4ecdd26a807d2da5aa8cd0615",
-    "https://bcr.bazel.build/modules/platforms/0.0.7/MODULE.bazel": "72fd4a0ede9ee5c021f6a8dd92b503e089f46c227ba2813ff183b71616034814",
-    "https://bcr.bazel.build/modules/platforms/0.0.8/MODULE.bazel": "9f142c03e348f6d263719f5074b21ef3adf0b139ee4c5133e2aa35664da9eb2d",
-    "https://bcr.bazel.build/modules/platforms/0.0.9/MODULE.bazel": "4a87a60c927b56ddd67db50c89acaa62f4ce2a1d2149ccb63ffd871d5ce29ebc",
-    "https://bcr.bazel.build/modules/protobuf/21.7/MODULE.bazel": "a5a29bb89544f9b97edce05642fac225a808b5b7be74038ea3640fae2f8e66a7",
-    "https://bcr.bazel.build/modules/protobuf/27.0/MODULE.bazel": "7873b60be88844a0a1d8f80b9d5d20cfbd8495a689b8763e76c6372998d3f64c",
-    "https://bcr.bazel.build/modules/protobuf/27.0/source.json": "1acf3d080c728d42f423fde5422fd0a1a24f44c15908124ce12363a253384193",
-    "https://bcr.bazel.build/modules/protobuf/3.19.0/MODULE.bazel": "6b5fbb433f760a99a22b18b6850ed5784ef0e9928a72668b66e4d7ccd47db9b0",
-    "https://bcr.bazel.build/modules/protobuf/3.19.6/MODULE.bazel": "9233edc5e1f2ee276a60de3eaa47ac4132302ef9643238f23128fea53ea12858",
-    "https://bcr.bazel.build/modules/pybind11_bazel/2.11.1/MODULE.bazel": "88af1c246226d87e65be78ed49ecd1e6f5e98648558c14ce99176da041dc378e",
-    "https://bcr.bazel.build/modules/pybind11_bazel/2.12.0/MODULE.bazel": "e6f4c20442eaa7c90d7190d8dc539d0ab422f95c65a57cc59562170c58ae3d34",
-    "https://bcr.bazel.build/modules/pybind11_bazel/2.12.0/source.json": "6900fdc8a9e95866b8c0d4ad4aba4d4236317b5c1cd04c502df3f0d33afed680",
-    "https://bcr.bazel.build/modules/re2/2023-09-01/MODULE.bazel": "cb3d511531b16cfc78a225a9e2136007a48cf8a677e4264baeab57fe78a80206",
-    "https://bcr.bazel.build/modules/re2/2024-07-02/MODULE.bazel": "0eadc4395959969297cbcf31a249ff457f2f1d456228c67719480205aa306daa",
-    "https://bcr.bazel.build/modules/re2/2024-07-02/source.json": "547d0111a9d4f362db32196fef805abbf3676e8d6afbe44d395d87816c1130ca",
-    "https://bcr.bazel.build/modules/rules_cc/0.0.1/MODULE.bazel": "cb2aa0747f84c6c3a78dad4e2049c154f08ab9d166b1273835a8174940365647",
-    "https://bcr.bazel.build/modules/rules_cc/0.0.17/MODULE.bazel": "2ae1d8f4238ec67d7185d8861cb0a2cdf4bc608697c331b95bf990e69b62e64a",
-    "https://bcr.bazel.build/modules/rules_cc/0.0.2/MODULE.bazel": "6915987c90970493ab97393024c156ea8fb9f3bea953b2f3ec05c34f19b5695c",
-    "https://bcr.bazel.build/modules/rules_cc/0.0.6/MODULE.bazel": "abf360251023dfe3efcef65ab9d56beefa8394d4176dd29529750e1c57eaa33f",
-    "https://bcr.bazel.build/modules/rules_cc/0.0.8/MODULE.bazel": "964c85c82cfeb6f3855e6a07054fdb159aced38e99a5eecf7bce9d53990afa3e",
-    "https://bcr.bazel.build/modules/rules_cc/0.0.9/MODULE.bazel": "836e76439f354b89afe6a911a7adf59a6b2518fafb174483ad78a2a2fde7b1c5",
-    "https://bcr.bazel.build/modules/rules_cc/0.1.1/MODULE.bazel": "2f0222a6f229f0bf44cd711dc13c858dad98c62d52bd51d8fc3a764a83125513",
-    "https://bcr.bazel.build/modules/rules_cc/0.1.1/source.json": "d61627377bd7dd1da4652063e368d9366fc9a73920bfa396798ad92172cf645c",
-    "https://bcr.bazel.build/modules/rules_foreign_cc/0.9.0/MODULE.bazel": "c9e8c682bf75b0e7c704166d79b599f93b72cfca5ad7477df596947891feeef6",
-    "https://bcr.bazel.build/modules/rules_java/4.0.0/MODULE.bazel": "5a78a7ae82cd1a33cef56dc578c7d2a46ed0dca12643ee45edbb8417899e6f74",
-    "https://bcr.bazel.build/modules/rules_java/5.3.5/MODULE.bazel": "a4ec4f2db570171e3e5eb753276ee4b389bae16b96207e9d3230895c99644b86",
-    "https://bcr.bazel.build/modules/rules_java/7.6.5/MODULE.bazel": "481164be5e02e4cab6e77a36927683263be56b7e36fef918b458d7a8a1ebadb1",
-    "https://bcr.bazel.build/modules/rules_java/7.6.5/source.json": "a805b889531d1690e3c72a7a7e47a870d00323186a9904b36af83aa3d053ee8d",
-    "https://bcr.bazel.build/modules/rules_jvm_external/4.4.2/MODULE.bazel": "a56b85e418c83eb1839819f0b515c431010160383306d13ec21959ac412d2fe7",
-    "https://bcr.bazel.build/modules/rules_jvm_external/5.1/MODULE.bazel": "33f6f999e03183f7d088c9be518a63467dfd0be94a11d0055fe2d210f89aa909",
-    "https://bcr.bazel.build/modules/rules_jvm_external/5.1/source.json": "5abb45cc9beb27b77aec6a65a11855ef2b55d95dfdc358e9f312b78ae0ba32d5",
-    "https://bcr.bazel.build/modules/rules_license/0.0.3/MODULE.bazel": "627e9ab0247f7d1e05736b59dbb1b6871373de5ad31c3011880b4133cafd4bd0",
-    "https://bcr.bazel.build/modules/rules_license/0.0.7/MODULE.bazel": "088fbeb0b6a419005b89cf93fe62d9517c0a2b8bb56af3244af65ecfe37e7d5d",
-    "https://bcr.bazel.build/modules/rules_license/1.0.0/MODULE.bazel": "a7fda60eefdf3d8c827262ba499957e4df06f659330bbe6cdbdb975b768bb65c",
-    "https://bcr.bazel.build/modules/rules_license/1.0.0/source.json": "a52c89e54cc311196e478f8382df91c15f7a2bfdf4c6cd0e2675cc2ff0b56efb",
-    "https://bcr.bazel.build/modules/rules_pkg/0.7.0/MODULE.bazel": "df99f03fc7934a4737122518bb87e667e62d780b610910f0447665a7e2be62dc",
-    "https://bcr.bazel.build/modules/rules_pkg/0.7.0/source.json": "c2557066e0c0342223ba592510ad3d812d4963b9024831f7f66fd0584dd8c66c",
-    "https://bcr.bazel.build/modules/rules_proto/4.0.0/MODULE.bazel": "a7a7b6ce9bee418c1a760b3d84f83a299ad6952f9903c67f19e4edd964894e06",
-    "https://bcr.bazel.build/modules/rules_proto/5.3.0-21.7/MODULE.bazel": "e8dff86b0971688790ae75528fe1813f71809b5afd57facb44dad9e8eca631b7",
-    "https://bcr.bazel.build/modules/rules_proto/6.0.0-rc1/MODULE.bazel": "1e5b502e2e1a9e825eef74476a5a1ee524a92297085015a052510b09a1a09483",
-    "https://bcr.bazel.build/modules/rules_proto/6.0.0-rc1/source.json": "8d8448e71706df7450ced227ca6b3812407ff5e2ccad74a43a9fbe79c84e34e0",
-    "https://bcr.bazel.build/modules/rules_python/0.10.2/MODULE.bazel": "cc82bc96f2997baa545ab3ce73f196d040ffb8756fd2d66125a530031cd90e5f",
-    "https://bcr.bazel.build/modules/rules_python/0.22.1/MODULE.bazel": "26114f0c0b5e93018c0c066d6673f1a2c3737c7e90af95eff30cfee38d0bbac7",
-    "https://bcr.bazel.build/modules/rules_python/0.25.0/MODULE.bazel": "72f1506841c920a1afec76975b35312410eea3aa7b63267436bfb1dd91d2d382",
-    "https://bcr.bazel.build/modules/rules_python/0.31.0/MODULE.bazel": "93a43dc47ee570e6ec9f5779b2e64c1476a6ce921c48cc9a1678a91dd5f8fd58",
-    "https://bcr.bazel.build/modules/rules_python/0.33.2/MODULE.bazel": "3e036c4ad8d804a4dad897d333d8dce200d943df4827cb849840055be8d2e937",
-    "https://bcr.bazel.build/modules/rules_python/0.33.2/source.json": "e539592cd3aae4492032cecea510e46ca16eeb972271560b922cae9893944e2f",
-    "https://bcr.bazel.build/modules/rules_python/0.4.0/MODULE.bazel": "9208ee05fd48bf09ac60ed269791cf17fb343db56c8226a720fbb1cdf467166c",
-    "https://bcr.bazel.build/modules/stardoc/0.5.1/MODULE.bazel": "1a05d92974d0c122f5ccf09291442580317cdd859f07a8655f1db9a60374f9f8",
-    "https://bcr.bazel.build/modules/stardoc/0.5.3/MODULE.bazel": "c7f6948dae6999bf0db32c1858ae345f112cacf98f174c7a8bb707e41b974f1c",
-    "https://bcr.bazel.build/modules/stardoc/0.5.3/source.json": "cd53fe968dc8cd98197c052db3db6d82562960c87b61e7a90ee96f8e4e0dda97",
-    "https://bcr.bazel.build/modules/upb/0.0.0-20220923-a547704/MODULE.bazel": "7298990c00040a0e2f121f6c32544bab27d4452f80d9ce51349b1a28f3005c43",
-    "https://bcr.bazel.build/modules/zlib/1.2.11/MODULE.bazel": "07b389abc85fdbca459b69e2ec656ae5622873af3f845e1c9d80fe179f3effa0",
-    "https://bcr.bazel.build/modules/zlib/1.2.12/MODULE.bazel": "3b1a8834ada2a883674be8cbd36ede1b6ec481477ada359cd2d3ddc562340b27",
-    "https://bcr.bazel.build/modules/zlib/1.3.1.bcr.3/MODULE.bazel": "af322bc08976524477c79d1e45e241b6efbeb918c497e8840b8ab116802dda79",
-    "https://bcr.bazel.build/modules/zlib/1.3.1.bcr.3/source.json": "2be409ac3c7601245958cd4fcdff4288be79ed23bd690b4b951f500d54ee6e7d"
-  },
-  "selectedYankedVersions": {},
-  "moduleExtensions": {
-    "@@apple_support~//crosstool:setup.bzl%apple_cc_configure_extension": {
-      "general": {
-        "bzlTransitiveDigest": "ltCGFbl/LQQZXn/LEMXfKX7pGwyqNiOCHcmiQW0tmjM=",
-        "usagesDigest": "2Jj0sTGzjx2KfYRjWYbL6DZ1bi8HL2roIAGfOViiul8=",
-        "recordedFileInputs": {},
-        "recordedDirentsInputs": {},
-        "envVariables": {},
-        "generatedRepoSpecs": {
-          "local_config_apple_cc_toolchains": {
-            "bzlFile": "@@apple_support~//crosstool:setup.bzl",
-            "ruleClassName": "_apple_cc_autoconf_toolchains",
-            "attributes": {}
-          },
-          "local_config_apple_cc": {
-            "bzlFile": "@@apple_support~//crosstool:setup.bzl",
-            "ruleClassName": "_apple_cc_autoconf",
-            "attributes": {}
-          }
-        },
-        "recordedRepoMappingEntries": [
-          [
-            "apple_support~",
-            "bazel_tools",
-            "bazel_tools"
-          ]
-        ]
-      }
-    }
-  }
-}
diff --git a/src/PORTING.md b/src/PORTING.md
deleted file mode 100644
index 3faf757..0000000
--- a/src/PORTING.md
+++ /dev/null
@@ -1,306 +0,0 @@
-# Porting from OpenSSL to BoringSSL
-
-BoringSSL is an OpenSSL derivative and is mostly source-compatible, for the
-subset of OpenSSL retained. Libraries ideally need little to no changes for
-BoringSSL support, provided they do not use removed APIs. In general, see if the
-library compiles and, on failure, consult the documentation in the header files
-and see if problematic features can be removed.
-
-BoringSSL's `OPENSSL_VERSION_NUMBER` matches the OpenSSL version it targets.
-Version checks for OpenSSL should ideally work as-is in BoringSSL. BoringSSL
-also defines upstream's `OPENSSL_NO_*` feature macros corresponding to removed
-features. If the preprocessor is needed, use these version checks or feature
-macros where possible, especially when patching third-party projects. Such
-patches are more generally useful to OpenSSL consumers and thus more
-appropriate to send upstream.
-
-In some cases, BoringSSL-specific code may be necessary. Use the
-`OPENSSL_IS_BORINGSSL` preprocessor macro in `#ifdef`s. However, first contact
-the BoringSSL maintainers about the missing APIs. We will typically add
-compatibility functions for convenience. In particular, *contact BoringSSL
-maintainers before working around missing OpenSSL 1.1.0 accessors*. BoringSSL
-was originally derived from OpenSSL 1.0.2 but now targets OpenSSL 1.1.0. Some
-newer APIs may be missing but can be added on request. (Not all projects have
-been ported to OpenSSL 1.1.0, so BoringSSL also remains largely compatible with
-OpenSSL 1.0.2.)
-
-The `OPENSSL_IS_BORINGSSL` macro may also be used to distinguish OpenSSL from
-BoringSSL in configure scripts. Do not use the presence or absence of particular
-symbols to detect BoringSSL.
-
-Note: BoringSSL does *not* have a stable API or ABI. It must be updated with its
-consumers. It is not suitable for, say, a system library in a traditional Linux
-distribution. For instance, Chromium statically links the specific revision of
-BoringSSL it was built against. Likewise, Android's system-internal copy of
-BoringSSL is not exposed by the NDK and must not be used by third-party
-applications.
-
-
-## Major API changes
-
-### Integer types
-
-Some APIs have been converted to use `size_t` for consistency and to avoid
-integer overflows at the API boundary. (Existing logic uses a mismash of `int`,
-`long`, and `unsigned`.)  For the most part, implicit casts mean that existing
-code continues to compile. In some cases, this may require BoringSSL-specific
-code, particularly to avoid compiler warnings.
-
-Most notably, the `STACK_OF(T)` types have all been converted to use `size_t`
-instead of `int` for indices and lengths.
-
-### Reference counts and opaque types
-
-Some external consumers increment reference counts directly by calling
-`CRYPTO_add` with the corresponding `CRYPTO_LOCK_*` value. These APIs no longer
-exist in BoringSSL. Instead, code which increments reference counts should call
-the corresponding `FOO_up_ref` function, such as `EVP_PKEY_up_ref`.
-
-BoringSSL also hides some structs which were previously exposed in OpenSSL
-1.0.2, particularly in libssl. Use the relevant accessors instead.
-
-Note that some of these APIs were added in OpenSSL 1.1.0, so projects which do
-not yet support 1.1.0 may need additional `#ifdef`s. Projects supporting OpenSSL
-1.1.0 should not require modification.
-
-### Error codes
-
-OpenSSL's errors are extremely specific, leaking internals of the library,
-including even a function code for the function which emitted the error! As some
-logic in BoringSSL has been rewritten, code which conditions on the error may
-break (grep for `ERR_GET_REASON` and `ERR_GET_FUNC`). This danger also exists
-when upgrading OpenSSL versions.
-
-Where possible, avoid conditioning on the exact error reason. Otherwise, a
-BoringSSL `#ifdef` may be necessary. Exactly how best to resolve this issue is
-still being determined. It's possible some new APIs will be added in the future.
-
-Function codes have been completely removed. Remove code which conditions on
-these as it will break with the slightest change in the library, OpenSSL or
-BoringSSL.
-
-### `*_ctrl` functions
-
-Some OpenSSL APIs are implemented with `ioctl`-style functions such as
-`SSL_ctrl` and `EVP_PKEY_CTX_ctrl`, combined with convenience macros, such as
-
-    # define SSL_CTX_set_mode(ctx,op) \
-            SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,(op),NULL)
-
-In BoringSSL, these macros have been replaced with proper functions. The
-underlying `_ctrl` functions have been removed.
-
-For convenience, `SSL_CTRL_*` values are retained as macros to `doesnt_exist` so
-existing code which uses them (or the wrapper macros) in `#ifdef` expressions
-will continue to function. However, the macros themselves will not work.
-
-Switch any `*_ctrl` callers to the macro/function versions. This works in both
-OpenSSL and BoringSSL. Note that BoringSSL's function versions will be
-type-checked and may require more care with types. See the end of this
-document for a table of functions to use.
-
-### HMAC `EVP_PKEY`s
-
-`EVP_PKEY_HMAC` is removed. Use the `HMAC_*` functions in `hmac.h` instead. This
-is compatible with OpenSSL.
-
-### DSA `EVP_PKEY`s
-
-`EVP_PKEY_DSA` is deprecated. It is currently still possible to parse DER into a
-DSA `EVP_PKEY`, but signing or verifying with those objects will not work.
-
-### DES
-
-The `DES_cblock` type has been switched from an array to a struct to avoid the
-pitfalls around array types in C. Where features which require DES cannot be
-disabled, BoringSSL-specific codepaths may be necessary.
-
-### TLS renegotiation
-
-OpenSSL enables TLS renegotiation by default and accepts renegotiation requests
-from the peer transparently. Renegotiation is an extremely problematic protocol
-feature, so BoringSSL rejects peer renegotiations by default.
-
-To enable renegotiation, call `SSL_set_renegotiate_mode` and set it to
-`ssl_renegotiate_once` or `ssl_renegotiate_freely`. Renegotiation is only
-supported as a client in TLS and the HelloRequest must be received at a
-quiet point in the application protocol. This is sufficient to support the
-common use of requesting a new client certificate between an HTTP request and
-response in (unpipelined) HTTP/1.1.
-
-Things which do not work:
-
-* There is no support for renegotiation as a server. (Attempts by clients will
-  result in a fatal alert so that ClientHello messages cannot be used to flood
-  a server and escape higher-level limits.)
-
-* There is no support for renegotiation in DTLS.
-
-* There is no support for initiating renegotiation; `SSL_renegotiate` always
-  fails and `SSL_set_state` does nothing.
-
-* Interleaving application data with the new handshake is forbidden.
-
-* If a HelloRequest is received while `SSL_write` has unsent application data,
-  the renegotiation is rejected.
-
-* Renegotiation does not participate in session resumption. The client will
-  not offer a session on renegotiation or resume any session established by a
-  renegotiation handshake.
-
-* The server may not change its certificate in the renegotiation. This mitigates
-  the [triple handshake attack](https://mitls.org/pages/attacks/3SHAKE). Any new
-  stapled OCSP response and SCT list will be ignored. As no authentication state
-  may change, BoringSSL will not re-verify the certificate on a renegotiation.
-  Callbacks such as `SSL_CTX_set_custom_verify` will only run on the initial
-  handshake.
-
-### Lowercase hexadecimal
-
-BoringSSL's `BN_bn2hex` function uses lowercase hexadecimal digits instead of
-uppercase. Some code may require changes to avoid being sensitive to this
-difference.
-
-### Legacy ASN.1 functions
-
-OpenSSL's ASN.1 stack uses `d2i` functions for parsing. They have the form:
-
-    RSA *d2i_RSAPrivateKey(RSA **out, const uint8_t **inp, long len);
-
-In addition to returning the result, OpenSSL places it in `*out` if `out` is
-not `NULL`. On input, if `*out` is not `NULL`, OpenSSL will usually (but not
-always) reuse that object rather than allocating a new one. In BoringSSL, these
-functions will always allocate a new object and free the previous one.
-
-Ensure that callers do not rely on this object reuse behavior. It is
-recommended to avoid the `out` parameter completely and always pass in `NULL`.
-In most cases, even in OpenSSL, relying on object reuse is not safe because, on
-parse error, OpenSSL will free the reused object. Note that less error-prone
-APIs are available for BoringSSL-specific code (see below).
-
-### Memory allocation
-
-OpenSSL provides wrappers `OPENSSL_malloc` and `OPENSSL_free` over the standard
-`malloc` and `free`. Memory allocated by OpenSSL should be released with
-`OPENSSL_free`, not the standard `free`. However, by default, they are
-implemented directly using `malloc` and `free`, so code which mixes them up
-usually works.
-
-In BoringSSL, these functions maintain additional book-keeping to zero memory
-on `OPENSSL_free`, so any mixups must be fixed.
-
-## Optional BoringSSL-specific simplifications
-
-BoringSSL makes some changes to OpenSSL which simplify the API but remain
-compatible with OpenSSL consumers. In general, consult the BoringSSL
-documentation for any functions in new BoringSSL-only code.
-
-### Return values
-
-Most OpenSSL APIs return 1 on success and either 0 or -1 on failure. BoringSSL
-has narrowed most of these to 1 on success and 0 on failure. BoringSSL-specific
-code may take advantage of the less error-prone APIs and use `!` to check for
-errors.
-
-### Initialization
-
-OpenSSL has a number of different initialization functions for setting up error
-strings and loading algorithms, etc. All of these functions still exist in
-BoringSSL for convenience, but they do nothing and are not necessary. BoringSSL
-internally initializes itself as needed.
-
-### Threading
-
-OpenSSL provides a number of APIs to configure threading callbacks and set up
-locks. Without initializing these, the library is not thread-safe. Configuring
-these does nothing in BoringSSL. Instead, BoringSSL calls pthreads and the
-corresponding Windows APIs internally and is always thread-safe where the API
-guarantees it.
-
-### ASN.1
-
-BoringSSL is in the process of deprecating OpenSSL's `d2i` and `i2d` in favor of
-new functions using the much less error-prone `CBS` and `CBB` types.
-BoringSSL-only code should use those functions where available.
-
-
-## Replacements for `CTRL` values
-
-When porting code which uses `SSL_CTX_ctrl` or `SSL_ctrl`, use the replacement
-functions below. If a function has both `SSL_CTX` and `SSL` variants, only the
-`SSL_CTX` version is listed.
-
-Note some values correspond to multiple functions depending on the `larg`
-parameter.
-
-`CTRL` value | Replacement function(s)
--------------|-------------------------
-`DTLS_CTRL_GET_TIMEOUT` | `DTLSv1_get_timeout`
-`DTLS_CTRL_HANDLE_TIMEOUT` | `DTLSv1_handle_timeout`
-`SSL_CTRL_CHAIN` | `SSL_CTX_set0_chain` or `SSL_CTX_set1_chain`
-`SSL_CTRL_CHAIN_CERT` | `SSL_add0_chain_cert` or `SSL_add1_chain_cert`
-`SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS` | `SSL_CTX_clear_extra_chain_certs`
-`SSL_CTRL_CLEAR_MODE` | `SSL_CTX_clear_mode`
-`SSL_CTRL_CLEAR_OPTIONS` | `SSL_CTX_clear_options`
-`SSL_CTRL_EXTRA_CHAIN_CERT` | `SSL_CTX_add_extra_chain_cert`
-`SSL_CTRL_GET_CHAIN_CERTS` | `SSL_CTX_get0_chain_certs`
-`SSL_CTRL_GET_CLIENT_CERT_TYPES` | `SSL_get0_certificate_types`
-`SSL_CTRL_GET_EXTRA_CHAIN_CERTS` | `SSL_CTX_get_extra_chain_certs` or `SSL_CTX_get_extra_chain_certs_only`
-`SSL_CTRL_GET_MAX_CERT_LIST` | `SSL_CTX_get_max_cert_list`
-`SSL_CTRL_GET_NUM_RENEGOTIATIONS` | `SSL_num_renegotiations`
-`SSL_CTRL_GET_READ_AHEAD` | `SSL_CTX_get_read_ahead`
-`SSL_CTRL_GET_RI_SUPPORT` | `SSL_get_secure_renegotiation_support`
-`SSL_CTRL_GET_SESSION_REUSED` | `SSL_session_reused`
-`SSL_CTRL_GET_SESS_CACHE_MODE` | `SSL_CTX_get_session_cache_mode`
-`SSL_CTRL_GET_SESS_CACHE_SIZE` | `SSL_CTX_sess_get_cache_size`
-`SSL_CTRL_GET_TLSEXT_TICKET_KEYS` | `SSL_CTX_get_tlsext_ticket_keys`
-`SSL_CTRL_GET_TOTAL_RENEGOTIATIONS` | `SSL_total_renegotiations`
-`SSL_CTRL_MODE` | `SSL_CTX_get_mode` or `SSL_CTX_set_mode`
-`SSL_CTRL_NEED_TMP_RSA` | `SSL_CTX_need_tmp_RSA` is equivalent, but [*do not use this function*](https://freakattack.com/). (It is a no-op in BoringSSL.)
-`SSL_CTRL_OPTIONS` | `SSL_CTX_get_options` or `SSL_CTX_set_options`
-`SSL_CTRL_SESS_NUMBER` | `SSL_CTX_sess_number`
-`SSL_CTRL_SET_CURVES` | `SSL_CTX_set1_curves`
-`SSL_CTRL_SET_ECDH_AUTO` | `SSL_CTX_set_ecdh_auto`
-`SSL_CTRL_SET_MAX_CERT_LIST` | `SSL_CTX_set_max_cert_list`
-`SSL_CTRL_SET_MAX_SEND_FRAGMENT` | `SSL_CTX_set_max_send_fragment`
-`SSL_CTRL_SET_MSG_CALLBACK` | `SSL_set_msg_callback`
-`SSL_CTRL_SET_MSG_CALLBACK_ARG` | `SSL_set_msg_callback_arg`
-`SSL_CTRL_SET_MTU` | `SSL_set_mtu`
-`SSL_CTRL_SET_READ_AHEAD` | `SSL_CTX_set_read_ahead`
-`SSL_CTRL_SET_SESS_CACHE_MODE` | `SSL_CTX_set_session_cache_mode`
-`SSL_CTRL_SET_SESS_CACHE_SIZE` | `SSL_CTX_sess_set_cache_size`
-`SSL_CTRL_SET_TLSEXT_HOSTNAME` | `SSL_set_tlsext_host_name`
-`SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG` | `SSL_CTX_set_tlsext_servername_arg`
-`SSL_CTRL_SET_TLSEXT_SERVERNAME_CB` | `SSL_CTX_set_tlsext_servername_callback`
-`SSL_CTRL_SET_TLSEXT_TICKET_KEYS` | `SSL_CTX_set_tlsext_ticket_keys`
-`SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB` | `SSL_CTX_set_tlsext_ticket_key_cb`
-`SSL_CTRL_SET_TMP_DH` | `SSL_CTX_set_tmp_dh`
-`SSL_CTRL_SET_TMP_DH_CB` | `SSL_CTX_set_tmp_dh_callback`
-`SSL_CTRL_SET_TMP_ECDH` | `SSL_CTX_set_tmp_ecdh`
-`SSL_CTRL_SET_TMP_ECDH_CB` | `SSL_CTX_set_tmp_ecdh_callback`
-`SSL_CTRL_SET_TMP_RSA` | `SSL_CTX_set_tmp_rsa` is equivalent, but [*do not use this function*](https://freakattack.com/). (It is a no-op in BoringSSL.)
-`SSL_CTRL_SET_TMP_RSA_CB` | `SSL_CTX_set_tmp_rsa_callback` is equivalent, but [*do not use this function*](https://freakattack.com/). (It is a no-op in BoringSSL.)
-
-## Significant API additions
-
-In some places, BoringSSL has added significant APIs. Use of these APIs goes beyound “porting” and means giving up on OpenSSL compatibility.
-
-One example of this has already been mentioned: the [CBS and CBB](https://commondatastorage.googleapis.com/chromium-boringssl-docs/bytestring.h.html) functions should be used whenever parsing or serialising data.
-
-### CRYPTO\_BUFFER
-
-With the standard OpenSSL APIs, when making many TLS connections, the certificate data for each connection is retained in memory in an expensive `X509` structure. Additionally, common certificates often appear in the chains for multiple connections and are needlessly duplicated in memory.
-
-A [`CRYPTO_BUFFER`](https://commondatastorage.googleapis.com/chromium-boringssl-docs/pool.h.html) is just an opaque byte string. A `CRYPTO_BUFFER_POOL` is an intern table for these buffers, i.e. it ensures that only a single copy of any given byte string is kept for each pool.
-
-The function `TLS_with_buffers_method` returns an `SSL_METHOD` that avoids creating `X509` objects for certificates. Additionally, `SSL_CTX_set0_buffer_pool` can be used to install a pool on an `SSL_CTX` so that certificates can be deduplicated across connections and across `SSL_CTX`s.
-
-When using these functions, the application also needs to ensure that it doesn't call other functions that deal with `X509` or `X509_NAME` objects. For example, `SSL_get_peer_certificate` or `SSL_get_peer_cert_chain`. Doing so will trigger an assert in debug mode and will result in NULLs in release mode. Instead, call the buffer-based alternatives such as `SSL_get0_peer_certificates`. (See [ssl.h](https://commondatastorage.googleapis.com/chromium-boringssl-docs/ssl.h.html) for functions taking or returning `CRYPTO_BUFFER`.) The buffer-based alternative functions will work even when not using `TLS_with_buffers_method`, thus application code can transition gradually.
-
-In order to use buffers, the application code also needs to implement its own certificate verification using `SSL_[CTX_]set_custom_verify`. Otherwise all connections will fail with a verification error. Auto-chaining is also disabled when using buffers.
-
-Once those changes have been completed, the whole of the OpenSSL X.509 and ASN.1 code should be eliminated by the linker if BoringSSL is linked statically.
-
-### Asynchronous and opaque private keys
-
-OpenSSL offers the ENGINE API for implementing opaque private keys (i.e. private keys where software only has oracle access because the secrets are held in special hardware or on another machine). While the ENGINE API has been mostly removed from BoringSSL, it is still possible to support opaque keys in this way. However, when using such keys with TLS and BoringSSL, you should strongly prefer using `SSL_PRIVATE_KEY_METHOD` via `SSL[_CTX]_set_private_key_method`. This allows a handshake to be suspended while the private operation is in progress. It also supports more forms of opaque key as it exposes higher-level information about the operation to be performed.
diff --git a/src/PrivacyInfo.xcprivacy b/src/PrivacyInfo.xcprivacy
deleted file mode 100644
index dc3a906..0000000
--- a/src/PrivacyInfo.xcprivacy
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-
-<!--
-This file is for using BoringSSL in Apple ecosystems. You may have to point
-Xcode at it yourself. See
-https://developer.apple.com/documentation/bundleresources/privacy_manifest_files
--->
-
-<dict>
-	<key>NSPrivacyTracking</key>
-	<false/>
-	<key>NSPrivacyTrackingDomains</key>
-	<array/>
-	<key>NSPrivacyCollectedDataTypes</key>
-	<array/>
-	<key>NSPrivacyAccessedAPITypes</key>
-	<array/>
-</dict>
-</plist>
diff --git a/src/README.md b/src/README.md
deleted file mode 100644
index fc5d5e2..0000000
--- a/src/README.md
+++ /dev/null
@@ -1,45 +0,0 @@
-# BoringSSL
-
-BoringSSL is a fork of OpenSSL that is designed to meet Google's needs.
-
-Although BoringSSL is an open source project, it is not intended for general
-use, as OpenSSL is. We don't recommend that third parties depend upon it. Doing
-so is likely to be frustrating because there are no guarantees of API or ABI
-stability.
-
-Programs ship their own copies of BoringSSL when they use it and we update
-everything as needed when deciding to make API changes. This allows us to
-mostly avoid compromises in the name of compatibility. It works for us, but it
-may not work for you.
-
-BoringSSL arose because Google used OpenSSL for many years in various ways and,
-over time, built up a large number of patches that were maintained while
-tracking upstream OpenSSL. As Google's product portfolio became more complex,
-more copies of OpenSSL sprung up and the effort involved in maintaining all
-these patches in multiple places was growing steadily.
-
-Currently BoringSSL is the SSL library in Chrome/Chromium, Android (but it's
-not part of the NDK) and a number of other apps/programs.
-
-Project links:
-
-  * [API documentation](https://commondatastorage.googleapis.com/chromium-boringssl-docs/headers.html)
-  * [Issue tracker](https://crbug.com/boringssl)
-    * [Filing new (public) issues](https://crbug.com/boringssl/new)
-  * [CI](https://ci.chromium.org/p/boringssl/g/main/console)
-  * [Code review](https://boringssl-review.googlesource.com)
-
-To file a security issue, use the [Chromium process](https://www.chromium.org/Home/chromium-security/reporting-security-bugs/) and mention in the report this is for BoringSSL. You can ignore the parts of the process that are specific to Chromium/Chrome.
-
-There are other files in this directory which might be helpful:
-
-  * [PORTING.md](./PORTING.md): how to port OpenSSL-using code to BoringSSL.
-  * [BUILDING.md](./BUILDING.md): how to build BoringSSL
-  * [INCORPORATING.md](./INCORPORATING.md): how to incorporate BoringSSL into a project.
-  * [API-CONVENTIONS.md](./API-CONVENTIONS.md): general API conventions for BoringSSL consumers and developers.
-  * [STYLE.md](./STYLE.md): rules and guidelines for coding style.
-  * include/openssl: public headers with API documentation in comments. Also [available online](https://commondatastorage.googleapis.com/chromium-boringssl-docs/headers.html).
-  * [FUZZING.md](./FUZZING.md): information about fuzzing BoringSSL.
-  * [CONTRIBUTING.md](./CONTRIBUTING.md): how to contribute to BoringSSL.
-  * [BREAKING-CHANGES.md](./BREAKING-CHANGES.md): notes on potentially-breaking changes.
-  * [SANDBOXING.md](./SANDBOXING.md): notes on using BoringSSL in a sandboxed environment.
diff --git a/src/SANDBOXING.md b/src/SANDBOXING.md
deleted file mode 100644
index 0f3eb70..0000000
--- a/src/SANDBOXING.md
+++ /dev/null
@@ -1,140 +0,0 @@
-# Using BoringSSL in a Sandbox
-
-Sandboxes are a valuable tool for securing applications, so BoringSSL aims to
-support them. However, it is difficult to make concrete API guarantees with
-sandboxes. Sandboxes remove low-level OS resources and system calls, which
-breaks platform abstractions. A syscall-filtering sandbox may, for instance, be
-sensitive to otherwise non-breaking changes to use newer syscalls
-in either BoringSSL or the C library.
-
-Some functions in BoringSSL, such as `BIO_new_file`, inherently need OS
-resources like the filesystem. We assume that sandboxed consumers either avoid
-those functions or make necessary resources available. Other functions like
-`RSA_sign` are purely computational, but still have some baseline OS
-dependencies.
-
-Sandboxes which drop privileges partway through a process's lifetime are
-additionally sensitive to OS resources retained across the transitions. For
-instance, if a library function internally opened and retained a handle to the
-user's home directory, and then the application called `chroot`, that handle
-would be a sandbox escape.
-
-This document attempts to describe these baseline OS dependencies and long-lived
-internal resources. These dependencies may change over time, but we aim to
-[work with sandboxed consumers](./BREAKING-CHANGES.md) when they do. However,
-each sandbox imposes different constraints, so, above all, sandboxed consumers
-must have ample test coverage to detect issues as they arise.
-
-## Baseline dependencies
-
-Callers must assume that any BoringSSL function may perform one of the following
-operations:
-
-### Memory allocation
-
-Any BoringSSL function may allocate memory via `malloc` and related functions.
-
-### Thread synchronization
-
-Any BoringSSL function may call into the platform's thread synchronization
-primitives, including read/write locks and the equivalent of `pthread_once`.
-These must succeed, or BoringSSL will abort the process. Callers, however, can
-assume that BoringSSL functions will not spawn internal threads, unless
-otherwise documented.
-
-Syscall-filtering sandboxes should note that BoringSSL uses `pthread_rwlock_t`
-on POSIX systems, which is less common and may not be part of other libraries'
-syscall surface. Additionally, thread synchronization primitives usually have an
-atomics-based fast path. If a sandbox blocks a necessary pthreads syscall, it
-may not show up in testing without lock contention.
-
-### Standard error
-
-Any BoringSSL function may write to `stderr` or file descriptor
-`STDERR_FILENO` (2), either via `FILE` APIs or low-level functions like `write`.
-Writes to `stderr` may fail, but there must some file at `STDERR_FILENO` which
-will tolerate error messages from BoringSSL. (The file descriptor must be
-allocated so calls to `open` do not accidentally open something else there.)
-
-Note some C standard library implementations also log to `stderr`, so callers
-should ensure this regardless.
-
-### Entropy
-
-Any BoringSSL function may draw entropy from the OS. On Windows, this uses
-`RtlGenRandom` and, on POSIX systems, this uses `getrandom`, `getentropy`, or a
-`read` from a file descriptor to `/dev/urandom`. These operations must succeed
-or BoringSSL will abort the process. BoringSSL only probes for `getrandom`
-support once and assumes support is consistent for the lifetime of the address
-space (and any copies made via `fork`). If a syscall-filtering sandbox is
-enabled partway through this lifetime and changes whether `getrandom` works,
-BoringSSL may abort the process. Sandboxes are recommended to allow
-`getrandom`.
-
-Note even deterministic algorithms may require OS entropy. For example,
-RSASSA-PKCS1-v1_5 is deterministic, but BoringSSL draws entropy to implement
-RSA blinding.
-
-Entropy gathering additionally has some initialization dependencies described in
-the following section.
-
-## Initialization
-
-BoringSSL has some uncommon OS dependencies which are only used once to
-initialize some state. Sandboxes which drop privileges after some setup work may
-use `CRYPTO_pre_sandbox_init` to initialize this state ahead of time. Otherwise,
-callers must assume any BoringSSL function may depend on these resources, in
-addition to the operations above.
-
-### CPU capabilities
-
-On Linux ARM platforms, BoringSSL depends on OS APIs to query CPU capabilities.
-32-bit and 64-bit ARM both depend on the `getauxval` function. 32-bit ARM, to
-work around bugs in older Android devices, may additionally read
-`/proc/cpuinfo`.
-
-On 64-bit Apple ARM platforms, BoringSSL needs to query `hw.optional.*` sysctls.
-
-If querying CPU capabilities fails, BoringSSL will still function, but may not
-perform as well.
-
-### Entropy
-
-On Linux systems without a working `getrandom`, drawing entropy from the OS
-additionally requires opening `/dev/urandom`. If this fails, BoringSSL will
-abort the process. BoringSSL retains the resulting file descriptor, even across
-privilege transitions.
-
-### Fork protection
-
-On Linux, BoringSSL allocates a page and calls `madvise` with `MADV_WIPEONFORK`
-to protect single-use state from `fork`. This operation must not crash, but if
-it fails, BoringSSL will use alternate fork-safety strategies, potentially at a
-performance cost. If it succeeds, BoringSSL assumes `MADV_WIPEONFORK` is
-functional and relies on it for fork-safety. Sandboxes must not report success
-if they ignore the `MADV_WIPEONFORK` flag. As of writing, QEMU will ignore
-`madvise` calls and report success, so BoringSSL detects this by calling
-`madvise` with -1. Sandboxes must cleanly report an error instead of crashing.
-
-Once initialized, this mechanism does not require system calls in the steady
-state, though note the configured page will be inherited across privilege
-transitions.
-
-## C and C++ standard library
-
-BoringSSL depends on the C and C++ standard libraries which, themselves, do not
-make any guarantees about sandboxes. If it produces the correct answer and has
-no observable invalid side effects, it is possible, though unreasonable, for
-`memcmp` to create and close a socket.
-
-BoringSSL assumes that functions in the C and C++ library only have the platform
-dependencies which would be "reasonable". For instance, a function in BoringSSL
-which aims not to open files will still freely call any libc memory and
-string functions.
-
-Note some C functions, such as `strerror`, may read files relating to the user's
-locale. BoringSSL may trigger these paths and assumes the sandbox environment
-will tolerate this. BoringSSL additionally cannot make guarantees about which
-system calls are used by standard library's syscall wrappers. In some cases, the
-compiler may add dependencies. (Some C++ language features emit locking code.)
-Syscall-filtering sandboxes may need updates as these dependencies change.
diff --git a/src/STYLE.md b/src/STYLE.md
deleted file mode 100644
index 1b6bd0b..0000000
--- a/src/STYLE.md
+++ /dev/null
@@ -1,233 +0,0 @@
-# BoringSSL Style Guide
-
-BoringSSL usually follows the
-[Google C++ style guide](https://google.github.io/styleguide/cppguide.html),
-The rest of this document describes differences and clarifications on
-top of the base guide.
-
-
-## Legacy code
-
-As a derivative of OpenSSL, BoringSSL contains a lot of legacy code that
-does not follow this style guide. Particularly where public API is
-concerned, balance consistency within a module with the benefits of a
-given rule. Module-wide deviations on naming should be respected while
-integer and return value conventions take precedence over consistency.
-
-Modules from OpenSSL's legacy ASN.1 and X.509 stack are retained for
-compatibility and left largely unmodified. To ease importing patches from
-upstream, they match OpenSSL's new indentation style. For Emacs,
-`doc/openssl-c-indent.el` from OpenSSL may be helpful in this.
-
-
-## Language
-
-The majority of the project is in C, so C++-specific rules in the
-Google style guide do not apply. Support for C99 features depends on
-our target platforms. Typically, Chromium's target MSVC is the most
-restrictive.
-
-Variable declarations in the middle of a function or inside a `for` loop are
-allowed and preferred where possible. Note that the common `goto err` cleanup
-pattern requires lifting some variable declarations.
-
-Comments should be `// C99-style` for consistency with C++.
-
-When declaring pointer types, `*` should be placed next to the variable name,
-not the type. So
-
-    uint8_t *ptr;
-
-not
-
-    uint8_t* ptr;
-
-Rather than `malloc()` and `free()`, use the wrappers `OPENSSL_malloc()`
-and `OPENSSL_free()`. Use the standard C `assert()` function freely.
-
-Use the following wrappers, found in `crypto/internal.h` instead of the
-corresponding C standard library functions. They behave the same but avoid
-confusing undefined behavior.
-
-* `OPENSSL_memchr`
-* `OPENSSL_memcmp`
-* `OPENSSL_memcpy`
-* `OPENSSL_memmove`
-* `OPENSSL_memset`
-
-For new constants, prefer enums when the values are sequential and typed
-constants for flags. If adding values to an existing set of `#define`s,
-continue with `#define`.
-
-
-## libssl
-
-libssl was originally written in C but is being incrementally rewritten in
-C++11. As of writing, much of the style matches our C conventions rather than
-Google C++. Additionally, libssl on Linux currently may not depend on the C++
-runtime. See the C++ utilities in `ssl/internal.h` for replacements for
-problematic C++ constructs. The `util/check_imported_libraries.go` script may be
-used with a shared library build to check if a new construct is okay.
-
-If unsure, match surrounding code. Discrepancies between it and Google C++ style
-will be fixed over time.
-
-
-## Formatting
-
-Single-statement blocks are not allowed. All conditions and loops must
-use braces:
-
-    if (foo) {
-      do_something();
-    }
-
-not
-
-    if (foo)
-      do_something();
-
-
-## Integers
-
-Prefer using explicitly-sized integers where appropriate rather than
-generic C ones. For instance, to represent a byte, use `uint8_t`, not
-`unsigned char`. Likewise, represent a two-byte field as `uint16_t`, not
-`unsigned short`.
-
-Sizes are represented as `size_t`.
-
-Within a struct that is retained across the lifetime of an SSL
-connection, if bounds of a size are known and it's easy, use a smaller
-integer type like `uint8_t`. This is a "free" connection footprint
-optimization for servers. Don't make code significantly more complex for
-it, and do still check the bounds when passing in and out of the
-struct. This narrowing should not propagate to local variables and
-function parameters.
-
-When doing arithmetic, account for overflow conditions.
-
-Except with platform APIs, do not use `ssize_t`. MSVC lacks it, and
-prefer out-of-band error signaling for `size_t` (see Return values).
-
-
-## Naming
-
-Follow Google naming conventions in C++ files. In C files, use the
-following naming conventions for consistency with existing OpenSSL and C
-styles:
-
-Define structs with typedef named `TYPE_NAME`. The corresponding struct
-should be named `struct type_name_st`.
-
-Name public functions as `MODULE_function_name`, unless the module
-already uses a different naming scheme for legacy reasons. The module
-name should be a type name if the function is a method of a particular
-type.
-
-Some types are allocated within the library while others are initialized
-into a struct allocated by the caller, often on the stack. Name these
-functions `TYPE_NAME_new`/`TYPE_NAME_free` and
-`TYPE_NAME_init`/`TYPE_NAME_cleanup`, respectively. All `TYPE_NAME_free`
-functions must do nothing on `NULL` input.
-
-If a variable is the length of a pointer value, it has the suffix
-`_len`. An output parameter is named `out` or has an `out_` prefix. For
-instance, For instance:
-
-    uint8_t *out,
-    size_t *out_len,
-    const uint8_t *in,
-    size_t in_len,
-
-Name public headers like `include/openssl/evp.h` with header guards like
-`OPENSSL_HEADER_EVP_H`. Name internal headers like
-`crypto/ec/internal.h` with header guards like
-`OPENSSL_HEADER_CRYPTO_EC_INTERNAL_H`.
-
-Name enums like `enum unix_hacker_t`. For instance:
-
-    enum should_free_handshake_buffer_t {
-      free_handshake_buffer,
-      dont_free_handshake_buffer,
-    };
-
-
-## Return values
-
-As even `malloc` may fail in BoringSSL, the vast majority of functions
-will have a failure case. Functions should return `int` with one on
-success and zero on error. Do not overload the return value to both
-signal success/failure and output an integer. For example:
-
-    OPENSSL_EXPORT int CBS_get_u16(CBS *cbs, uint16_t *out);
-
-If a function needs more than a true/false result code, define an enum
-rather than arbitrarily assigning meaning to int values.
-
-If a function outputs a pointer to an object on success and there are no
-other outputs, return the pointer directly and `NULL` on error.
-
-
-## Parameters
-
-Where not constrained by legacy code, parameter order should be:
-
-1. context parameters
-2. output parameters
-3. input parameters
-
-For example,
-
-    /* CBB_add_asn sets |*out_contents| to a |CBB| into which the contents of an
-     * ASN.1 object can be written. The |tag| argument will be used as the tag for
-     * the object. It returns one on success or zero on error. */
-    OPENSSL_EXPORT int CBB_add_asn1(CBB *cbb, CBB *out_contents, unsigned tag);
-
-
-## Documentation
-
-All public symbols must have a documentation comment in their header
-file. The style is based on that of Go. The first sentence begins with
-the symbol name, optionally prefixed with "A" or "An". Apart from the
-initial mention of symbol, references to other symbols or parameter
-names should be surrounded by |pipes|.
-
-Documentation should be concise but completely describe the exposed
-behavior of the function. Pay special note to success/failure behaviors
-and caller obligations on object lifetimes. If this sacrifices
-conciseness, consider simplifying the function's behavior.
-
-    // EVP_DigestVerifyUpdate appends |len| bytes from |data| to the data which
-    // will be verified by |EVP_DigestVerifyFinal|. It returns one on success and
-    // zero otherwise.
-    OPENSSL_EXPORT int EVP_DigestVerifyUpdate(EVP_MD_CTX *ctx, const void *data,
-                                              size_t len);
-
-Explicitly mention any surprising edge cases or deviations from common
-return value patterns in legacy functions.
-
-    // RSA_private_encrypt encrypts |flen| bytes from |from| with the private key in
-    // |rsa| and writes the encrypted data to |to|. The |to| buffer must have at
-    // least |RSA_size| bytes of space. It returns the number of bytes written, or
-    // -1 on error. The |padding| argument must be one of the |RSA_*_PADDING|
-    // values. If in doubt, |RSA_PKCS1_PADDING| is the most common.
-    //
-    // WARNING: this function is dangerous because it breaks the usual return value
-    // convention. Use |RSA_sign_raw| instead.
-    OPENSSL_EXPORT int RSA_private_encrypt(int flen, const uint8_t *from,
-                                           uint8_t *to, RSA *rsa, int padding);
-
-Document private functions in their `internal.h` header or, if static,
-where defined.
-
-
-## Build logic
-
-BoringSSL is used by many projects with many different build tools.
-Reimplementing and maintaining build logic in each downstream build is
-cumbersome, so build logic should be avoided where possible. Platform-specific
-files should be excluded by wrapping the contents in `#ifdef`s, rather than
-computing platform-specific file lists. Generated source files such as perlasm
-and `err_data.c` may be used in the standalone CMake build but, for downstream
-builds, they should be pre-generated in `generate_build_files.py`.
diff --git a/src/build.json b/src/build.json
deleted file mode 100644
index 67d3992..0000000
--- a/src/build.json
+++ /dev/null
@@ -1,1069 +0,0 @@
-// This file defines BoringSSL's build, expressed in terms of the input source
-// files that BoringSSL developers edit. It is a JSON file with line comments,
-// with line comments removed before parsing. It drives ./util/pregenerate which
-// converts some of those inputs (e.g. perlasm files) into pre-generated
-// outputs. This produces a more simplified build, which is then converted into
-// build files of various syntaxes.
-//
-// When modifying this file, run `go run ./util/pregenerate`. See gen/README.md
-// for more details, and util/pregenerate/build.go for the schema.
-//
-// TODO(crbug.com/boringssl/542): Moving build inputs to this file is still work
-// in progress, so this file is currently incomplete.
-{
-    "bcm": {
-        "srcs": [
-            "crypto/fipsmodule/bcm.cc"
-        ],
-        "internal_hdrs": [
-            "crypto/fipsmodule/aes/aes.cc.inc",
-            "crypto/fipsmodule/aes/aes_nohw.cc.inc",
-            "crypto/fipsmodule/aes/cbc.cc.inc",
-            "crypto/fipsmodule/aes/cfb.cc.inc",
-            "crypto/fipsmodule/aes/ctr.cc.inc",
-            "crypto/fipsmodule/aes/gcm.cc.inc",
-            "crypto/fipsmodule/aes/gcm_nohw.cc.inc",
-            "crypto/fipsmodule/aes/key_wrap.cc.inc",
-            "crypto/fipsmodule/aes/mode_wrappers.cc.inc",
-            "crypto/fipsmodule/aes/ofb.cc.inc",
-            "crypto/fipsmodule/bn/add.cc.inc",
-            "crypto/fipsmodule/bn/asm/x86_64-gcc.cc.inc",
-            "crypto/fipsmodule/bn/bn.cc.inc",
-            "crypto/fipsmodule/bn/bytes.cc.inc",
-            "crypto/fipsmodule/bn/cmp.cc.inc",
-            "crypto/fipsmodule/bn/ctx.cc.inc",
-            "crypto/fipsmodule/bn/div.cc.inc",
-            "crypto/fipsmodule/bn/div_extra.cc.inc",
-            "crypto/fipsmodule/bn/exponentiation.cc.inc",
-            "crypto/fipsmodule/bn/gcd.cc.inc",
-            "crypto/fipsmodule/bn/gcd_extra.cc.inc",
-            "crypto/fipsmodule/bn/generic.cc.inc",
-            "crypto/fipsmodule/bn/jacobi.cc.inc",
-            "crypto/fipsmodule/bn/montgomery.cc.inc",
-            "crypto/fipsmodule/bn/montgomery_inv.cc.inc",
-            "crypto/fipsmodule/bn/mul.cc.inc",
-            "crypto/fipsmodule/bn/prime.cc.inc",
-            "crypto/fipsmodule/bn/random.cc.inc",
-            "crypto/fipsmodule/bn/rsaz_exp.cc.inc",
-            "crypto/fipsmodule/bn/shift.cc.inc",
-            "crypto/fipsmodule/bn/sqrt.cc.inc",
-            "crypto/fipsmodule/cipher/aead.cc.inc",
-            "crypto/fipsmodule/cipher/cipher.cc.inc",
-            "crypto/fipsmodule/cipher/e_aes.cc.inc",
-            "crypto/fipsmodule/cipher/e_aesccm.cc.inc",
-            "crypto/fipsmodule/cmac/cmac.cc.inc",
-            "crypto/fipsmodule/dh/check.cc.inc",
-            "crypto/fipsmodule/dh/dh.cc.inc",
-            "crypto/fipsmodule/digest/digest.cc.inc",
-            "crypto/fipsmodule/digest/digests.cc.inc",
-            "crypto/fipsmodule/digestsign/digestsign.cc.inc",
-            "crypto/fipsmodule/ec/ec.cc.inc",
-            "crypto/fipsmodule/ec/ec_key.cc.inc",
-            "crypto/fipsmodule/ec/ec_montgomery.cc.inc",
-            "crypto/fipsmodule/ec/felem.cc.inc",
-            "crypto/fipsmodule/ec/oct.cc.inc",
-            "crypto/fipsmodule/ec/p224-64.cc.inc",
-            "crypto/fipsmodule/ec/p256-nistz.cc.inc",
-            "crypto/fipsmodule/ec/p256.cc.inc",
-            "crypto/fipsmodule/ec/scalar.cc.inc",
-            "crypto/fipsmodule/ec/simple.cc.inc",
-            "crypto/fipsmodule/ec/simple_mul.cc.inc",
-            "crypto/fipsmodule/ec/util.cc.inc",
-            "crypto/fipsmodule/ec/wnaf.cc.inc",
-            "crypto/fipsmodule/ecdh/ecdh.cc.inc",
-            "crypto/fipsmodule/ecdsa/ecdsa.cc.inc",
-            "crypto/fipsmodule/hkdf/hkdf.cc.inc",
-            "crypto/fipsmodule/hmac/hmac.cc.inc",
-            "crypto/fipsmodule/keccak/keccak.cc.inc",
-            "crypto/fipsmodule/mldsa/fips_known_values.inc",
-            "crypto/fipsmodule/mldsa/mldsa.cc.inc",
-            "crypto/fipsmodule/mlkem/fips_known_values.inc",
-            "crypto/fipsmodule/mlkem/mlkem.cc.inc",
-            "crypto/fipsmodule/rand/ctrdrbg.cc.inc",
-            "crypto/fipsmodule/rand/rand.cc.inc",
-            "crypto/fipsmodule/rsa/blinding.cc.inc",
-            "crypto/fipsmodule/rsa/padding.cc.inc",
-            "crypto/fipsmodule/rsa/rsa.cc.inc",
-            "crypto/fipsmodule/rsa/rsa_impl.cc.inc",
-            "crypto/fipsmodule/self_check/fips.cc.inc",
-            "crypto/fipsmodule/self_check/self_check.cc.inc",
-            "crypto/fipsmodule/service_indicator/service_indicator.cc.inc",
-            "crypto/fipsmodule/sha/sha1.cc.inc",
-            "crypto/fipsmodule/sha/sha256.cc.inc",
-            "crypto/fipsmodule/sha/sha512.cc.inc",
-            "crypto/fipsmodule/slhdsa/fors.cc.inc",
-            "crypto/fipsmodule/slhdsa/merkle.cc.inc",
-            "crypto/fipsmodule/slhdsa/slhdsa.cc.inc",
-            "crypto/fipsmodule/slhdsa/thash.cc.inc",
-            "crypto/fipsmodule/slhdsa/wots.cc.inc",
-            "crypto/fipsmodule/slhdsa/fips_known_values.inc",
-            "crypto/fipsmodule/tls/kdf.cc.inc"
-        ],
-        "asm": [
-            "third_party/fiat/asm/fiat_p256_adx_mul.S",
-            "third_party/fiat/asm/fiat_p256_adx_sqr.S"
-        ],
-        "perlasm_aarch64": [
-            {"src": "crypto/fipsmodule/aes/asm/aesv8-armx.pl", "dst": "aesv8-armv8"},
-            {"src": "crypto/fipsmodule/aes/asm/aesv8-gcm-armv8.pl"},
-            {"src": "crypto/fipsmodule/bn/asm/armv8-mont.pl"},
-            {"src": "crypto/fipsmodule/bn/asm/bn-armv8.pl"},
-            {"src": "crypto/fipsmodule/aes/asm/ghash-neon-armv8.pl"},
-            {"src": "crypto/fipsmodule/aes/asm/ghashv8-armx.pl", "dst": "ghashv8-armv8"},
-            {"src": "crypto/fipsmodule/ec/asm/p256_beeu-armv8-asm.pl"},
-            {"src": "crypto/fipsmodule/ec/asm/p256-armv8-asm.pl"},
-            {"src": "crypto/fipsmodule/sha/asm/sha1-armv8.pl"},
-            {"src": "crypto/fipsmodule/sha/asm/sha512-armv8.pl", "args": ["sha256"], "dst": "sha256-armv8"},
-            {"src": "crypto/fipsmodule/sha/asm/sha512-armv8.pl", "args": ["sha512"]},
-            {"src": "crypto/fipsmodule/aes/asm/vpaes-armv8.pl"}
-        ],
-        "perlasm_arm": [
-            {"src": "crypto/fipsmodule/aes/asm/aesv8-armx.pl", "dst": "aesv8-armv7"},
-            {"src": "crypto/fipsmodule/bn/asm/armv4-mont.pl"},
-            {"src": "crypto/fipsmodule/aes/asm/bsaes-armv7.pl"},
-            {"src": "crypto/fipsmodule/aes/asm/ghash-armv4.pl"},
-            {"src": "crypto/fipsmodule/aes/asm/ghashv8-armx.pl", "dst": "ghashv8-armv7"},
-            {"src": "crypto/fipsmodule/sha/asm/sha1-armv4-large.pl"},
-            {"src": "crypto/fipsmodule/sha/asm/sha256-armv4.pl"},
-            {"src": "crypto/fipsmodule/sha/asm/sha512-armv4.pl"},
-            {"src": "crypto/fipsmodule/aes/asm/vpaes-armv7.pl"}
-        ],
-        "perlasm_x86": [
-            {"src": "crypto/fipsmodule/aes/asm/aesni-x86.pl"},
-            {"src": "crypto/fipsmodule/bn/asm/bn-586.pl"},
-            {"src": "crypto/fipsmodule/bn/asm/co-586.pl"},
-            {"src": "crypto/fipsmodule/aes/asm/ghash-ssse3-x86.pl"},
-            {"src": "crypto/fipsmodule/aes/asm/ghash-x86.pl"},
-            {"src": "crypto/fipsmodule/sha/asm/sha1-586.pl"},
-            {"src": "crypto/fipsmodule/sha/asm/sha256-586.pl"},
-            {"src": "crypto/fipsmodule/sha/asm/sha512-586.pl"},
-            {"src": "crypto/fipsmodule/aes/asm/vpaes-x86.pl"},
-            {"src": "crypto/fipsmodule/bn/asm/x86-mont.pl"}
-        ],
-        "perlasm_x86_64": [
-            {"src": "crypto/fipsmodule/aes/asm/aesni-gcm-x86_64.pl"},
-            {"src": "crypto/fipsmodule/aes/asm/aes-gcm-avx2-x86_64.pl"},
-            {"src": "crypto/fipsmodule/aes/asm/aes-gcm-avx512-x86_64.pl"},
-            {"src": "crypto/fipsmodule/aes/asm/aesni-x86_64.pl"},
-            {"src": "crypto/fipsmodule/aes/asm/ghash-ssse3-x86_64.pl"},
-            {"src": "crypto/fipsmodule/aes/asm/ghash-x86_64.pl"},
-            {"src": "crypto/fipsmodule/ec/asm/p256_beeu-x86_64-asm.pl"},
-            {"src": "crypto/fipsmodule/ec/asm/p256-x86_64-asm.pl"},
-            {"src": "crypto/fipsmodule/rand/asm/rdrand-x86_64.pl"},
-            {"src": "crypto/fipsmodule/bn/asm/rsaz-avx2.pl"},
-            {"src": "crypto/fipsmodule/sha/asm/sha1-x86_64.pl"},
-            {"src": "crypto/fipsmodule/sha/asm/sha512-x86_64.pl", "args": ["sha256"], "dst": "sha256-x86_64"},
-            {"src": "crypto/fipsmodule/sha/asm/sha512-x86_64.pl", "args": ["sha512"]},
-            {"src": "crypto/fipsmodule/aes/asm/vpaes-x86_64.pl"},
-            {"src": "crypto/fipsmodule/bn/asm/x86_64-mont.pl"},
-            {"src": "crypto/fipsmodule/bn/asm/x86_64-mont5.pl"}
-        ]
-    },
-    "crypto": {
-      "srcs": [
-            "crypto/aes/aes.cc",
-            "crypto/asn1/a_bitstr.cc",
-            "crypto/asn1/a_bool.cc",
-            "crypto/asn1/a_d2i_fp.cc",
-            "crypto/asn1/a_dup.cc",
-            "crypto/asn1/a_gentm.cc",
-            "crypto/asn1/a_i2d_fp.cc",
-            "crypto/asn1/a_int.cc",
-            "crypto/asn1/a_mbstr.cc",
-            "crypto/asn1/a_object.cc",
-            "crypto/asn1/a_octet.cc",
-            "crypto/asn1/a_strex.cc",
-            "crypto/asn1/a_strnid.cc",
-            "crypto/asn1/a_time.cc",
-            "crypto/asn1/a_type.cc",
-            "crypto/asn1/a_utctm.cc",
-            "crypto/asn1/asn1_lib.cc",
-            "crypto/asn1/asn1_par.cc",
-            "crypto/asn1/asn_pack.cc",
-            "crypto/asn1/f_int.cc",
-            "crypto/asn1/f_string.cc",
-            "crypto/asn1/posix_time.cc",
-            "crypto/asn1/tasn_dec.cc",
-            "crypto/asn1/tasn_enc.cc",
-            "crypto/asn1/tasn_fre.cc",
-            "crypto/asn1/tasn_new.cc",
-            "crypto/asn1/tasn_typ.cc",
-            "crypto/asn1/tasn_utl.cc",
-            "crypto/base64/base64.cc",
-            "crypto/bio/bio.cc",
-            "crypto/bio/bio_mem.cc",
-            "crypto/bio/connect.cc",
-            "crypto/bio/errno.cc",
-            "crypto/bio/fd.cc",
-            "crypto/bio/file.cc",
-            "crypto/bio/hexdump.cc",
-            "crypto/bio/pair.cc",
-            "crypto/bio/printf.cc",
-            "crypto/bio/socket.cc",
-            "crypto/bio/socket_helper.cc",
-            "crypto/blake2/blake2.cc",
-            "crypto/bn/bn_asn1.cc",
-            "crypto/bn/convert.cc",
-            "crypto/bn/div.cc",
-            "crypto/bn/exponentiation.cc",
-            "crypto/bn/sqrt.cc",
-            "crypto/buf/buf.cc",
-            "crypto/bytestring/asn1_compat.cc",
-            "crypto/bytestring/ber.cc",
-            "crypto/bytestring/cbb.cc",
-            "crypto/bytestring/cbs.cc",
-            "crypto/bytestring/unicode.cc",
-            "crypto/chacha/chacha.cc",
-            "crypto/cipher/derive_key.cc",
-            "crypto/cipher/get_cipher.cc",
-            "crypto/cipher/e_aesctrhmac.cc",
-            "crypto/cipher/e_aeseax.cc",
-            "crypto/cipher/e_aesgcmsiv.cc",
-            "crypto/cipher/e_chacha20poly1305.cc",
-            "crypto/cipher/e_des.cc",
-            "crypto/cipher/e_null.cc",
-            "crypto/cipher/e_rc2.cc",
-            "crypto/cipher/e_rc4.cc",
-            "crypto/cipher/e_tls.cc",
-            "crypto/cipher/tls_cbc.cc",
-            "crypto/cms/cms.cc",
-            "crypto/conf/conf.cc",
-            "crypto/cpu_aarch64_apple.cc",
-            "crypto/cpu_aarch64_fuchsia.cc",
-            "crypto/cpu_aarch64_linux.cc",
-            "crypto/cpu_aarch64_openbsd.cc",
-            "crypto/cpu_aarch64_sysreg.cc",
-            "crypto/cpu_aarch64_win.cc",
-            "crypto/cpu_arm_freebsd.cc",
-            "crypto/cpu_arm_linux.cc",
-            "crypto/cpu_intel.cc",
-            "crypto/crypto.cc",
-            "crypto/curve25519/curve25519.cc",
-            "crypto/curve25519/curve25519_64_adx.cc",
-            "crypto/curve25519/spake25519.cc",
-            "crypto/des/des.cc",
-            "crypto/dh/dh_asn1.cc",
-            "crypto/dh/params.cc",
-            "crypto/digest/digest_extra.cc",
-            "crypto/dsa/dsa.cc",
-            "crypto/dsa/dsa_asn1.cc",
-            "crypto/ec/ec_asn1.cc",
-            "crypto/ec/ec_derive.cc",
-            "crypto/ec/hash_to_curve.cc",
-            "crypto/ecdh/ecdh.cc",
-            "crypto/ecdsa/ecdsa_asn1.cc",
-            "crypto/engine/engine.cc",
-            "crypto/err/err.cc",
-            "crypto/evp/evp.cc",
-            "crypto/evp/evp_asn1.cc",
-            "crypto/evp/evp_ctx.cc",
-            "crypto/evp/p_dh.cc",
-            "crypto/evp/p_dh_asn1.cc",
-            "crypto/evp/p_dsa_asn1.cc",
-            "crypto/evp/p_ec.cc",
-            "crypto/evp/p_ec_asn1.cc",
-            "crypto/evp/p_ed25519.cc",
-            "crypto/evp/p_ed25519_asn1.cc",
-            "crypto/evp/p_hkdf.cc",
-            "crypto/evp/p_rsa.cc",
-            "crypto/evp/p_rsa_asn1.cc",
-            "crypto/evp/p_x25519.cc",
-            "crypto/evp/p_x25519_asn1.cc",
-            "crypto/evp/pbkdf.cc",
-            "crypto/evp/print.cc",
-            "crypto/evp/scrypt.cc",
-            "crypto/evp/sign.cc",
-            "crypto/ex_data.cc",
-            "crypto/fipsmodule/fips_shared_support.cc",
-            "crypto/fuzzer_mode.cc",
-            "crypto/hpke/hpke.cc",
-            "crypto/hrss/hrss.cc",
-            "crypto/kyber/kyber.cc",
-            "crypto/lhash/lhash.cc",
-            "crypto/md4/md4.cc",
-            "crypto/md5/md5.cc",
-            "crypto/mem.cc",
-            "crypto/mldsa/mldsa.cc",
-            "crypto/mlkem/mlkem.cc",
-            "crypto/obj/obj.cc",
-            "crypto/obj/obj_xref.cc",
-            "crypto/pem/pem_all.cc",
-            "crypto/pem/pem_info.cc",
-            "crypto/pem/pem_lib.cc",
-            "crypto/pem/pem_oth.cc",
-            "crypto/pem/pem_pk8.cc",
-            "crypto/pem/pem_pkey.cc",
-            "crypto/pem/pem_x509.cc",
-            "crypto/pem/pem_xaux.cc",
-            "crypto/pkcs7/pkcs7.cc",
-            "crypto/pkcs7/pkcs7_x509.cc",
-            "crypto/pkcs8/p5_pbev2.cc",
-            "crypto/pkcs8/pkcs8.cc",
-            "crypto/pkcs8/pkcs8_x509.cc",
-            "crypto/poly1305/poly1305.cc",
-            "crypto/poly1305/poly1305_arm.cc",
-            "crypto/poly1305/poly1305_vec.cc",
-            "crypto/pool/pool.cc",
-            "crypto/rand/deterministic.cc",
-            "crypto/rand/fork_detect.cc",
-            "crypto/rand/forkunsafe.cc",
-            "crypto/rand/getentropy.cc",
-            "crypto/rand/ios.cc",
-            "crypto/rand/passive.cc",
-            "crypto/rand/rand.cc",
-            "crypto/rand/trusty.cc",
-            "crypto/rand/urandom.cc",
-            "crypto/rand/windows.cc",
-            "crypto/rc4/rc4.cc",
-            "crypto/refcount.cc",
-            "crypto/rsa/rsa_asn1.cc",
-            "crypto/rsa/rsa_crypt.cc",
-            "crypto/rsa/rsa_extra.cc",
-            "crypto/rsa/rsa_print.cc",
-            "crypto/slhdsa/slhdsa.cc",
-            "crypto/sha/sha1.cc",
-            "crypto/sha/sha256.cc",
-            "crypto/sha/sha512.cc",
-            "crypto/siphash/siphash.cc",
-            "crypto/spake2plus/spake2plus.cc",
-            "crypto/stack/stack.cc",
-            "crypto/thread.cc",
-            "crypto/thread_none.cc",
-            "crypto/thread_pthread.cc",
-            "crypto/thread_win.cc",
-            "crypto/trust_token/pmbtoken.cc",
-            "crypto/trust_token/trust_token.cc",
-            "crypto/trust_token/voprf.cc",
-            "crypto/x509/a_digest.cc",
-            "crypto/x509/a_sign.cc",
-            "crypto/x509/a_verify.cc",
-            "crypto/x509/algorithm.cc",
-            "crypto/x509/asn1_gen.cc",
-            "crypto/x509/by_dir.cc",
-            "crypto/x509/by_file.cc",
-            "crypto/x509/i2d_pr.cc",
-            "crypto/x509/name_print.cc",
-            "crypto/x509/policy.cc",
-            "crypto/x509/rsa_pss.cc",
-            "crypto/x509/t_crl.cc",
-            "crypto/x509/t_req.cc",
-            "crypto/x509/t_x509.cc",
-            "crypto/x509/t_x509a.cc",
-            "crypto/x509/v3_akey.cc",
-            "crypto/x509/v3_akeya.cc",
-            "crypto/x509/v3_alt.cc",
-            "crypto/x509/v3_bcons.cc",
-            "crypto/x509/v3_bitst.cc",
-            "crypto/x509/v3_conf.cc",
-            "crypto/x509/v3_cpols.cc",
-            "crypto/x509/v3_crld.cc",
-            "crypto/x509/v3_enum.cc",
-            "crypto/x509/v3_extku.cc",
-            "crypto/x509/v3_genn.cc",
-            "crypto/x509/v3_ia5.cc",
-            "crypto/x509/v3_info.cc",
-            "crypto/x509/v3_int.cc",
-            "crypto/x509/v3_lib.cc",
-            "crypto/x509/v3_ncons.cc",
-            "crypto/x509/v3_ocsp.cc",
-            "crypto/x509/v3_pcons.cc",
-            "crypto/x509/v3_pmaps.cc",
-            "crypto/x509/v3_prn.cc",
-            "crypto/x509/v3_purp.cc",
-            "crypto/x509/v3_skey.cc",
-            "crypto/x509/v3_utl.cc",
-            "crypto/x509/x509.cc",
-            "crypto/x509/x509_att.cc",
-            "crypto/x509/x509_cmp.cc",
-            "crypto/x509/x509_d2.cc",
-            "crypto/x509/x509_def.cc",
-            "crypto/x509/x509_ext.cc",
-            "crypto/x509/x509_lu.cc",
-            "crypto/x509/x509_obj.cc",
-            "crypto/x509/x509_req.cc",
-            "crypto/x509/x509_set.cc",
-            "crypto/x509/x509_trs.cc",
-            "crypto/x509/x509_txt.cc",
-            "crypto/x509/x509_v3.cc",
-            "crypto/x509/x509_vfy.cc",
-            "crypto/x509/x509_vpm.cc",
-            "crypto/x509/x509cset.cc",
-            "crypto/x509/x509name.cc",
-            "crypto/x509/x509rset.cc",
-            "crypto/x509/x509spki.cc",
-            "crypto/x509/x_algor.cc",
-            "crypto/x509/x_all.cc",
-            "crypto/x509/x_attrib.cc",
-            "crypto/x509/x_crl.cc",
-            "crypto/x509/x_exten.cc",
-            "crypto/x509/x_name.cc",
-            "crypto/x509/x_pubkey.cc",
-            "crypto/x509/x_req.cc",
-            "crypto/x509/x_sig.cc",
-            "crypto/x509/x_spki.cc",
-            "crypto/x509/x_val.cc",
-            "crypto/x509/x_x509.cc",
-            "crypto/x509/x_x509a.cc"
-        ],
-        "hdrs": [
-            "include/openssl/aead.h",
-            "include/openssl/aes.h",
-            "include/openssl/arm_arch.h",
-            "include/openssl/asm_base.h",
-            "include/openssl/asn1.h",
-            "include/openssl/asn1_mac.h",
-            "include/openssl/asn1t.h",
-            "include/openssl/base.h",
-            "include/openssl/base64.h",
-            "include/openssl/bcm_public.h",
-            "include/openssl/bio.h",
-            "include/openssl/blake2.h",
-            "include/openssl/blowfish.h",
-            "include/openssl/bn.h",
-            "include/openssl/buf.h",
-            "include/openssl/buffer.h",
-            "include/openssl/bytestring.h",
-            "include/openssl/cast.h",
-            "include/openssl/chacha.h",
-            "include/openssl/cipher.h",
-            "include/openssl/cmac.h",
-            "include/openssl/cms.h",
-            "include/openssl/conf.h",
-            "include/openssl/cpu.h",
-            "include/openssl/crypto.h",
-            "include/openssl/ctrdrbg.h",
-            "include/openssl/curve25519.h",
-            "include/openssl/des.h",
-            "include/openssl/dh.h",
-            "include/openssl/digest.h",
-            "include/openssl/dsa.h",
-            "include/openssl/e_os2.h",
-            "include/openssl/ec.h",
-            "include/openssl/ec_key.h",
-            "include/openssl/ecdh.h",
-            "include/openssl/ecdsa.h",
-            "include/openssl/engine.h",
-            "include/openssl/err.h",
-            "include/openssl/evp.h",
-            "include/openssl/evp_errors.h",
-            "include/openssl/ex_data.h",
-            "include/openssl/experimental/kyber.h",
-            "include/openssl/hkdf.h",
-            "include/openssl/hmac.h",
-            "include/openssl/hpke.h",
-            "include/openssl/hrss.h",
-            "include/openssl/is_boringssl.h",
-            "include/openssl/kdf.h",
-            "include/openssl/lhash.h",
-            "include/openssl/md4.h",
-            "include/openssl/md5.h",
-            "include/openssl/mem.h",
-            "include/openssl/mldsa.h",
-            "include/openssl/mlkem.h",
-            "include/openssl/nid.h",
-            "include/openssl/obj.h",
-            "include/openssl/obj_mac.h",
-            "include/openssl/objects.h",
-            "include/openssl/opensslconf.h",
-            "include/openssl/opensslv.h",
-            "include/openssl/ossl_typ.h",
-            "include/openssl/pem.h",
-            "include/openssl/pkcs12.h",
-            "include/openssl/pkcs7.h",
-            "include/openssl/pkcs8.h",
-            "include/openssl/poly1305.h",
-            "include/openssl/pool.h",
-            "include/openssl/posix_time.h",
-            "include/openssl/rand.h",
-            "include/openssl/rc4.h",
-            "include/openssl/ripemd.h",
-            "include/openssl/rsa.h",
-            "include/openssl/safestack.h",
-            "include/openssl/service_indicator.h",
-            "include/openssl/sha.h",
-            "include/openssl/siphash.h",
-            "include/openssl/slhdsa.h",
-            "include/openssl/span.h",
-            "include/openssl/stack.h",
-            "include/openssl/target.h",
-            "include/openssl/thread.h",
-            "include/openssl/time.h",
-            "include/openssl/trust_token.h",
-            "include/openssl/type_check.h",
-            "include/openssl/x509.h",
-            "include/openssl/x509_vfy.h",
-            "include/openssl/x509v3.h",
-            "include/openssl/x509v3_errors.h"
-        ],
-        "internal_hdrs": [
-            "crypto/asn1/internal.h",
-            "crypto/bio/internal.h",
-            "crypto/bytestring/internal.h",
-            "crypto/chacha/internal.h",
-            "crypto/cipher/internal.h",
-            "crypto/conf/internal.h",
-            "crypto/cpu_arm_linux.h",
-            "crypto/curve25519/curve25519_tables.h",
-            "crypto/curve25519/internal.h",
-            "crypto/des/internal.h",
-            "crypto/dsa/internal.h",
-            "crypto/ec/internal.h",
-            "crypto/err/internal.h",
-            "crypto/evp/internal.h",
-            "crypto/fipsmodule/aes/internal.h",
-            "crypto/fipsmodule/bcm_interface.h",
-            "crypto/fipsmodule/bn/internal.h",
-            "crypto/fipsmodule/bn/rsaz_exp.h",
-            "crypto/fipsmodule/cipher/internal.h",
-            "crypto/fipsmodule/delocate.h",
-            "crypto/fipsmodule/dh/internal.h",
-            "crypto/fipsmodule/digest/internal.h",
-            "crypto/fipsmodule/digest/md32_common.h",
-            "crypto/fipsmodule/ec/builtin_curves.h",
-            "crypto/fipsmodule/ec/internal.h",
-            "crypto/fipsmodule/ec/p256-nistz-table.h",
-            "crypto/fipsmodule/ec/p256-nistz.h",
-            "crypto/fipsmodule/ec/p256_table.h",
-            "crypto/fipsmodule/ecdsa/internal.h",
-            "crypto/fipsmodule/keccak/internal.h",
-            "crypto/fipsmodule/rand/internal.h",
-            "crypto/fipsmodule/rsa/internal.h",
-            "crypto/fipsmodule/service_indicator/internal.h",
-            "crypto/fipsmodule/sha/internal.h",
-            "crypto/fipsmodule/slhdsa/address.h",
-            "crypto/fipsmodule/slhdsa/fors.h",
-            "crypto/fipsmodule/slhdsa/merkle.h",
-            "crypto/fipsmodule/slhdsa/params.h",
-            "crypto/fipsmodule/slhdsa/thash.h",
-            "crypto/fipsmodule/slhdsa/wots.h",
-            "crypto/fipsmodule/tls/internal.h",
-            "crypto/hrss/internal.h",
-            "crypto/bcm_support.h",
-            "crypto/internal.h",
-            "crypto/kyber/internal.h",
-            "crypto/lhash/internal.h",
-            "crypto/md5/internal.h",
-            "crypto/obj/obj_dat.h",
-            "crypto/pem/internal.h",
-            "crypto/pkcs7/internal.h",
-            "crypto/pkcs8/internal.h",
-            "crypto/poly1305/internal.h",
-            "crypto/pool/internal.h",
-            "crypto/rand/getrandom_fillin.h",
-            "crypto/rand/internal.h",
-            "crypto/rsa/internal.h",
-            "crypto/spake2plus/internal.h",
-            "crypto/trust_token/internal.h",
-            "crypto/x509/ext_dat.h",
-            "crypto/x509/internal.h",
-            "third_party/fiat/curve25519_32.h",
-            "third_party/fiat/curve25519_64.h",
-            "third_party/fiat/curve25519_64_adx.h",
-            "third_party/fiat/curve25519_64_msvc.h",
-            "third_party/fiat/p256_32.h",
-            "third_party/fiat/p256_64.h",
-            "third_party/fiat/p256_64_msvc.h"
-        ],
-        "err_data": [
-            "crypto/err/*.errordata"
-        ],
-        "asm": [
-            "crypto/curve25519/asm/x25519-asm-arm.S",
-            "crypto/hrss/asm/poly_rq_mul.S",
-            "crypto/poly1305/poly1305_arm_asm.S",
-            "third_party/fiat/asm/fiat_curve25519_adx_mul.S",
-            "third_party/fiat/asm/fiat_curve25519_adx_square.S"
-        ],
-        "perlasm_aarch64": [
-            {"src": "crypto/chacha/asm/chacha-armv8.pl"},
-            {"src": "crypto/cipher/asm/chacha20_poly1305_armv8.pl"}
-        ],
-        "perlasm_arm": [
-            {"src": "crypto/chacha/asm/chacha-armv4.pl"}
-        ],
-        "perlasm_x86": [
-            {"src": "crypto/chacha/asm/chacha-x86.pl"},
-            {"src": "crypto/md5/asm/md5-586.pl"}
-        ],
-        "perlasm_x86_64": [
-            {"src": "crypto/chacha/asm/chacha-x86_64.pl"},
-            {"src": "crypto/cipher/asm/aes128gcmsiv-x86_64.pl"},
-            {"src": "crypto/cipher/asm/chacha20_poly1305_x86_64.pl"},
-            {"src": "crypto/md5/asm/md5-x86_64.pl"}
-        ]
-    },
-    "pki": {
-        "srcs": [
-            "pki/cert_error_id.cc",
-            "pki/cert_error_params.cc",
-            "pki/cert_errors.cc",
-            "pki/cert_issuer_source_static.cc",
-            "pki/certificate.cc",
-            "pki/certificate_policies.cc",
-            "pki/common_cert_errors.cc",
-            "pki/crl.cc",
-            "pki/encode_values.cc",
-            "pki/extended_key_usage.cc",
-            "pki/general_names.cc",
-            "pki/input.cc",
-            "pki/ip_util.cc",
-            "pki/name_constraints.cc",
-            "pki/ocsp.cc",
-            "pki/parse_certificate.cc",
-            "pki/parse_name.cc",
-            "pki/parse_values.cc",
-            "pki/parsed_certificate.cc",
-            "pki/parser.cc",
-            "pki/path_builder.cc",
-            "pki/pem.cc",
-            "pki/revocation_util.cc",
-            "pki/signature_algorithm.cc",
-            "pki/simple_path_builder_delegate.cc",
-            "pki/string_util.cc",
-            "pki/trust_store.cc",
-            "pki/trust_store_collection.cc",
-            "pki/trust_store_in_memory.cc",
-            "pki/verify.cc",
-            "pki/verify_certificate_chain.cc",
-            "pki/verify_error.cc",
-            "pki/verify_name_match.cc",
-            "pki/verify_signed_data.cc"
-        ],
-        "hdrs": [
-            "include/openssl/pki/certificate.h",
-            "include/openssl/pki/ocsp.h",
-            "include/openssl/pki/signature_verify_cache.h",
-            "include/openssl/pki/verify.h",
-            "include/openssl/pki/verify_error.h"
-        ],
-        "internal_hdrs": [
-            "pki/cert_error_id.h",
-            "pki/cert_error_params.h",
-            "pki/cert_errors.h",
-            "pki/cert_issuer_source.h",
-            "pki/cert_issuer_source_static.h",
-            // TODO(crbug.com/boringssl/542): This should be in pki_tests.
-            "pki/cert_issuer_source_sync_unittest.h",
-            "pki/certificate_policies.h",
-            "pki/common_cert_errors.h",
-            "pki/crl.h",
-            "pki/encode_values.h",
-            "pki/extended_key_usage.h",
-            "pki/general_names.h",
-            "pki/input.h",
-            "pki/ip_util.h",
-            "pki/mock_signature_verify_cache.h",
-            "pki/name_constraints.h",
-            "pki/nist_pkits_unittest.h",
-            "pki/ocsp.h",
-            "pki/parse_certificate.h",
-            "pki/parse_name.h",
-            "pki/parse_values.h",
-            "pki/parsed_certificate.h",
-            "pki/parser.h",
-            "pki/path_builder.h",
-            "pki/pem.h",
-            "pki/revocation_util.h",
-            "pki/signature_algorithm.h",
-            "pki/simple_path_builder_delegate.h",
-            "pki/string_util.h",
-            // TODO(crbug.com/boringssl/542): This should be in pki_tests.
-            "pki/test_helpers.h",
-            // TODO(crbug.com/boringssl/542): This should be in pki_tests.
-            "pki/testdata/nist-pkits/pkits_testcases-inl.h",
-            "pki/trust_store.h",
-            "pki/trust_store_collection.h",
-            "pki/trust_store_in_memory.h",
-            "pki/verify_certificate_chain.h",
-            // TODO(crbug.com/boringssl/542): This should be in pki_tests.
-            "pki/verify_certificate_chain_typed_unittest.h",
-            "pki/verify_name_match.h",
-            "pki/verify_signed_data.h"
-        ]
-    },
-    "ssl": {
-        "srcs": [
-            "ssl/bio_ssl.cc",
-            "ssl/d1_both.cc",
-            "ssl/d1_lib.cc",
-            "ssl/d1_pkt.cc",
-            "ssl/d1_srtp.cc",
-            "ssl/dtls_method.cc",
-            "ssl/dtls_record.cc",
-            "ssl/encrypted_client_hello.cc",
-            "ssl/extensions.cc",
-            "ssl/handoff.cc",
-            "ssl/handshake.cc",
-            "ssl/handshake_client.cc",
-            "ssl/handshake_server.cc",
-            "ssl/s3_both.cc",
-            "ssl/s3_lib.cc",
-            "ssl/s3_pkt.cc",
-            "ssl/ssl_aead_ctx.cc",
-            "ssl/ssl_asn1.cc",
-            "ssl/ssl_buffer.cc",
-            "ssl/ssl_cert.cc",
-            "ssl/ssl_cipher.cc",
-            "ssl/ssl_credential.cc",
-            "ssl/ssl_file.cc",
-            "ssl/ssl_key_share.cc",
-            "ssl/ssl_lib.cc",
-            "ssl/ssl_privkey.cc",
-            "ssl/ssl_session.cc",
-            "ssl/ssl_stat.cc",
-            "ssl/ssl_transcript.cc",
-            "ssl/ssl_versions.cc",
-            "ssl/ssl_x509.cc",
-            "ssl/t1_enc.cc",
-            "ssl/tls13_both.cc",
-            "ssl/tls13_client.cc",
-            "ssl/tls13_enc.cc",
-            "ssl/tls13_server.cc",
-            "ssl/tls_method.cc",
-            "ssl/tls_record.cc"
-        ],
-        "hdrs": [
-            "include/openssl/dtls1.h",
-            "include/openssl/srtp.h",
-            "include/openssl/ssl.h",
-            "include/openssl/ssl3.h",
-            "include/openssl/tls1.h"
-        ],
-        "internal_hdrs": [
-            "ssl/internal.h"
-        ]
-    },
-    "decrepit": {
-        "srcs": [
-            "decrepit/bio/base64_bio.cc",
-            "decrepit/blowfish/blowfish.cc",
-            "decrepit/cast/cast.cc",
-            "decrepit/cast/cast_tables.cc",
-            "decrepit/cfb/cfb.cc",
-            "decrepit/des/cfb64ede.cc",
-            "decrepit/dh/dh_decrepit.cc",
-            "decrepit/dsa/dsa_decrepit.cc",
-            "decrepit/evp/dss1.cc",
-            "decrepit/evp/evp_do_all.cc",
-            "decrepit/obj/obj_decrepit.cc",
-            "decrepit/rc4/rc4_decrepit.cc",
-            "decrepit/ripemd/ripemd.cc",
-            "decrepit/rsa/rsa_decrepit.cc",
-            "decrepit/ssl/ssl_decrepit.cc",
-            "decrepit/x509/x509_decrepit.cc",
-            "decrepit/xts/xts.cc"
-        ],
-        "internal_hdrs": [
-            "decrepit/cast/internal.h",
-            "decrepit/macros.h"
-        ]
-    },
-    "test_support": {
-        "srcs": [
-            "crypto/test/abi_test.cc",
-            "crypto/test/file_test.cc",
-            "crypto/test/file_test_gtest.cc",
-            "crypto/test/file_util.cc",
-            "crypto/test/test_data.cc",
-            "crypto/test/test_util.cc",
-            "crypto/test/wycheproof_util.cc"
-        ],
-        "internal_hdrs": [
-            "crypto/test/abi_test.h",
-            "crypto/test/file_test.h",
-            "crypto/test/file_util.h",
-            "crypto/test/gtest_main.h",
-            "crypto/test/test_data.h",
-            "crypto/test/test_util.h",
-            "crypto/test/wycheproof_util.h",
-            // TODO(crbug.com/boringssl/542): It's a bit odd that these are in
-            // test_support. Most of it is part of bssl_shim, except that the
-            // fuzzers use some of these headers.
-            "ssl/test/async_bio.h",
-            "ssl/test/fuzzer.h",
-            "ssl/test/fuzzer_tags.h",
-            "ssl/test/handshake_util.h",
-            "ssl/test/mock_quic_transport.h",
-            "ssl/test/packeted_bio.h",
-            "ssl/test/settings_writer.h",
-            "ssl/test/test_config.h",
-            "ssl/test/test_state.h"
-        ],
-        "perlasm_aarch64": [
-            {"src": "crypto/test/asm/trampoline-armv8.pl"}
-        ],
-        "perlasm_arm": [
-            {"src": "crypto/test/asm/trampoline-armv4.pl"}
-        ],
-        "perlasm_x86": [
-            {"src": "crypto/test/asm/trampoline-x86.pl"}
-        ],
-        "perlasm_x86_64": [
-            {"src": "crypto/test/asm/trampoline-x86_64.pl"}
-        ]
-    },
-    "crypto_test": {
-        "srcs": [
-            "crypto/abi_self_test.cc",
-            "crypto/asn1/asn1_test.cc",
-            "crypto/base64/base64_test.cc",
-            "crypto/bio/bio_test.cc",
-            "crypto/blake2/blake2_test.cc",
-            "crypto/buf/buf_test.cc",
-            "crypto/bytestring/bytestring_test.cc",
-            "crypto/chacha/chacha_test.cc",
-            "crypto/cipher/aead_test.cc",
-            "crypto/cipher/cipher_test.cc",
-            "crypto/cms/cms_test.cc",
-            "crypto/compiler_test.cc",
-            "crypto/conf/conf_test.cc",
-            "crypto/constant_time_test.cc",
-            "crypto/cpu_arm_linux_test.cc",
-            "crypto/crypto_test.cc",
-            "crypto/curve25519/ed25519_test.cc",
-            "crypto/curve25519/spake25519_test.cc",
-            "crypto/curve25519/x25519_test.cc",
-            "crypto/dh/dh_test.cc",
-            "crypto/digest/digest_test.cc",
-            "crypto/dsa/dsa_test.cc",
-            "crypto/ecdh/ecdh_test.cc",
-            "crypto/err/err_test.cc",
-            "crypto/evp/evp_extra_test.cc",
-            "crypto/evp/evp_test.cc",
-            "crypto/evp/pbkdf_test.cc",
-            "crypto/evp/scrypt_test.cc",
-            "crypto/fipsmodule/aes/aes_test.cc",
-            "crypto/fipsmodule/aes/gcm_test.cc",
-            "crypto/fipsmodule/bn/bn_test.cc",
-            "crypto/fipsmodule/cmac/cmac_test.cc",
-            "crypto/fipsmodule/ec/ec_test.cc",
-            "crypto/fipsmodule/ec/p256-nistz_test.cc",
-            "crypto/fipsmodule/ec/p256_test.cc",
-            "crypto/fipsmodule/ecdsa/ecdsa_test.cc",
-            "crypto/fipsmodule/hkdf/hkdf_test.cc",
-            "crypto/fipsmodule/keccak/keccak_test.cc",
-            "crypto/fipsmodule/rand/ctrdrbg_test.cc",
-            "crypto/fipsmodule/service_indicator/service_indicator_test.cc",
-            "crypto/fipsmodule/sha/sha_test.cc",
-            "crypto/hmac/hmac_test.cc",
-            "crypto/hpke/hpke_test.cc",
-            "crypto/hrss/hrss_test.cc",
-            "crypto/impl_dispatch_test.cc",
-            "crypto/kyber/kyber_test.cc",
-            "crypto/lhash/lhash_test.cc",
-            "crypto/md5/md5_test.cc",
-            "crypto/mlkem/mlkem_test.cc",
-            "crypto/obj/obj_test.cc",
-            "crypto/pem/pem_test.cc",
-            "crypto/mldsa/mldsa_test.cc",
-            "crypto/pkcs7/pkcs7_test.cc",
-            "crypto/pkcs8/pkcs12_test.cc",
-            "crypto/pkcs8/pkcs8_test.cc",
-            "crypto/poly1305/poly1305_test.cc",
-            "crypto/pool/pool_test.cc",
-            "crypto/rand/fork_detect_test.cc",
-            "crypto/rand/getentropy_test.cc",
-            "crypto/rand/rand_test.cc",
-            "crypto/refcount_test.cc",
-            "crypto/rsa/rsa_test.cc",
-            "crypto/self_test.cc",
-            "crypto/siphash/siphash_test.cc",
-            "crypto/slhdsa/slhdsa_test.cc",
-            "crypto/spake2plus/spake2plus_test.cc",
-            "crypto/stack/stack_test.cc",
-            "crypto/test/gtest_main.cc",
-            "crypto/thread_test.cc",
-            "crypto/trust_token/trust_token_test.cc",
-            "crypto/x509/tab_test.cc",
-            "crypto/x509/x509_test.cc",
-            "crypto/x509/x509_time_test.cc"
-        ],
-        "data": [
-            "crypto/blake2/blake2b256_tests.txt",
-            "crypto/cipher/test/*.txt",
-            "crypto/cipher/test/nist_cavp/*.txt",
-            "crypto/curve25519/ed25519_tests.txt",
-            "crypto/ecdh/ecdh_tests.txt",
-            "crypto/evp/evp_tests.txt",
-            "crypto/evp/scrypt_tests.txt",
-            "crypto/fipsmodule/aes/aes_tests.txt",
-            "crypto/fipsmodule/bn/test/*.txt",
-            "crypto/fipsmodule/cmac/cavp_3des_cmac_tests.txt",
-            "crypto/fipsmodule/cmac/cavp_aes128_cmac_tests.txt",
-            "crypto/fipsmodule/cmac/cavp_aes192_cmac_tests.txt",
-            "crypto/fipsmodule/cmac/cavp_aes256_cmac_tests.txt",
-            "crypto/fipsmodule/ec/ec_scalar_base_mult_tests.txt",
-            "crypto/fipsmodule/ec/p256-nistz_tests.txt",
-            "crypto/fipsmodule/ecdsa/ecdsa_sign_tests.txt",
-            "crypto/fipsmodule/ecdsa/ecdsa_verify_tests.txt",
-            "crypto/fipsmodule/keccak/keccak_tests.txt",
-            "crypto/fipsmodule/rand/ctrdrbg_vectors.txt",
-            "crypto/hmac/hmac_tests.txt",
-            "crypto/hpke/hpke_test_vectors.txt",
-            "crypto/kyber/kyber_tests.txt",
-            "crypto/mldsa/mldsa_nist_keygen_65_tests.txt",
-            "crypto/mldsa/mldsa_nist_keygen_87_tests.txt",
-            "crypto/mldsa/mldsa_nist_siggen_65_tests.txt",
-            "crypto/mldsa/mldsa_nist_siggen_87_tests.txt",
-            "crypto/mlkem/mlkem1024_decap_tests.txt",
-            "crypto/mlkem/mlkem1024_encap_tests.txt",
-            "crypto/mlkem/mlkem1024_keygen_tests.txt",
-            "crypto/mlkem/mlkem1024_nist_decap_tests.txt",
-            "crypto/mlkem/mlkem1024_nist_keygen_tests.txt",
-            "crypto/mlkem/mlkem768_decap_tests.txt",
-            "crypto/mlkem/mlkem768_encap_tests.txt",
-            "crypto/mlkem/mlkem768_keygen_tests.txt",
-            "crypto/mlkem/mlkem768_nist_decap_tests.txt",
-            "crypto/mlkem/mlkem768_nist_keygen_tests.txt",
-            "crypto/pkcs7/test/*.p7c",
-            "crypto/pkcs7/test/*.p7s",
-            "crypto/pkcs7/test/*.pem",
-            "crypto/pkcs8/test/*.p12",
-            "crypto/poly1305/poly1305_tests.txt",
-            "crypto/siphash/siphash_tests.txt",
-            "crypto/slhdsa/slhdsa_keygen.txt",
-            "crypto/slhdsa/slhdsa_prehash.txt",
-            "crypto/slhdsa/slhdsa_siggen.txt",
-            "crypto/slhdsa/slhdsa_sigver.txt",
-            "crypto/x509/test/*.pem",
-            "third_party/wycheproof_testvectors/*.txt"
-        ]
-    },
-    "urandom_test": {
-        "srcs": [
-            "crypto/rand/urandom_test.cc"
-        ]
-    },
-    "pki_test": {
-        "srcs": [
-            "crypto/test/gtest_main.cc",
-            "pki/cert_issuer_source_static_unittest.cc",
-            "pki/certificate_policies_unittest.cc",
-            "pki/certificate_unittest.cc",
-            "pki/crl_unittest.cc",
-            "pki/encode_values_unittest.cc",
-            "pki/extended_key_usage_unittest.cc",
-            "pki/general_names_unittest.cc",
-            "pki/input_unittest.cc",
-            "pki/ip_util_unittest.cc",
-            "pki/mock_signature_verify_cache.cc",
-            "pki/name_constraints_unittest.cc",
-            "pki/nist_pkits_unittest.cc",
-            "pki/ocsp_unittest.cc",
-            "pki/parse_certificate_unittest.cc",
-            "pki/parse_name_unittest.cc",
-            "pki/parse_values_unittest.cc",
-            "pki/parsed_certificate_unittest.cc",
-            "pki/parser_unittest.cc",
-            "pki/path_builder_pkits_unittest.cc",
-            "pki/path_builder_unittest.cc",
-            "pki/path_builder_verify_certificate_chain_unittest.cc",
-            "pki/pem_unittest.cc",
-            "pki/signature_algorithm_unittest.cc",
-            "pki/simple_path_builder_delegate_unittest.cc",
-            "pki/string_util_unittest.cc",
-            "pki/test_helpers.cc",
-            "pki/trust_store_collection_unittest.cc",
-            "pki/trust_store_in_memory_unittest.cc",
-            "pki/verify_certificate_chain_pkits_unittest.cc",
-            "pki/verify_certificate_chain_unittest.cc",
-            "pki/verify_name_match_unittest.cc",
-            "pki/verify_signed_data_unittest.cc",
-            "pki/verify_unittest.cc"
-        ],
-        "data": [
-            "pki/testdata/cert_issuer_source_static_unittest/*.pem",
-            "pki/testdata/certificate_policies_unittest/*.pem",
-            "pki/testdata/crl_unittest/*.pem",
-            "pki/testdata/name_constraints_unittest/*.pem",
-            "pki/testdata/nist-pkits/certs/*.crt",
-            "pki/testdata/nist-pkits/crls/*.crl",
-            "pki/testdata/ocsp_unittest/*.pem",
-            "pki/testdata/parse_certificate_unittest/*.pem",
-            "pki/testdata/parse_certificate_unittest/*/*.pem",
-            "pki/testdata/path_builder_unittest/*.pem",
-            "pki/testdata/path_builder_unittest/*/*.pem",
-            "pki/testdata/verify_certificate_chain_unittest/*/*.pem",
-            "pki/testdata/verify_certificate_chain_unittest/*/*.test",
-            "pki/testdata/verify_certificate_chain_unittest/pkits_errors/*.txt",
-            "pki/testdata/verify_name_match_unittest/names/*.pem",
-            "pki/testdata/verify_signed_data_unittest/*.pem",
-            "pki/testdata/verify_unittest/*.der",
-            "pki/testdata/verify_unittest/self-issued.pem"
-        ]
-    },
-    "ssl_test": {
-        "srcs": [
-            "crypto/test/gtest_main.cc",
-            "ssl/span_test.cc",
-            "ssl/ssl_c_test.c",
-            "ssl/ssl_internal_test.cc",
-            "ssl/ssl_test.cc"
-        ]
-    },
-    "decrepit_test": {
-        "srcs": [
-            "crypto/test/gtest_main.cc",
-            "decrepit/blowfish/blowfish_test.cc",
-            "decrepit/cast/cast_test.cc",
-            "decrepit/cfb/cfb_test.cc",
-            "decrepit/des/des_test.cc",
-            "decrepit/evp/evp_test.cc",
-            "decrepit/ripemd/ripemd_test.cc",
-            "decrepit/xts/xts_test.cc"
-        ]
-    },
-    "bssl": {
-        "srcs": [
-            "tool/args.cc",
-            "tool/ciphers.cc",
-            "tool/client.cc",
-            "tool/const.cc",
-            "tool/digest.cc",
-            "tool/fd.cc",
-            "tool/file.cc",
-            "tool/generate_ech.cc",
-            "tool/generate_ed25519.cc",
-            "tool/genrsa.cc",
-            "tool/pkcs12.cc",
-            "tool/rand.cc",
-            "tool/server.cc",
-            "tool/sign.cc",
-            "tool/speed.cc",
-            "tool/tool.cc",
-            "tool/transport_common.cc"
-        ],
-        "internal_hdrs": [
-            "tool/internal.h",
-            "tool/transport_common.h"
-        ]
-    },
-    "fuzz": {
-        // TODO(crbug.com/42290554): Unlike the other targets, each source here
-        // is expected to be built separately. When we migrate from libFuzzer to
-        // FuzzTest, this will be moot.
-        "srcs": [
-            "fuzz/*.cc"
-        ]
-    },
-    "rust_bssl_sys": {
-        "srcs": [
-            "rust/bssl-sys/src/*.rs"
-        ]
-    },
-    "rust_bssl_crypto": {
-        "srcs": [
-            "rust/bssl-crypto/src/*.rs",
-            "rust/bssl-crypto/src/*/*.rs"
-        ]
-    },
-    "modulewrapper": {
-        "srcs": [
-            "util/fipstools/acvp/modulewrapper/main.cc",
-            "util/fipstools/acvp/modulewrapper/modulewrapper.cc"
-        ],
-        "internal_hdrs": [
-            "util/fipstools/acvp/modulewrapper/modulewrapper.h"
-        ]
-    }
-}
diff --git a/src/cmake/OpenSSLConfig.cmake b/src/cmake/OpenSSLConfig.cmake
deleted file mode 100644
index 2925a25..0000000
--- a/src/cmake/OpenSSLConfig.cmake
+++ /dev/null
@@ -1,46 +0,0 @@
-# Copyright 2022 The BoringSSL Authors
-#
-# 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
-#
-#     https://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(${CMAKE_CURRENT_LIST_DIR}/OpenSSLTargets.cmake)
-
-# Recursively collect dependency locations for the imported targets.
-macro(_openssl_config_libraries libraries target)
-  get_property(_DEPS TARGET ${target} PROPERTY INTERFACE_LINK_LIBRARIES)
-  foreach(_DEP ${_DEPS})
-    if(TARGET ${_DEP})
-      _openssl_config_libraries(${libraries} ${_DEP})
-    else()
-      list(APPEND ${libraries} ${_DEP})
-    endif()
-  endforeach()
-  get_property(_LOC TARGET ${target} PROPERTY LOCATION)
-  list(APPEND ${libraries} ${_LOC})
-endmacro()
-
-set(OPENSSL_FOUND YES)
-get_property(OPENSSL_INCLUDE_DIR TARGET OpenSSL::SSL PROPERTY INTERFACE_INCLUDE_DIRECTORIES)
-get_property(OPENSSL_CRYPTO_LIBRARY TARGET OpenSSL::Crypto PROPERTY LOCATION)
-_openssl_config_libraries(OPENSSL_CRYPTO_LIBRARIES OpenSSL::Crypto)
-list(REMOVE_DUPLICATES OPENSSL_CRYPTO_LIBRARIES)
-
-get_property(OPENSSL_SSL_LIBRARY TARGET OpenSSL::Crypto PROPERTY LOCATION)
-_openssl_config_libraries(OPENSSL_SSL_LIBRARIES OpenSSL::SSL)
-list(REMOVE_DUPLICATES OPENSSL_SSL_LIBRARIES)
-
-set(OPENSSL_LIBRARIES ${OPENSSL_CRYPTO_LIBRARIES} ${OPENSSL_SSL_LIBRARIES})
-list(REMOVE_DUPLICATES OPENSSL_LIBRARIES)
-
-set(_DEP)
-set(_DEPS)
-set(_LOC)
diff --git a/src/cmake/go.cmake b/src/cmake/go.cmake
deleted file mode 100644
index 9b2f411..0000000
--- a/src/cmake/go.cmake
+++ /dev/null
@@ -1,61 +0,0 @@
-# Copyright 2023 The BoringSSL Authors
-#
-# 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
-#
-#     https://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.
-
-# Go is an optional dependency. It's a necessary dependency if running tests or
-# the FIPS build, which will check these.
-find_program(GO_EXECUTABLE go)
-
-function(require_go)
-  if(NOT GO_EXECUTABLE)
-    message(FATAL_ERROR "Could not find Go")
-  endif()
-endfunction()
-
-function(go_executable dest package)
-  require_go()
-  set(godeps "${PROJECT_SOURCE_DIR}/util/godeps.go")
-  if(NOT CMAKE_GENERATOR STREQUAL "Ninja")
-    # The DEPFILE parameter to add_custom_command only works with Ninja. Query
-    # the sources at configure time. Additionally, everything depends on go.mod.
-    # That affects what external packages to use.
-    #
-    # TODO(davidben): Starting CMake 3.20, it also works with Make. Starting
-    # 3.21, it works with Visual Studio and Xcode too.
-    execute_process(COMMAND ${GO_EXECUTABLE} run ${godeps} -format cmake
-                            -pkg ${package}
-                    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
-                    OUTPUT_VARIABLE sources
-                    RESULT_VARIABLE godeps_result)
-    add_custom_command(OUTPUT ${dest}
-                       COMMAND ${GO_EXECUTABLE} build
-                               -o ${CMAKE_CURRENT_BINARY_DIR}/${dest} ${package}
-                       WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
-                       DEPENDS ${sources} ${PROJECT_SOURCE_DIR}/go.mod)
-  else()
-    # Ninja expects the target in the depfile to match the output. This is a
-    # relative path from the build directory.
-    binary_dir_relative_path(${dest} target)
-
-    set(depfile "${CMAKE_CURRENT_BINARY_DIR}/${dest}.d")
-    add_custom_command(OUTPUT ${dest}
-                       COMMAND ${GO_EXECUTABLE} build
-                               -o ${CMAKE_CURRENT_BINARY_DIR}/${dest} ${package}
-                       COMMAND ${GO_EXECUTABLE} run ${godeps} -format depfile
-                               -target ${target} -pkg ${package} -out ${depfile}
-                       WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
-                       DEPENDS ${godeps} ${PROJECT_SOURCE_DIR}/go.mod
-                       DEPFILE ${depfile})
-  endif()
-endfunction()
-
diff --git a/src/cmake/paths.cmake b/src/cmake/paths.cmake
deleted file mode 100644
index 625b188..0000000
--- a/src/cmake/paths.cmake
+++ /dev/null
@@ -1,37 +0,0 @@
-# Copyright 2023 The BoringSSL Authors
-#
-# 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
-#
-#     https://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.
-
-# binary_dir_relative_path sets outvar to
-# ${CMAKE_CURRENT_BINARY_DIR}/${cur_bin_dir_relative}, but expressed relative to
-# ${CMAKE_BINARY_DIR}.
-#
-# TODO(davidben): When we require CMake 3.20 or later, this can be replaced with
-# the built-in cmake_path(RELATIVE_PATH) function.
-function(binary_dir_relative_path cur_bin_dir_relative outvar)
-  string(LENGTH "${CMAKE_BINARY_DIR}/" root_dir_length)
-  string(SUBSTRING "${CMAKE_CURRENT_BINARY_DIR}/${cur_bin_dir_relative}" ${root_dir_length} -1 result)
-  set(${outvar} ${result} PARENT_SCOPE)
-endfunction()
-
-# copy_post_build causes targets in ${ARGN} to be copied to
-# ${CMAKE_CURRENT_BINARY_DIR}/${dir} after being built.
-function(copy_post_build dir)
-  foreach(target ${ARGN})
-    add_custom_command(
-      TARGET ${target}
-      POST_BUILD
-      COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/${dir}"
-      COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${target}> "${CMAKE_CURRENT_BINARY_DIR}/${dir}")
-  endforeach()
-endfunction()
diff --git a/src/codereview.settings b/src/codereview.settings
deleted file mode 100644
index 934cc7e..0000000
--- a/src/codereview.settings
+++ /dev/null
@@ -1,4 +0,0 @@
-# This file is used by "git cl" to get repository specific information.
-GERRIT_HOST: True
-GERRIT_PORT: True
-CODE_REVIEW_SERVER: https://boringssl-review.googlesource.com
diff --git a/src/crypto/abi_self_test.cc b/src/crypto/abi_self_test.cc
deleted file mode 100644
index 7d40641..0000000
--- a/src/crypto/abi_self_test.cc
+++ /dev/null
@@ -1,523 +0,0 @@
-// Copyright 2018 The BoringSSL Authors
-//
-// 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
-//
-//     https://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 <gtest/gtest.h>
-#include <gtest/gtest-spi.h>
-
-#include <openssl/rand.h>
-
-#include "test/abi_test.h"
-
-
-static bool test_function_ok;
-static int TestFunction(int a1, int a2, int a3, int a4, int a5, int a6, int a7,
-                        int a8) {
-  test_function_ok = a1 == 1 || a2 == 2 || a3 == 3 || a4 == 4 || a5 == 5 ||
-                     a6 == 6 || a7 == 7 || a8 == 8;
-  return 42;
-}
-
-TEST(ABITest, SanityCheck) {
-  EXPECT_NE(0, CHECK_ABI_NO_UNWIND(strcmp, "hello", "world"));
-
-  test_function_ok = false;
-  EXPECT_EQ(42, CHECK_ABI_SEH(TestFunction, 1, 2, 3, 4, 5, 6, 7, 8));
-  EXPECT_TRUE(test_function_ok);
-
-#if defined(SUPPORTS_ABI_TEST)
-  abi_test::internal::CallerState state;
-  RAND_bytes(reinterpret_cast<uint8_t *>(&state), sizeof(state));
-  crypto_word_t argv[] = {
-      1, 2, 3, 4, 5, 6, 7, 8,
-  };
-  CHECK_ABI_SEH(abi_test_trampoline,
-                reinterpret_cast<crypto_word_t>(TestFunction), &state, argv, 8,
-                0 /* no breakpoint */);
-
-#if defined(OPENSSL_X86_64)
-  if (abi_test::UnwindTestsEnabled()) {
-    EXPECT_NONFATAL_FAILURE(CHECK_ABI_SEH(abi_test_bad_unwind_wrong_register),
-                            "was not recovered");
-    EXPECT_NONFATAL_FAILURE(CHECK_ABI_SEH(abi_test_bad_unwind_temporary),
-                            "was not recovered");
-
-    CHECK_ABI_NO_UNWIND(abi_test_bad_unwind_wrong_register);
-    CHECK_ABI_NO_UNWIND(abi_test_bad_unwind_temporary);
-
-#if defined(OPENSSL_WINDOWS)
-    // The invalid epilog makes Windows believe the epilog starts later than it
-    // actually does. As a result, immediately after the popq, it does not
-    // realize the stack has been unwound and repeats the popq. This will result
-    // in reading the wrong return address and fail to unwind. The exact failure
-    // may vary depending on what was on the stack before.
-    EXPECT_NONFATAL_FAILURE(CHECK_ABI_SEH(abi_test_bad_unwind_epilog), "");
-    CHECK_ABI_NO_UNWIND(abi_test_bad_unwind_epilog);
-#endif  // OPENSSL_WINDOWS
-  }
-#endif  // OPENSSL_X86_64
-#endif  // SUPPORTS_ABI_TEST
-}
-
-#if defined(OPENSSL_X86_64) && defined(SUPPORTS_ABI_TEST)
-extern "C" {
-void abi_test_clobber_rax(void);
-void abi_test_clobber_rbx(void);
-void abi_test_clobber_rcx(void);
-void abi_test_clobber_rdx(void);
-void abi_test_clobber_rsi(void);
-void abi_test_clobber_rdi(void);
-void abi_test_clobber_rbp(void);
-void abi_test_clobber_r8(void);
-void abi_test_clobber_r9(void);
-void abi_test_clobber_r10(void);
-void abi_test_clobber_r11(void);
-void abi_test_clobber_r12(void);
-void abi_test_clobber_r13(void);
-void abi_test_clobber_r14(void);
-void abi_test_clobber_r15(void);
-void abi_test_clobber_xmm0(void);
-void abi_test_clobber_xmm1(void);
-void abi_test_clobber_xmm2(void);
-void abi_test_clobber_xmm3(void);
-void abi_test_clobber_xmm4(void);
-void abi_test_clobber_xmm5(void);
-void abi_test_clobber_xmm6(void);
-void abi_test_clobber_xmm7(void);
-void abi_test_clobber_xmm8(void);
-void abi_test_clobber_xmm9(void);
-void abi_test_clobber_xmm10(void);
-void abi_test_clobber_xmm11(void);
-void abi_test_clobber_xmm12(void);
-void abi_test_clobber_xmm13(void);
-void abi_test_clobber_xmm14(void);
-void abi_test_clobber_xmm15(void);
-}  // extern "C"
-
-TEST(ABITest, X86_64) {
-  // abi_test_trampoline hides unsaved registers from the caller, so we can
-  // safely call the abi_test_clobber_* functions below.
-  abi_test::internal::CallerState state;
-  RAND_bytes(reinterpret_cast<uint8_t *>(&state), sizeof(state));
-  CHECK_ABI_NO_UNWIND(abi_test_trampoline,
-                      reinterpret_cast<crypto_word_t>(abi_test_clobber_rbx),
-                      &state, nullptr, 0, 0 /* no breakpoint */);
-
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_rax);
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_rbx),
-                          "rbx was not restored after return");
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_rcx);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_rdx);
-#if defined(OPENSSL_WINDOWS)
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_rdi),
-                          "rdi was not restored after return");
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_rsi),
-                          "rsi was not restored after return");
-#else
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_rdi);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_rsi);
-#endif
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_rbp),
-                          "rbp was not restored after return");
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_r8);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_r9);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_r10);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_r11);
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_r12),
-                          "r12 was not restored after return");
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_r13),
-                          "r13 was not restored after return");
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_r14),
-                          "r14 was not restored after return");
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_r15),
-                          "r15 was not restored after return");
-
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_xmm0);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_xmm1);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_xmm2);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_xmm3);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_xmm4);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_xmm5);
-#if defined(OPENSSL_WINDOWS)
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_xmm6),
-                          "xmm6 was not restored after return");
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_xmm7),
-                          "xmm7 was not restored after return");
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_xmm8),
-                          "xmm8 was not restored after return");
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_xmm9),
-                          "xmm9 was not restored after return");
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_xmm10),
-                          "xmm10 was not restored after return");
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_xmm11),
-                          "xmm11 was not restored after return");
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_xmm12),
-                          "xmm12 was not restored after return");
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_xmm13),
-                          "xmm13 was not restored after return");
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_xmm14),
-                          "xmm14 was not restored after return");
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_xmm15),
-                          "xmm15 was not restored after return");
-#else
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_xmm6);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_xmm7);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_xmm8);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_xmm9);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_xmm10);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_xmm11);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_xmm12);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_xmm13);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_xmm14);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_xmm15);
-#endif
-
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_set_direction_flag),
-                          "Direction flag set after return");
-  EXPECT_EQ(0, abi_test_get_and_clear_direction_flag())
-      << "CHECK_ABI did not insulate the caller from direction flag errors";
-}
-#endif   // OPENSSL_X86_64 && SUPPORTS_ABI_TEST
-
-#if defined(OPENSSL_X86) && defined(SUPPORTS_ABI_TEST)
-extern "C" {
-void abi_test_clobber_eax(void);
-void abi_test_clobber_ebx(void);
-void abi_test_clobber_ecx(void);
-void abi_test_clobber_edx(void);
-void abi_test_clobber_esi(void);
-void abi_test_clobber_edi(void);
-void abi_test_clobber_ebp(void);
-void abi_test_clobber_xmm0(void);
-void abi_test_clobber_xmm1(void);
-void abi_test_clobber_xmm2(void);
-void abi_test_clobber_xmm3(void);
-void abi_test_clobber_xmm4(void);
-void abi_test_clobber_xmm5(void);
-void abi_test_clobber_xmm6(void);
-void abi_test_clobber_xmm7(void);
-}  // extern "C"
-
-TEST(ABITest, X86) {
-  // abi_test_trampoline hides unsaved registers from the caller, so we can
-  // safely call the abi_test_clobber_* functions below.
-  abi_test::internal::CallerState state;
-  RAND_bytes(reinterpret_cast<uint8_t *>(&state), sizeof(state));
-  CHECK_ABI_NO_UNWIND(abi_test_trampoline,
-                      reinterpret_cast<crypto_word_t>(abi_test_clobber_ebx),
-                      &state, nullptr, 0, 0 /* no breakpoint */);
-
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_eax);
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_ebx),
-                          "ebx was not restored after return");
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_ecx);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_edx);
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_edi),
-                          "edi was not restored after return");
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_esi),
-                          "esi was not restored after return");
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_ebp),
-                          "ebp was not restored after return");
-
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_xmm0);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_xmm1);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_xmm2);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_xmm3);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_xmm4);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_xmm5);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_xmm6);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_xmm7);
-
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_set_direction_flag),
-                          "Direction flag set after return");
-  EXPECT_EQ(0, abi_test_get_and_clear_direction_flag())
-      << "CHECK_ABI did not insulate the caller from direction flag errors";
-}
-#endif   // OPENSSL_X86 && SUPPORTS_ABI_TEST
-
-#if defined(OPENSSL_ARM) && defined(SUPPORTS_ABI_TEST)
-extern "C" {
-void abi_test_clobber_r0(void);
-void abi_test_clobber_r1(void);
-void abi_test_clobber_r2(void);
-void abi_test_clobber_r3(void);
-void abi_test_clobber_r4(void);
-void abi_test_clobber_r5(void);
-void abi_test_clobber_r6(void);
-void abi_test_clobber_r7(void);
-void abi_test_clobber_r8(void);
-void abi_test_clobber_r9(void);
-void abi_test_clobber_r10(void);
-void abi_test_clobber_r11(void);
-void abi_test_clobber_r12(void);
-// r13, r14, and r15, are sp, lr, and pc, respectively.
-
-void abi_test_clobber_d0(void);
-void abi_test_clobber_d1(void);
-void abi_test_clobber_d2(void);
-void abi_test_clobber_d3(void);
-void abi_test_clobber_d4(void);
-void abi_test_clobber_d5(void);
-void abi_test_clobber_d6(void);
-void abi_test_clobber_d7(void);
-void abi_test_clobber_d8(void);
-void abi_test_clobber_d9(void);
-void abi_test_clobber_d10(void);
-void abi_test_clobber_d11(void);
-void abi_test_clobber_d12(void);
-void abi_test_clobber_d13(void);
-void abi_test_clobber_d14(void);
-void abi_test_clobber_d15(void);
-}  // extern "C"
-
-TEST(ABITest, ARM) {
-  // abi_test_trampoline hides unsaved registers from the caller, so we can
-  // safely call the abi_test_clobber_* functions below.
-  abi_test::internal::CallerState state;
-  RAND_bytes(reinterpret_cast<uint8_t *>(&state), sizeof(state));
-  CHECK_ABI_NO_UNWIND(abi_test_trampoline,
-                      reinterpret_cast<crypto_word_t>(abi_test_clobber_r4),
-                      &state, nullptr, 0, 0 /* no breakpoint */);
-
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_r0);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_r1);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_r2);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_r3);
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_r4),
-                          "r4 was not restored after return");
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_r5),
-                          "r5 was not restored after return");
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_r6),
-                          "r6 was not restored after return");
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_r7),
-                          "r7 was not restored after return");
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_r8),
-                          "r8 was not restored after return");
-#if defined(OPENSSL_APPLE)
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_r9);
-#else
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_r9),
-                          "r9 was not restored after return");
-#endif
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_r10),
-                          "r10 was not restored after return");
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_r11),
-                          "r11 was not restored after return");
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_r12);
-
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_d0);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_d1);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_d2);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_d3);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_d4);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_d5);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_d6);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_d7);
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_d8),
-                          "d8 was not restored after return");
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_d9),
-                          "d9 was not restored after return");
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_d10),
-                          "d10 was not restored after return");
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_d11),
-                          "d11 was not restored after return");
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_d12),
-                          "d12 was not restored after return");
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_d13),
-                          "d13 was not restored after return");
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_d14),
-                          "d14 was not restored after return");
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_d15),
-                          "d15 was not restored after return");
-}
-#endif   // OPENSSL_ARM && SUPPORTS_ABI_TEST
-
-#if defined(OPENSSL_AARCH64) && defined(SUPPORTS_ABI_TEST)
-extern "C" {
-void abi_test_clobber_x0(void);
-void abi_test_clobber_x1(void);
-void abi_test_clobber_x2(void);
-void abi_test_clobber_x3(void);
-void abi_test_clobber_x4(void);
-void abi_test_clobber_x5(void);
-void abi_test_clobber_x6(void);
-void abi_test_clobber_x7(void);
-void abi_test_clobber_x8(void);
-void abi_test_clobber_x9(void);
-void abi_test_clobber_x10(void);
-void abi_test_clobber_x11(void);
-void abi_test_clobber_x12(void);
-void abi_test_clobber_x13(void);
-void abi_test_clobber_x14(void);
-void abi_test_clobber_x15(void);
-void abi_test_clobber_x16(void);
-void abi_test_clobber_x17(void);
-// x18 is the platform register and off limits.
-void abi_test_clobber_x19(void);
-void abi_test_clobber_x20(void);
-void abi_test_clobber_x21(void);
-void abi_test_clobber_x22(void);
-void abi_test_clobber_x23(void);
-void abi_test_clobber_x24(void);
-void abi_test_clobber_x25(void);
-void abi_test_clobber_x26(void);
-void abi_test_clobber_x27(void);
-void abi_test_clobber_x28(void);
-void abi_test_clobber_x29(void);
-
-void abi_test_clobber_d0(void);
-void abi_test_clobber_d1(void);
-void abi_test_clobber_d2(void);
-void abi_test_clobber_d3(void);
-void abi_test_clobber_d4(void);
-void abi_test_clobber_d5(void);
-void abi_test_clobber_d6(void);
-void abi_test_clobber_d7(void);
-void abi_test_clobber_d8(void);
-void abi_test_clobber_d9(void);
-void abi_test_clobber_d10(void);
-void abi_test_clobber_d11(void);
-void abi_test_clobber_d12(void);
-void abi_test_clobber_d13(void);
-void abi_test_clobber_d14(void);
-void abi_test_clobber_d15(void);
-void abi_test_clobber_d16(void);
-void abi_test_clobber_d17(void);
-void abi_test_clobber_d18(void);
-void abi_test_clobber_d19(void);
-void abi_test_clobber_d20(void);
-void abi_test_clobber_d21(void);
-void abi_test_clobber_d22(void);
-void abi_test_clobber_d23(void);
-void abi_test_clobber_d24(void);
-void abi_test_clobber_d25(void);
-void abi_test_clobber_d26(void);
-void abi_test_clobber_d27(void);
-void abi_test_clobber_d28(void);
-void abi_test_clobber_d29(void);
-void abi_test_clobber_d30(void);
-void abi_test_clobber_d31(void);
-
-void abi_test_clobber_v8_upper(void);
-void abi_test_clobber_v9_upper(void);
-void abi_test_clobber_v10_upper(void);
-void abi_test_clobber_v11_upper(void);
-void abi_test_clobber_v12_upper(void);
-void abi_test_clobber_v13_upper(void);
-void abi_test_clobber_v14_upper(void);
-void abi_test_clobber_v15_upper(void);
-}  // extern "C"
-
-TEST(ABITest, AArch64) {
-  // abi_test_trampoline hides unsaved registers from the caller, so we can
-  // safely call the abi_test_clobber_* functions below.
-  abi_test::internal::CallerState state;
-  RAND_bytes(reinterpret_cast<uint8_t *>(&state), sizeof(state));
-  CHECK_ABI_NO_UNWIND(abi_test_trampoline,
-                      reinterpret_cast<crypto_word_t>(abi_test_clobber_x19),
-                      &state, nullptr, 0, 0 /* no breakpoint */);
-
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_x0);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_x1);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_x2);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_x3);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_x4);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_x5);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_x6);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_x7);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_x8);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_x9);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_x10);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_x11);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_x12);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_x13);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_x14);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_x15);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_x16);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_x17);
-
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_x19),
-                          "x19 was not restored after return");
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_x20),
-                          "x20 was not restored after return");
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_x21),
-                          "x21 was not restored after return");
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_x22),
-                          "x22 was not restored after return");
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_x23),
-                          "x23 was not restored after return");
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_x24),
-                          "x24 was not restored after return");
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_x25),
-                          "x25 was not restored after return");
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_x26),
-                          "x26 was not restored after return");
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_x27),
-                          "x27 was not restored after return");
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_x28),
-                          "x28 was not restored after return");
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_x29),
-                          "x29 was not restored after return");
-
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_d0);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_d1);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_d2);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_d3);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_d4);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_d5);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_d6);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_d7);
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_d8),
-                          "d8 was not restored after return");
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_d9),
-                          "d9 was not restored after return");
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_d10),
-                          "d10 was not restored after return");
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_d11),
-                          "d11 was not restored after return");
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_d12),
-                          "d12 was not restored after return");
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_d13),
-                          "d13 was not restored after return");
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_d14),
-                          "d14 was not restored after return");
-  EXPECT_NONFATAL_FAILURE(CHECK_ABI_NO_UNWIND(abi_test_clobber_d15),
-                          "d15 was not restored after return");
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_d16);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_d18);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_d19);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_d20);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_d21);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_d22);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_d23);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_d24);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_d25);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_d26);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_d27);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_d28);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_d29);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_d30);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_d31);
-
-  // The lower halves of v8-v15 (accessed as d8-d15) must be preserved, but not
-  // the upper halves.
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_v8_upper);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_v9_upper);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_v10_upper);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_v11_upper);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_v12_upper);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_v13_upper);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_v14_upper);
-  CHECK_ABI_NO_UNWIND(abi_test_clobber_v15_upper);
-}
-#endif   // OPENSSL_AARCH64 && SUPPORTS_ABI_TEST
diff --git a/src/crypto/aes/aes.cc b/src/crypto/aes/aes.cc
deleted file mode 100644
index fc9b67d..0000000
--- a/src/crypto/aes/aes.cc
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2025 The BoringSSL Authors
-//
-// 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
-//
-//     https://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 <assert.h>
-
-#include <openssl/aes.h>
-
-#include "../fipsmodule/bcm_interface.h"
-
-void AES_encrypt(const uint8_t *in, uint8_t *out, const AES_KEY *key) {
-  BCM_aes_encrypt(in, out, key);
-}
-
-void AES_decrypt(const uint8_t *in, uint8_t *out, const AES_KEY *key) {
-  BCM_aes_decrypt(in, out, key);
-}
-
-int AES_set_encrypt_key(const uint8_t *key, unsigned bits, AES_KEY *aeskey) {
-  if (bits != 128 && bits != 192 && bits != 256) {
-    return -2;
-  }
-  return bcm_success(BCM_aes_set_encrypt_key(key, bits, aeskey)) ? 0 : -1;
-}
-
-int AES_set_decrypt_key(const uint8_t *key, unsigned bits, AES_KEY *aeskey) {
-  if (bits != 128 && bits != 192 && bits != 256) {
-    return -2;
-  }
-  return bcm_success(BCM_aes_set_decrypt_key(key, bits, aeskey)) ? 0 : -1;
-}
diff --git a/src/crypto/asn1/a_bitstr.cc b/src/crypto/asn1/a_bitstr.cc
deleted file mode 100644
index 6bdd726..0000000
--- a/src/crypto/asn1/a_bitstr.cc
+++ /dev/null
@@ -1,259 +0,0 @@
-// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
-//
-// 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
-//
-//     https://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 <openssl/asn1.h>
-
-#include <limits.h>
-#include <string.h>
-
-#include <openssl/bytestring.h>
-#include <openssl/err.h>
-#include <openssl/mem.h>
-
-#include "../internal.h"
-#include "internal.h"
-
-
-int ASN1_BIT_STRING_set(ASN1_BIT_STRING *x, const unsigned char *d,
-                        ossl_ssize_t len) {
-  return ASN1_STRING_set(x, d, len);
-}
-
-int asn1_bit_string_length(const ASN1_BIT_STRING *str,
-                           uint8_t *out_padding_bits) {
-  int len = str->length;
-  if (str->flags & ASN1_STRING_FLAG_BITS_LEFT) {
-    // If the string is already empty, it cannot have padding bits.
-    *out_padding_bits = len == 0 ? 0 : str->flags & 0x07;
-    return len;
-  }
-
-  // TODO(https://crbug.com/boringssl/447): If we move this logic to
-  // |ASN1_BIT_STRING_set_bit|, can we remove this representation?
-  while (len > 0 && str->data[len - 1] == 0) {
-    len--;
-  }
-  uint8_t padding_bits = 0;
-  if (len > 0) {
-    uint8_t last = str->data[len - 1];
-    assert(last != 0);
-    for (; padding_bits < 7; padding_bits++) {
-      if (last & (1 << padding_bits)) {
-        break;
-      }
-    }
-  }
-  *out_padding_bits = padding_bits;
-  return len;
-}
-
-int ASN1_BIT_STRING_num_bytes(const ASN1_BIT_STRING *str, size_t *out) {
-  uint8_t padding_bits;
-  int len = asn1_bit_string_length(str, &padding_bits);
-  if (padding_bits != 0) {
-    return 0;
-  }
-  *out = len;
-  return 1;
-}
-
-int i2c_ASN1_BIT_STRING(const ASN1_BIT_STRING *a, unsigned char **pp) {
-  if (a == NULL) {
-    return 0;
-  }
-
-  uint8_t bits;
-  int len = asn1_bit_string_length(a, &bits);
-  if (len > INT_MAX - 1) {
-    OPENSSL_PUT_ERROR(ASN1, ERR_R_OVERFLOW);
-    return 0;
-  }
-  int ret = 1 + len;
-  if (pp == NULL) {
-    return ret;
-  }
-
-  uint8_t *p = *pp;
-  *(p++) = bits;
-  OPENSSL_memcpy(p, a->data, len);
-  if (len > 0) {
-    p[len - 1] &= (0xff << bits);
-  }
-  p += len;
-  *pp = p;
-  return ret;
-}
-
-int asn1_marshal_bit_string(CBB *out, const ASN1_BIT_STRING *in,
-                            CBS_ASN1_TAG tag) {
-  int len = i2c_ASN1_BIT_STRING(in, nullptr);
-  if (len <= 0) {
-    return 0;
-  }
-  tag = tag == 0 ? CBS_ASN1_BITSTRING : tag;
-  CBB child;
-  uint8_t *ptr;
-  return CBB_add_asn1(out, &child, tag) &&                         //
-         CBB_add_space(&child, &ptr, static_cast<size_t>(len)) &&  //
-         i2c_ASN1_BIT_STRING(in, &ptr) == len &&                   //
-         CBB_flush(out);
-}
-
-ASN1_BIT_STRING *c2i_ASN1_BIT_STRING(ASN1_BIT_STRING **a,
-                                     const unsigned char **pp, long len) {
-  ASN1_BIT_STRING *ret = NULL;
-  const unsigned char *p;
-  unsigned char *s;
-  int padding;
-  uint8_t padding_mask;
-
-  if (len < 1) {
-    OPENSSL_PUT_ERROR(ASN1, ASN1_R_STRING_TOO_SHORT);
-    goto err;
-  }
-
-  if (len > INT_MAX) {
-    OPENSSL_PUT_ERROR(ASN1, ASN1_R_STRING_TOO_LONG);
-    goto err;
-  }
-
-  if ((a == NULL) || ((*a) == NULL)) {
-    if ((ret = ASN1_BIT_STRING_new()) == NULL) {
-      return NULL;
-    }
-  } else {
-    ret = (*a);
-  }
-
-  p = *pp;
-  padding = *(p++);
-  len--;
-  if (padding > 7) {
-    OPENSSL_PUT_ERROR(ASN1, ASN1_R_INVALID_BIT_STRING_BITS_LEFT);
-    goto err;
-  }
-
-  // Unused bits in a BIT STRING must be zero.
-  padding_mask = (1 << padding) - 1;
-  if (padding != 0 && (len < 1 || (p[len - 1] & padding_mask) != 0)) {
-    OPENSSL_PUT_ERROR(ASN1, ASN1_R_INVALID_BIT_STRING_PADDING);
-    goto err;
-  }
-
-  // We do this to preserve the settings.  If we modify the settings, via
-  // the _set_bit function, we will recalculate on output
-  ret->flags &= ~(ASN1_STRING_FLAG_BITS_LEFT | 0x07);    // clear
-  ret->flags |= (ASN1_STRING_FLAG_BITS_LEFT | padding);  // set
-
-  if (len > 0) {
-    s = reinterpret_cast<uint8_t *>(OPENSSL_memdup(p, len));
-    if (s == NULL) {
-      goto err;
-    }
-    p += len;
-  } else {
-    s = NULL;
-  }
-
-  ret->length = (int)len;
-  OPENSSL_free(ret->data);
-  ret->data = s;
-  ret->type = V_ASN1_BIT_STRING;
-  if (a != NULL) {
-    (*a) = ret;
-  }
-  *pp = p;
-  return ret;
-err:
-  if ((ret != NULL) && ((a == NULL) || (*a != ret))) {
-    ASN1_BIT_STRING_free(ret);
-  }
-  return NULL;
-}
-
-// These next 2 functions from Goetz Babin-Ebell <babinebell@trustcenter.de>
-int ASN1_BIT_STRING_set_bit(ASN1_BIT_STRING *a, int n, int value) {
-  int w, v, iv;
-  unsigned char *c;
-
-  w = n / 8;
-  v = 1 << (7 - (n & 0x07));
-  iv = ~v;
-  if (!value) {
-    v = 0;
-  }
-
-  if (a == NULL) {
-    return 0;
-  }
-
-  a->flags &= ~(ASN1_STRING_FLAG_BITS_LEFT | 0x07);  // clear, set on write
-
-  if ((a->length < (w + 1)) || (a->data == NULL)) {
-    if (!value) {
-      return 1;  // Don't need to set
-    }
-    if (a->data == NULL) {
-      c = (unsigned char *)OPENSSL_malloc(w + 1);
-    } else {
-      c = (unsigned char *)OPENSSL_realloc(a->data, w + 1);
-    }
-    if (c == NULL) {
-      return 0;
-    }
-    if (w + 1 - a->length > 0) {
-      OPENSSL_memset(c + a->length, 0, w + 1 - a->length);
-    }
-    a->data = c;
-    a->length = w + 1;
-  }
-  a->data[w] = ((a->data[w]) & iv) | v;
-  while ((a->length > 0) && (a->data[a->length - 1] == 0)) {
-    a->length--;
-  }
-  return 1;
-}
-
-int ASN1_BIT_STRING_get_bit(const ASN1_BIT_STRING *a, int n) {
-  int w, v;
-
-  w = n / 8;
-  v = 1 << (7 - (n & 0x07));
-  if ((a == NULL) || (a->length < (w + 1)) || (a->data == NULL)) {
-    return 0;
-  }
-  return ((a->data[w] & v) != 0);
-}
-
-// Checks if the given bit string contains only bits specified by
-// the flags vector. Returns 0 if there is at least one bit set in 'a'
-// which is not specified in 'flags', 1 otherwise.
-// 'len' is the length of 'flags'.
-int ASN1_BIT_STRING_check(const ASN1_BIT_STRING *a, const unsigned char *flags,
-                          int flags_len) {
-  int i, ok;
-  // Check if there is one bit set at all.
-  if (!a || !a->data) {
-    return 1;
-  }
-
-  // Check each byte of the internal representation of the bit string.
-  ok = 1;
-  for (i = 0; i < a->length && ok; ++i) {
-    unsigned char mask = i < flags_len ? ~flags[i] : 0xff;
-    // We are done if there is an unneeded bit set.
-    ok = (a->data[i] & mask) == 0;
-  }
-  return ok;
-}
diff --git a/src/crypto/asn1/a_bool.cc b/src/crypto/asn1/a_bool.cc
deleted file mode 100644
index 7869e69..0000000
--- a/src/crypto/asn1/a_bool.cc
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
-//
-// 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
-//
-//     https://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 <openssl/asn1.h>
-
-#include <openssl/bytestring.h>
-#include <openssl/err.h>
-
-#include "../bytestring/internal.h"
-
-
-int i2d_ASN1_BOOLEAN(ASN1_BOOLEAN a, unsigned char **outp) {
-  CBB cbb;
-  if (!CBB_init(&cbb, 3) ||  //
-      !CBB_add_asn1_bool(&cbb, a != ASN1_BOOLEAN_FALSE)) {
-    CBB_cleanup(&cbb);
-    return -1;
-  }
-  return CBB_finish_i2d(&cbb, outp);
-}
-
-ASN1_BOOLEAN d2i_ASN1_BOOLEAN(ASN1_BOOLEAN *out, const unsigned char **inp,
-                              long len) {
-  if (len < 0) {
-    return ASN1_BOOLEAN_NONE;
-  }
-
-  CBS cbs;
-  CBS_init(&cbs, *inp, (size_t)len);
-  int val;
-  if (!CBS_get_asn1_bool(&cbs, &val)) {
-    OPENSSL_PUT_ERROR(ASN1, ASN1_R_DECODE_ERROR);
-    return ASN1_BOOLEAN_NONE;
-  }
-
-  ASN1_BOOLEAN ret = val ? ASN1_BOOLEAN_TRUE : ASN1_BOOLEAN_FALSE;
-  if (out != NULL) {
-    *out = ret;
-  }
-  *inp = CBS_data(&cbs);
-  return ret;
-}
diff --git a/src/crypto/asn1/a_d2i_fp.cc b/src/crypto/asn1/a_d2i_fp.cc
deleted file mode 100644
index 66bf8d4..0000000
--- a/src/crypto/asn1/a_d2i_fp.cc
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
-//
-// 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
-//
-//     https://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 <openssl/asn1.h>
-
-#include <limits.h>
-
-#include <openssl/bio.h>
-#include <openssl/err.h>
-#include <openssl/mem.h>
-
-
-void *ASN1_item_d2i_bio(const ASN1_ITEM *it, BIO *in, void *x) {
-  uint8_t *data;
-  size_t len;
-  // Historically, this function did not impose a limit in OpenSSL and is used
-  // to read CRLs, so we leave this without an external bound.
-  if (!BIO_read_asn1(in, &data, &len, INT_MAX)) {
-    return NULL;
-  }
-  const uint8_t *ptr = data;
-  void *ret = ASN1_item_d2i(reinterpret_cast<ASN1_VALUE **>(x), &ptr, len, it);
-  OPENSSL_free(data);
-  return ret;
-}
-
-void *ASN1_item_d2i_fp(const ASN1_ITEM *it, FILE *in, void *x) {
-  BIO *b = BIO_new_fp(in, BIO_NOCLOSE);
-  if (b == NULL) {
-    OPENSSL_PUT_ERROR(ASN1, ERR_R_BUF_LIB);
-    return NULL;
-  }
-  void *ret = ASN1_item_d2i_bio(it, b, x);
-  BIO_free(b);
-  return ret;
-}
diff --git a/src/crypto/asn1/a_dup.cc b/src/crypto/asn1/a_dup.cc
deleted file mode 100644
index df2b9be..0000000
--- a/src/crypto/asn1/a_dup.cc
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
-//
-// 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
-//
-//     https://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 <openssl/asn1.h>
-
-#include <openssl/err.h>
-#include <openssl/mem.h>
-
-// ASN1_ITEM version of dup: this follows the model above except we don't
-// need to allocate the buffer. At some point this could be rewritten to
-// directly dup the underlying structure instead of doing and encode and
-// decode.
-void *ASN1_item_dup(const ASN1_ITEM *it, void *x) {
-  unsigned char *b = NULL;
-  const unsigned char *p;
-  long i;
-  void *ret;
-
-  if (x == NULL) {
-    return NULL;
-  }
-
-  i = ASN1_item_i2d(reinterpret_cast<ASN1_VALUE *>(x), &b, it);
-  if (b == NULL) {
-    return NULL;
-  }
-  p = b;
-  ret = ASN1_item_d2i(NULL, &p, i, it);
-  OPENSSL_free(b);
-  return ret;
-}
diff --git a/src/crypto/asn1/a_gentm.cc b/src/crypto/asn1/a_gentm.cc
deleted file mode 100644
index f3b2fae..0000000
--- a/src/crypto/asn1/a_gentm.cc
+++ /dev/null
@@ -1,109 +0,0 @@
-// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
-//
-// 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
-//
-//     https://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 <openssl/asn1.h>
-#include <openssl/bytestring.h>
-#include <openssl/err.h>
-#include <openssl/mem.h>
-#include <openssl/posix_time.h>
-
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-
-#include "internal.h"
-
-int asn1_generalizedtime_to_tm(struct tm *tm, const ASN1_GENERALIZEDTIME *d) {
-  if (d->type != V_ASN1_GENERALIZEDTIME) {
-    return 0;
-  }
-  CBS cbs;
-  CBS_init(&cbs, d->data, (size_t)d->length);
-  if (!CBS_parse_generalized_time(&cbs, tm, /*allow_timezone_offset=*/0)) {
-    return 0;
-  }
-  return 1;
-}
-
-int ASN1_GENERALIZEDTIME_check(const ASN1_GENERALIZEDTIME *d) {
-  return asn1_generalizedtime_to_tm(NULL, d);
-}
-
-int ASN1_GENERALIZEDTIME_set_string(ASN1_GENERALIZEDTIME *s, const char *str) {
-  size_t len = strlen(str);
-  CBS cbs;
-  CBS_init(&cbs, (const uint8_t *)str, len);
-  if (!CBS_parse_generalized_time(&cbs, /*out_tm=*/NULL,
-                                  /*allow_timezone_offset=*/0)) {
-    return 0;
-  }
-  if (s != NULL) {
-    if (!ASN1_STRING_set(s, str, len)) {
-      return 0;
-    }
-    s->type = V_ASN1_GENERALIZEDTIME;
-  }
-  return 1;
-}
-
-ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_set(ASN1_GENERALIZEDTIME *s,
-                                               int64_t posix_time) {
-  return ASN1_GENERALIZEDTIME_adj(s, posix_time, 0, 0);
-}
-
-ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_adj(ASN1_GENERALIZEDTIME *s,
-                                               int64_t posix_time,
-                                               int offset_day,
-                                               long offset_sec) {
-  struct tm data;
-  if (!OPENSSL_posix_to_tm(posix_time, &data)) {
-    return NULL;
-  }
-
-  if (offset_day || offset_sec) {
-    if (!OPENSSL_gmtime_adj(&data, offset_day, offset_sec)) {
-      return NULL;
-    }
-  }
-
-  if (data.tm_year < 0 - 1900 || data.tm_year > 9999 - 1900) {
-    OPENSSL_PUT_ERROR(ASN1, ASN1_R_ILLEGAL_TIME_VALUE);
-    return NULL;
-  }
-
-  char buf[16];
-  int ret = snprintf(buf, sizeof(buf), "%04d%02d%02d%02d%02d%02dZ",
-                     data.tm_year + 1900, data.tm_mon + 1, data.tm_mday,
-                     data.tm_hour, data.tm_min, data.tm_sec);
-  // |snprintf| must write exactly 15 bytes (plus the NUL) to the buffer.
-  BSSL_CHECK(ret == static_cast<int>(sizeof(buf) - 1));
-
-  int free_s = 0;
-  if (s == NULL) {
-    free_s = 1;
-    s = ASN1_UTCTIME_new();
-    if (s == NULL) {
-      return NULL;
-    }
-  }
-
-  if (!ASN1_STRING_set(s, buf, strlen(buf))) {
-    if (free_s) {
-      ASN1_UTCTIME_free(s);
-    }
-    return NULL;
-  }
-  s->type = V_ASN1_GENERALIZEDTIME;
-  return s;
-}
diff --git a/src/crypto/asn1/a_i2d_fp.cc b/src/crypto/asn1/a_i2d_fp.cc
deleted file mode 100644
index fcde9fb..0000000
--- a/src/crypto/asn1/a_i2d_fp.cc
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
-//
-// 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
-//
-//     https://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 <openssl/asn1.h>
-
-#include <openssl/bio.h>
-#include <openssl/err.h>
-#include <openssl/mem.h>
-
-
-int ASN1_item_i2d_fp(const ASN1_ITEM *it, FILE *out, void *x) {
-  BIO *b = BIO_new_fp(out, BIO_NOCLOSE);
-  if (b == NULL) {
-    OPENSSL_PUT_ERROR(ASN1, ERR_R_BUF_LIB);
-    return 0;
-  }
-  int ret = ASN1_item_i2d_bio(it, b, x);
-  BIO_free(b);
-  return ret;
-}
-
-int ASN1_item_i2d_bio(const ASN1_ITEM *it, BIO *out, void *x) {
-  unsigned char *b = NULL;
-  int n = ASN1_item_i2d(reinterpret_cast<ASN1_VALUE *>(x), &b, it);
-  if (b == NULL) {
-    return 0;
-  }
-
-  int ret = BIO_write_all(out, b, n);
-  OPENSSL_free(b);
-  return ret;
-}
diff --git a/src/crypto/asn1/a_int.cc b/src/crypto/asn1/a_int.cc
deleted file mode 100644
index e641705..0000000
--- a/src/crypto/asn1/a_int.cc
+++ /dev/null
@@ -1,439 +0,0 @@
-// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
-//
-// 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
-//
-//     https://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 <openssl/asn1.h>
-
-#include <assert.h>
-#include <limits.h>
-#include <string.h>
-
-#include <openssl/bytestring.h>
-#include <openssl/err.h>
-#include <openssl/mem.h>
-
-#include "../internal.h"
-#include "internal.h"
-
-
-ASN1_INTEGER *ASN1_INTEGER_dup(const ASN1_INTEGER *x) {
-  return ASN1_STRING_dup(x);
-}
-
-int ASN1_INTEGER_cmp(const ASN1_INTEGER *x, const ASN1_INTEGER *y) {
-  // Compare signs.
-  int neg = x->type & V_ASN1_NEG;
-  if (neg != (y->type & V_ASN1_NEG)) {
-    return neg ? -1 : 1;
-  }
-
-  int ret = ASN1_STRING_cmp(x, y);
-  if (neg) {
-    // This could be |-ret|, but |ASN1_STRING_cmp| is not forbidden from
-    // returning |INT_MIN|.
-    if (ret < 0) {
-      return 1;
-    } else if (ret > 0) {
-      return -1;
-    } else {
-      return 0;
-    }
-  }
-
-  return ret;
-}
-
-// negate_twos_complement negates |len| bytes from |buf| in-place, interpreted
-// as a signed, big-endian two's complement value.
-static void negate_twos_complement(uint8_t *buf, size_t len) {
-  uint8_t borrow = 0;
-  for (size_t i = len - 1; i < len; i--) {
-    uint8_t t = buf[i];
-    buf[i] = 0u - borrow - t;
-    borrow |= t != 0;
-  }
-}
-
-static int is_all_zeros(const uint8_t *in, size_t len) {
-  for (size_t i = 0; i < len; i++) {
-    if (in[i] != 0) {
-      return 0;
-    }
-  }
-  return 1;
-}
-
-int asn1_marshal_integer(CBB *out, const ASN1_INTEGER *in, CBS_ASN1_TAG tag) {
-  int len = i2c_ASN1_INTEGER(in, nullptr);
-  if (len <= 0) {
-    return 0;
-  }
-  tag = tag == 0 ? CBS_ASN1_INTEGER : tag;
-  CBB child;
-  uint8_t *ptr;
-  return CBB_add_asn1(out, &child, tag) &&     //
-         CBB_add_space(&child, &ptr, static_cast<size_t>(len)) &&   //
-         i2c_ASN1_INTEGER(in, &ptr) == len &&  //
-         CBB_flush(out);
-}
-
-int i2c_ASN1_INTEGER(const ASN1_INTEGER *in, unsigned char **outp) {
-  if (in == NULL) {
-    return 0;
-  }
-
-  // |ASN1_INTEGER|s should be represented minimally, but it is possible to
-  // construct invalid ones. Skip leading zeros so this does not produce an
-  // invalid encoding or break invariants.
-  CBS cbs;
-  CBS_init(&cbs, in->data, in->length);
-  while (CBS_len(&cbs) > 0 && CBS_data(&cbs)[0] == 0) {
-    CBS_skip(&cbs, 1);
-  }
-
-  int is_negative = (in->type & V_ASN1_NEG) != 0;
-  size_t pad;
-  CBS copy = cbs;
-  uint8_t msb;
-  if (!CBS_get_u8(&copy, &msb)) {
-    // Zero is represented as a single byte.
-    is_negative = 0;
-    pad = 1;
-  } else if (is_negative) {
-    // 0x80...01 through 0xff...ff have a two's complement of 0x7f...ff
-    // through 0x00...01 and need an extra byte to be negative.
-    // 0x01...00 through 0x80...00 have a two's complement of 0xfe...ff
-    // through 0x80...00 and can be negated as-is.
-    pad = msb > 0x80 ||
-          (msb == 0x80 && !is_all_zeros(CBS_data(&copy), CBS_len(&copy)));
-  } else {
-    // If the high bit is set, the signed representation needs an extra
-    // byte to be positive.
-    pad = (msb & 0x80) != 0;
-  }
-
-  if (CBS_len(&cbs) > INT_MAX - pad) {
-    OPENSSL_PUT_ERROR(ASN1, ERR_R_OVERFLOW);
-    return 0;
-  }
-  int len = (int)(pad + CBS_len(&cbs));
-  assert(len > 0);
-  if (outp == NULL) {
-    return len;
-  }
-
-  if (pad) {
-    (*outp)[0] = 0;
-  }
-  OPENSSL_memcpy(*outp + pad, CBS_data(&cbs), CBS_len(&cbs));
-  if (is_negative) {
-    negate_twos_complement(*outp, len);
-    assert((*outp)[0] >= 0x80);
-  } else {
-    assert((*outp)[0] < 0x80);
-  }
-  *outp += len;
-  return len;
-}
-
-ASN1_INTEGER *c2i_ASN1_INTEGER(ASN1_INTEGER **out, const unsigned char **inp,
-                               long len) {
-  // This function can handle lengths up to INT_MAX - 1, but the rest of the
-  // legacy ASN.1 code mixes integer types, so avoid exposing it to
-  // ASN1_INTEGERS with larger lengths.
-  if (len < 0 || len > INT_MAX / 2) {
-    OPENSSL_PUT_ERROR(ASN1, ASN1_R_TOO_LONG);
-    return NULL;
-  }
-
-  CBS cbs;
-  CBS_init(&cbs, *inp, (size_t)len);
-  int is_negative;
-  if (!CBS_is_valid_asn1_integer(&cbs, &is_negative)) {
-    OPENSSL_PUT_ERROR(ASN1, ASN1_R_INVALID_INTEGER);
-    return NULL;
-  }
-
-  ASN1_INTEGER *ret = NULL;
-  if (out == NULL || *out == NULL) {
-    ret = ASN1_INTEGER_new();
-    if (ret == NULL) {
-      return NULL;
-    }
-  } else {
-    ret = *out;
-  }
-
-  // Convert to |ASN1_INTEGER|'s sign-and-magnitude representation. First,
-  // determine the size needed for a minimal result.
-  if (is_negative) {
-    // 0xff00...01 through 0xff7f..ff have a two's complement of 0x00ff...ff
-    // through 0x000100...001 and need one leading zero removed. 0x8000...00
-    // through 0xff00...00 have a two's complement of 0x8000...00 through
-    // 0x0100...00 and will be minimally-encoded as-is.
-    if (CBS_len(&cbs) > 0 && CBS_data(&cbs)[0] == 0xff &&
-        !is_all_zeros(CBS_data(&cbs) + 1, CBS_len(&cbs) - 1)) {
-      CBS_skip(&cbs, 1);
-    }
-  } else {
-    // Remove the leading zero byte, if any.
-    if (CBS_len(&cbs) > 0 && CBS_data(&cbs)[0] == 0x00) {
-      CBS_skip(&cbs, 1);
-    }
-  }
-
-  if (!ASN1_STRING_set(ret, CBS_data(&cbs), CBS_len(&cbs))) {
-    goto err;
-  }
-
-  if (is_negative) {
-    ret->type = V_ASN1_NEG_INTEGER;
-    negate_twos_complement(ret->data, ret->length);
-  } else {
-    ret->type = V_ASN1_INTEGER;
-  }
-
-  // The value should be minimally-encoded.
-  assert(ret->length == 0 || ret->data[0] != 0);
-  // Zero is not negative.
-  assert(!is_negative || ret->length > 0);
-
-  *inp += len;
-  if (out != NULL) {
-    *out = ret;
-  }
-  return ret;
-
-err:
-  if (ret != NULL && (out == NULL || *out != ret)) {
-    ASN1_INTEGER_free(ret);
-  }
-  return NULL;
-}
-
-int ASN1_INTEGER_set_int64(ASN1_INTEGER *a, int64_t v) {
-  if (v >= 0) {
-    return ASN1_INTEGER_set_uint64(a, (uint64_t)v);
-  }
-
-  if (!ASN1_INTEGER_set_uint64(a, 0 - (uint64_t)v)) {
-    return 0;
-  }
-
-  a->type = V_ASN1_NEG_INTEGER;
-  return 1;
-}
-
-int ASN1_ENUMERATED_set_int64(ASN1_ENUMERATED *a, int64_t v) {
-  if (v >= 0) {
-    return ASN1_ENUMERATED_set_uint64(a, (uint64_t)v);
-  }
-
-  if (!ASN1_ENUMERATED_set_uint64(a, 0 - (uint64_t)v)) {
-    return 0;
-  }
-
-  a->type = V_ASN1_NEG_ENUMERATED;
-  return 1;
-}
-
-int ASN1_INTEGER_set(ASN1_INTEGER *a, long v) {
-  static_assert(sizeof(long) <= sizeof(int64_t), "long fits in int64_t");
-  return ASN1_INTEGER_set_int64(a, v);
-}
-
-int ASN1_ENUMERATED_set(ASN1_ENUMERATED *a, long v) {
-  static_assert(sizeof(long) <= sizeof(int64_t), "long fits in int64_t");
-  return ASN1_ENUMERATED_set_int64(a, v);
-}
-
-static int asn1_string_set_uint64(ASN1_STRING *out, uint64_t v, int type) {
-  uint8_t buf[sizeof(uint64_t)];
-  CRYPTO_store_u64_be(buf, v);
-  size_t leading_zeros;
-  for (leading_zeros = 0; leading_zeros < sizeof(buf); leading_zeros++) {
-    if (buf[leading_zeros] != 0) {
-      break;
-    }
-  }
-
-  if (!ASN1_STRING_set(out, buf + leading_zeros, sizeof(buf) - leading_zeros)) {
-    return 0;
-  }
-  out->type = type;
-  return 1;
-}
-
-int ASN1_INTEGER_set_uint64(ASN1_INTEGER *out, uint64_t v) {
-  return asn1_string_set_uint64(out, v, V_ASN1_INTEGER);
-}
-
-int ASN1_ENUMERATED_set_uint64(ASN1_ENUMERATED *out, uint64_t v) {
-  return asn1_string_set_uint64(out, v, V_ASN1_ENUMERATED);
-}
-
-static int asn1_string_get_abs_uint64(uint64_t *out, const ASN1_STRING *a,
-                                      int type) {
-  if ((a->type & ~V_ASN1_NEG) != type) {
-    OPENSSL_PUT_ERROR(ASN1, ASN1_R_WRONG_INTEGER_TYPE);
-    return 0;
-  }
-  uint8_t buf[sizeof(uint64_t)] = {0};
-  if (a->length > (int)sizeof(buf)) {
-    OPENSSL_PUT_ERROR(ASN1, ASN1_R_INVALID_INTEGER);
-    return 0;
-  }
-  OPENSSL_memcpy(buf + sizeof(buf) - a->length, a->data, a->length);
-  *out = CRYPTO_load_u64_be(buf);
-  return 1;
-}
-
-static int asn1_string_get_uint64(uint64_t *out, const ASN1_STRING *a,
-                                  int type) {
-  if (!asn1_string_get_abs_uint64(out, a, type)) {
-    return 0;
-  }
-  if (a->type & V_ASN1_NEG) {
-    OPENSSL_PUT_ERROR(ASN1, ASN1_R_INVALID_INTEGER);
-    return 0;
-  }
-  return 1;
-}
-
-int ASN1_INTEGER_get_uint64(uint64_t *out, const ASN1_INTEGER *a) {
-  return asn1_string_get_uint64(out, a, V_ASN1_INTEGER);
-}
-
-int ASN1_ENUMERATED_get_uint64(uint64_t *out, const ASN1_ENUMERATED *a) {
-  return asn1_string_get_uint64(out, a, V_ASN1_ENUMERATED);
-}
-
-static int asn1_string_get_int64(int64_t *out, const ASN1_STRING *a, int type) {
-  uint64_t v;
-  if (!asn1_string_get_abs_uint64(&v, a, type)) {
-    return 0;
-  }
-  int64_t i64;
-  int fits_in_i64;
-  // Check |v != 0| to handle manually-constructed negative zeros.
-  if ((a->type & V_ASN1_NEG) && v != 0) {
-    i64 = (int64_t)(0u - v);
-    fits_in_i64 = i64 < 0;
-  } else {
-    i64 = (int64_t)v;
-    fits_in_i64 = i64 >= 0;
-  }
-  if (!fits_in_i64) {
-    OPENSSL_PUT_ERROR(ASN1, ASN1_R_INVALID_INTEGER);
-    return 0;
-  }
-  *out = i64;
-  return 1;
-}
-
-int ASN1_INTEGER_get_int64(int64_t *out, const ASN1_INTEGER *a) {
-  return asn1_string_get_int64(out, a, V_ASN1_INTEGER);
-}
-
-int ASN1_ENUMERATED_get_int64(int64_t *out, const ASN1_ENUMERATED *a) {
-  return asn1_string_get_int64(out, a, V_ASN1_ENUMERATED);
-}
-
-static long asn1_string_get_long(const ASN1_STRING *a, int type) {
-  if (a == NULL) {
-    return 0;
-  }
-
-  int64_t v;
-  if (!asn1_string_get_int64(&v, a, type) ||  //
-      v < LONG_MIN || v > LONG_MAX) {
-    // This function's return value does not distinguish overflow from -1.
-    ERR_clear_error();
-    return -1;
-  }
-
-  return (long)v;
-}
-
-long ASN1_INTEGER_get(const ASN1_INTEGER *a) {
-  return asn1_string_get_long(a, V_ASN1_INTEGER);
-}
-
-long ASN1_ENUMERATED_get(const ASN1_ENUMERATED *a) {
-  return asn1_string_get_long(a, V_ASN1_ENUMERATED);
-}
-
-static ASN1_STRING *bn_to_asn1_string(const BIGNUM *bn, ASN1_STRING *ai,
-                                      int type) {
-  ASN1_INTEGER *ret;
-  if (ai == NULL) {
-    ret = ASN1_STRING_type_new(type);
-  } else {
-    ret = ai;
-  }
-  int len;
-  if (ret == NULL) {
-    OPENSSL_PUT_ERROR(ASN1, ASN1_R_NESTED_ASN1_ERROR);
-    goto err;
-  }
-
-  if (BN_is_negative(bn) && !BN_is_zero(bn)) {
-    ret->type = type | V_ASN1_NEG;
-  } else {
-    ret->type = type;
-  }
-
-  len = BN_num_bytes(bn);
-  if (!ASN1_STRING_set(ret, NULL, len) ||
-      !BN_bn2bin_padded(ret->data, len, bn)) {
-    goto err;
-  }
-  return ret;
-
-err:
-  if (ret != ai) {
-    ASN1_STRING_free(ret);
-  }
-  return NULL;
-}
-
-ASN1_INTEGER *BN_to_ASN1_INTEGER(const BIGNUM *bn, ASN1_INTEGER *ai) {
-  return bn_to_asn1_string(bn, ai, V_ASN1_INTEGER);
-}
-
-ASN1_ENUMERATED *BN_to_ASN1_ENUMERATED(const BIGNUM *bn, ASN1_ENUMERATED *ai) {
-  return bn_to_asn1_string(bn, ai, V_ASN1_ENUMERATED);
-}
-
-static BIGNUM *asn1_string_to_bn(const ASN1_STRING *ai, BIGNUM *bn, int type) {
-  if ((ai->type & ~V_ASN1_NEG) != type) {
-    OPENSSL_PUT_ERROR(ASN1, ASN1_R_WRONG_INTEGER_TYPE);
-    return NULL;
-  }
-
-  BIGNUM *ret;
-  if ((ret = BN_bin2bn(ai->data, ai->length, bn)) == NULL) {
-    OPENSSL_PUT_ERROR(ASN1, ASN1_R_BN_LIB);
-  } else if (ai->type & V_ASN1_NEG) {
-    BN_set_negative(ret, 1);
-  }
-  return ret;
-}
-
-BIGNUM *ASN1_INTEGER_to_BN(const ASN1_INTEGER *ai, BIGNUM *bn) {
-  return asn1_string_to_bn(ai, bn, V_ASN1_INTEGER);
-}
-
-BIGNUM *ASN1_ENUMERATED_to_BN(const ASN1_ENUMERATED *ai, BIGNUM *bn) {
-  return asn1_string_to_bn(ai, bn, V_ASN1_ENUMERATED);
-}
diff --git a/src/crypto/asn1/a_mbstr.cc b/src/crypto/asn1/a_mbstr.cc
deleted file mode 100644
index 7c64b15..0000000
--- a/src/crypto/asn1/a_mbstr.cc
+++ /dev/null
@@ -1,239 +0,0 @@
-// Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved.
-//
-// 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
-//
-//     https://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 <openssl/asn1.h>
-
-#include <limits.h>
-#include <string.h>
-
-#include <openssl/bytestring.h>
-#include <openssl/err.h>
-#include <openssl/mem.h>
-
-#include "../bytestring/internal.h"
-#include "internal.h"
-
-// These functions take a string in UTF8, ASCII or multibyte form and a mask
-// of permissible ASN1 string types. It then works out the minimal type
-// (using the order Printable < IA5 < T61 < BMP < Universal < UTF8) and
-// creates a string of the correct type with the supplied data. Yes this is
-// horrible: it has to be :-( The 'ncopy' form checks minimum and maximum
-// size limits too.
-
-int ASN1_mbstring_copy(ASN1_STRING **out, const unsigned char *in,
-                       ossl_ssize_t len, int inform, unsigned long mask) {
-  return ASN1_mbstring_ncopy(out, in, len, inform, mask, /*minsize=*/0,
-                             /*maxsize=*/0);
-}
-
-OPENSSL_DECLARE_ERROR_REASON(ASN1, INVALID_BMPSTRING)
-OPENSSL_DECLARE_ERROR_REASON(ASN1, INVALID_UNIVERSALSTRING)
-OPENSSL_DECLARE_ERROR_REASON(ASN1, INVALID_UTF8STRING)
-
-int ASN1_mbstring_ncopy(ASN1_STRING **out, const unsigned char *in,
-                        ossl_ssize_t len, int inform, unsigned long mask,
-                        ossl_ssize_t minsize, ossl_ssize_t maxsize) {
-  if (len == -1) {
-    len = strlen((const char *)in);
-  }
-  if (!mask) {
-    mask = DIRSTRING_TYPE;
-  }
-
-  int (*decode_func)(CBS *, uint32_t *);
-  int error;
-  switch (inform) {
-    case MBSTRING_BMP:
-      decode_func = CBS_get_ucs2_be;
-      error = ASN1_R_INVALID_BMPSTRING;
-      break;
-
-    case MBSTRING_UNIV:
-      decode_func = CBS_get_utf32_be;
-      error = ASN1_R_INVALID_UNIVERSALSTRING;
-      break;
-
-    case MBSTRING_UTF8:
-      decode_func = CBS_get_utf8;
-      error = ASN1_R_INVALID_UTF8STRING;
-      break;
-
-    case MBSTRING_ASC:
-      decode_func = CBS_get_latin1;
-      error = ERR_R_INTERNAL_ERROR;  // Latin-1 inputs are never invalid.
-      break;
-
-    default:
-      OPENSSL_PUT_ERROR(ASN1, ASN1_R_UNKNOWN_FORMAT);
-      return -1;
-  }
-
-  // Check |minsize| and |maxsize| and work out the minimal type, if any.
-  CBS cbs;
-  CBS_init(&cbs, in, len);
-  size_t utf8_len = 0, nchar = 0;
-  while (CBS_len(&cbs) != 0) {
-    uint32_t c;
-    if (!decode_func(&cbs, &c)) {
-      OPENSSL_PUT_ERROR(ASN1, error);
-      return -1;
-    }
-    if (nchar == 0 && (inform == MBSTRING_BMP || inform == MBSTRING_UNIV) &&
-        c == 0xfeff) {
-      // Reject byte-order mark. We could drop it but that would mean
-      // adding ambiguity around whether a BOM was included or not when
-      // matching strings.
-      //
-      // For a little-endian UCS-2 string, the BOM will appear as 0xfffe
-      // and will be rejected as noncharacter, below.
-      OPENSSL_PUT_ERROR(ASN1, ASN1_R_ILLEGAL_CHARACTERS);
-      return -1;
-    }
-
-    // Update which output formats are still possible.
-    if ((mask & B_ASN1_PRINTABLESTRING) && !asn1_is_printable(c)) {
-      mask &= ~B_ASN1_PRINTABLESTRING;
-    }
-    if ((mask & B_ASN1_IA5STRING) && (c > 127)) {
-      mask &= ~B_ASN1_IA5STRING;
-    }
-    if ((mask & B_ASN1_T61STRING) && (c > 0xff)) {
-      mask &= ~B_ASN1_T61STRING;
-    }
-    if ((mask & B_ASN1_BMPSTRING) && (c > 0xffff)) {
-      mask &= ~B_ASN1_BMPSTRING;
-    }
-    if (!mask) {
-      OPENSSL_PUT_ERROR(ASN1, ASN1_R_ILLEGAL_CHARACTERS);
-      return -1;
-    }
-
-    nchar++;
-    utf8_len += CBB_get_utf8_len(c);
-    if (maxsize > 0 && nchar > (size_t)maxsize) {
-      OPENSSL_PUT_ERROR(ASN1, ASN1_R_STRING_TOO_LONG);
-      ERR_add_error_dataf("maxsize=%zu", (size_t)maxsize);
-      return -1;
-    }
-  }
-
-  if (minsize > 0 && nchar < (size_t)minsize) {
-    OPENSSL_PUT_ERROR(ASN1, ASN1_R_STRING_TOO_SHORT);
-    ERR_add_error_dataf("minsize=%zu", (size_t)minsize);
-    return -1;
-  }
-
-  // Now work out output format and string type
-  int str_type;
-  int (*encode_func)(CBB *, uint32_t) = CBB_add_latin1;
-  size_t size_estimate = nchar;
-  int outform = MBSTRING_ASC;
-  if (mask & B_ASN1_PRINTABLESTRING) {
-    str_type = V_ASN1_PRINTABLESTRING;
-  } else if (mask & B_ASN1_IA5STRING) {
-    str_type = V_ASN1_IA5STRING;
-  } else if (mask & B_ASN1_T61STRING) {
-    str_type = V_ASN1_T61STRING;
-  } else if (mask & B_ASN1_BMPSTRING) {
-    str_type = V_ASN1_BMPSTRING;
-    outform = MBSTRING_BMP;
-    encode_func = CBB_add_ucs2_be;
-    size_estimate = 2 * nchar;
-  } else if (mask & B_ASN1_UNIVERSALSTRING) {
-    str_type = V_ASN1_UNIVERSALSTRING;
-    encode_func = CBB_add_utf32_be;
-    size_estimate = 4 * nchar;
-    outform = MBSTRING_UNIV;
-  } else if (mask & B_ASN1_UTF8STRING) {
-    str_type = V_ASN1_UTF8STRING;
-    outform = MBSTRING_UTF8;
-    encode_func = CBB_add_utf8;
-    size_estimate = utf8_len;
-  } else {
-    OPENSSL_PUT_ERROR(ASN1, ASN1_R_ILLEGAL_CHARACTERS);
-    return -1;
-  }
-
-  if (!out) {
-    return str_type;
-  }
-
-  int free_dest = 0;
-  ASN1_STRING *dest;
-  if (*out) {
-    dest = *out;
-  } else {
-    free_dest = 1;
-    dest = ASN1_STRING_type_new(str_type);
-    if (!dest) {
-      return -1;
-    }
-  }
-
-  CBB cbb;
-  CBB_zero(&cbb);
-  // If both the same type just copy across
-  uint8_t *data = NULL;
-  size_t data_len = 0;
-  if (inform == outform) {
-    if (!ASN1_STRING_set(dest, in, len)) {
-      goto err;
-    }
-    dest->type = str_type;
-    *out = dest;
-    return str_type;
-  }
-  if (!CBB_init(&cbb, size_estimate + 1)) {
-    goto err;
-  }
-  CBS_init(&cbs, in, len);
-  while (CBS_len(&cbs) != 0) {
-    uint32_t c;
-    if (!decode_func(&cbs, &c) || !encode_func(&cbb, c)) {
-      OPENSSL_PUT_ERROR(ASN1, ERR_R_INTERNAL_ERROR);
-      goto err;
-    }
-  }
-  if (/* OpenSSL historically NUL-terminated this value with a single byte,
-       * even for |MBSTRING_BMP| and |MBSTRING_UNIV|. */
-      !CBB_add_u8(&cbb, 0) ||                 //
-      !CBB_finish(&cbb, &data, &data_len) ||  //
-      data_len < 1 ||                         //
-      data_len > INT_MAX) {
-    OPENSSL_PUT_ERROR(ASN1, ERR_R_INTERNAL_ERROR);
-    OPENSSL_free(data);
-    goto err;
-  }
-  dest->type = str_type;
-  ASN1_STRING_set0(dest, data, (int)data_len - 1);
-  *out = dest;
-  return str_type;
-
-err:
-  if (free_dest) {
-    ASN1_STRING_free(dest);
-  }
-  CBB_cleanup(&cbb);
-  return -1;
-}
-
-int asn1_is_printable(uint32_t value) {
-  if (value > 0x7f) {
-    return 0;
-  }
-  return OPENSSL_isalnum(value) ||  //
-         value == ' ' || value == '\'' || value == '(' || value == ')' ||
-         value == '+' || value == ',' || value == '-' || value == '.' ||
-         value == '/' || value == ':' || value == '=' || value == '?';
-}
diff --git a/src/crypto/asn1/a_object.cc b/src/crypto/asn1/a_object.cc
deleted file mode 100644
index a4ede8a..0000000
--- a/src/crypto/asn1/a_object.cc
+++ /dev/null
@@ -1,193 +0,0 @@
-// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
-//
-// 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
-//
-//     https://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 <openssl/asn1.h>
-
-#include <limits.h>
-#include <string.h>
-
-#include <openssl/bytestring.h>
-#include <openssl/err.h>
-#include <openssl/mem.h>
-#include <openssl/obj.h>
-
-#include "../bytestring/internal.h"
-#include "../internal.h"
-#include "internal.h"
-
-
-int i2d_ASN1_OBJECT(const ASN1_OBJECT *in, unsigned char **outp) {
-  if (in == NULL) {
-    OPENSSL_PUT_ERROR(ASN1, ERR_R_PASSED_NULL_PARAMETER);
-    return -1;
-  }
-
-  if (in->length <= 0) {
-    OPENSSL_PUT_ERROR(ASN1, ASN1_R_ILLEGAL_OBJECT);
-    return -1;
-  }
-
-  CBB cbb, child;
-  if (!CBB_init(&cbb, (size_t)in->length + 2) ||
-      !CBB_add_asn1(&cbb, &child, CBS_ASN1_OBJECT) ||
-      !CBB_add_bytes(&child, in->data, in->length)) {
-    CBB_cleanup(&cbb);
-    return -1;
-  }
-
-  return CBB_finish_i2d(&cbb, outp);
-}
-
-int i2t_ASN1_OBJECT(char *buf, int buf_len, const ASN1_OBJECT *a) {
-  return OBJ_obj2txt(buf, buf_len, a, 0);
-}
-
-static int write_str(BIO *bp, const char *str) {
-  size_t len = strlen(str);
-  if (len > INT_MAX) {
-    OPENSSL_PUT_ERROR(ASN1, ERR_R_OVERFLOW);
-    return -1;
-  }
-  return BIO_write(bp, str, (int)len) == (int)len ? (int)len : -1;
-}
-
-int i2a_ASN1_OBJECT(BIO *bp, const ASN1_OBJECT *a) {
-  if (a == NULL || a->data == NULL) {
-    return write_str(bp, "NULL");
-  }
-
-  char buf[80], *allocated = NULL;
-  const char *str = buf;
-  int len = i2t_ASN1_OBJECT(buf, sizeof(buf), a);
-  if (len > (int)sizeof(buf) - 1) {
-    // The input was truncated. Allocate a buffer that fits.
-    allocated = reinterpret_cast<char *>(OPENSSL_malloc(len + 1));
-    if (allocated == NULL) {
-      return -1;
-    }
-    len = i2t_ASN1_OBJECT(allocated, len + 1, a);
-    str = allocated;
-  }
-  if (len <= 0) {
-    str = "<INVALID>";
-  }
-
-  int ret = write_str(bp, str);
-  OPENSSL_free(allocated);
-  return ret;
-}
-
-ASN1_OBJECT *d2i_ASN1_OBJECT(ASN1_OBJECT **out, const unsigned char **inp,
-                             long len) {
-  if (len < 0) {
-    return NULL;
-  }
-
-  CBS cbs, child;
-  CBS_init(&cbs, *inp, (size_t)len);
-  if (!CBS_get_asn1(&cbs, &child, CBS_ASN1_OBJECT)) {
-    OPENSSL_PUT_ERROR(ASN1, ASN1_R_DECODE_ERROR);
-    return NULL;
-  }
-
-  const uint8_t *contents = CBS_data(&child);
-  ASN1_OBJECT *ret = c2i_ASN1_OBJECT(out, &contents, CBS_len(&child));
-  if (ret != NULL) {
-    // |c2i_ASN1_OBJECT| should have consumed the entire input.
-    assert(CBS_data(&cbs) == contents);
-    *inp = CBS_data(&cbs);
-  }
-  return ret;
-}
-
-ASN1_OBJECT *c2i_ASN1_OBJECT(ASN1_OBJECT **out, const unsigned char **inp,
-                             long len) {
-  if (len < 0) {
-    OPENSSL_PUT_ERROR(ASN1, ASN1_R_INVALID_OBJECT_ENCODING);
-    return NULL;
-  }
-
-  CBS cbs;
-  CBS_init(&cbs, *inp, (size_t)len);
-  if (!CBS_is_valid_asn1_oid(&cbs)) {
-    OPENSSL_PUT_ERROR(ASN1, ASN1_R_INVALID_OBJECT_ENCODING);
-    return NULL;
-  }
-
-  ASN1_OBJECT *ret = ASN1_OBJECT_create(NID_undef, *inp, (size_t)len,
-                                        /*sn=*/NULL, /*ln=*/NULL);
-  if (ret == NULL) {
-    return NULL;
-  }
-
-  if (out != NULL) {
-    ASN1_OBJECT_free(*out);
-    *out = ret;
-  }
-  *inp += len;  // All bytes were consumed.
-  return ret;
-}
-
-ASN1_OBJECT *ASN1_OBJECT_new(void) {
-  ASN1_OBJECT *ret;
-
-  ret = (ASN1_OBJECT *)OPENSSL_malloc(sizeof(ASN1_OBJECT));
-  if (ret == NULL) {
-    return NULL;
-  }
-  ret->length = 0;
-  ret->data = NULL;
-  ret->nid = 0;
-  ret->sn = NULL;
-  ret->ln = NULL;
-  ret->flags = ASN1_OBJECT_FLAG_DYNAMIC;
-  return ret;
-}
-
-void ASN1_OBJECT_free(ASN1_OBJECT *a) {
-  if (a == NULL) {
-    return;
-  }
-  if (a->flags & ASN1_OBJECT_FLAG_DYNAMIC_STRINGS) {
-    OPENSSL_free((void *)a->sn);
-    OPENSSL_free((void *)a->ln);
-    a->sn = a->ln = NULL;
-  }
-  if (a->flags & ASN1_OBJECT_FLAG_DYNAMIC_DATA) {
-    OPENSSL_free((void *)a->data);
-    a->data = NULL;
-    a->length = 0;
-  }
-  if (a->flags & ASN1_OBJECT_FLAG_DYNAMIC) {
-    OPENSSL_free(a);
-  }
-}
-
-ASN1_OBJECT *ASN1_OBJECT_create(int nid, const unsigned char *data, size_t len,
-                                const char *sn, const char *ln) {
-  if (len > INT_MAX) {
-    OPENSSL_PUT_ERROR(ASN1, ASN1_R_STRING_TOO_LONG);
-    return NULL;
-  }
-
-  ASN1_OBJECT o;
-  o.sn = sn;
-  o.ln = ln;
-  o.data = data;
-  o.nid = nid;
-  o.length = (int)len;
-  o.flags = ASN1_OBJECT_FLAG_DYNAMIC | ASN1_OBJECT_FLAG_DYNAMIC_STRINGS |
-            ASN1_OBJECT_FLAG_DYNAMIC_DATA;
-  return OBJ_dup(&o);
-}
diff --git a/src/crypto/asn1/a_octet.cc b/src/crypto/asn1/a_octet.cc
deleted file mode 100644
index edcfb1e..0000000
--- a/src/crypto/asn1/a_octet.cc
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
-//
-// 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
-//
-//     https://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 <openssl/asn1.h>
-
-#include <openssl/err.h>
-#include <openssl/mem.h>
-
-ASN1_OCTET_STRING *ASN1_OCTET_STRING_dup(const ASN1_OCTET_STRING *x) {
-  return ASN1_STRING_dup(x);
-}
-
-int ASN1_OCTET_STRING_cmp(const ASN1_OCTET_STRING *a,
-                          const ASN1_OCTET_STRING *b) {
-  return ASN1_STRING_cmp(a, b);
-}
-
-int ASN1_OCTET_STRING_set(ASN1_OCTET_STRING *x, const unsigned char *d,
-                          int len) {
-  return ASN1_STRING_set(x, d, len);
-}
diff --git a/src/crypto/asn1/a_strex.cc b/src/crypto/asn1/a_strex.cc
deleted file mode 100644
index a2d5e2c..0000000
--- a/src/crypto/asn1/a_strex.cc
+++ /dev/null
@@ -1,415 +0,0 @@
-// Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved.
-//
-// 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
-//
-//     https://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 <openssl/asn1.h>
-
-#include <assert.h>
-#include <ctype.h>
-#include <inttypes.h>
-#include <limits.h>
-#include <string.h>
-#include <time.h>
-
-#include <openssl/bio.h>
-#include <openssl/bytestring.h>
-#include <openssl/mem.h>
-
-#include "../bytestring/internal.h"
-#include "../internal.h"
-#include "internal.h"
-
-
-#define ESC_FLAGS                                                           \
-  (ASN1_STRFLGS_ESC_2253 | ASN1_STRFLGS_ESC_QUOTE | ASN1_STRFLGS_ESC_CTRL | \
-   ASN1_STRFLGS_ESC_MSB)
-
-static int maybe_write(BIO *out, const void *buf, int len) {
-  // If |out| is NULL, ignore the output but report the length.
-  return out == NULL || BIO_write(out, buf, len) == len;
-}
-
-static int is_control_character(unsigned char c) { return c < 32 || c == 127; }
-
-static int do_esc_char(uint32_t c, unsigned long flags, char *do_quotes,
-                       BIO *out, int is_first, int is_last) {
-  // |c| is a |uint32_t| because, depending on |ASN1_STRFLGS_UTF8_CONVERT|,
-  // we may be escaping bytes or Unicode codepoints.
-  char buf[16];  // Large enough for "\\W01234567".
-  unsigned char u8 = (unsigned char)c;
-  if (c > 0xffff) {
-    snprintf(buf, sizeof(buf), "\\W%08" PRIX32, c);
-  } else if (c > 0xff) {
-    snprintf(buf, sizeof(buf), "\\U%04" PRIX32, c);
-  } else if ((flags & ASN1_STRFLGS_ESC_MSB) && c > 0x7f) {
-    snprintf(buf, sizeof(buf), "\\%02X", c);
-  } else if ((flags & ASN1_STRFLGS_ESC_CTRL) && is_control_character(c)) {
-    snprintf(buf, sizeof(buf), "\\%02X", c);
-  } else if (flags & ASN1_STRFLGS_ESC_2253) {
-    // See RFC 2253, sections 2.4 and 4.
-    if (c == '\\' || c == '"') {
-      // Quotes and backslashes are always escaped, quoted or not.
-      snprintf(buf, sizeof(buf), "\\%c", (int)c);
-    } else if (c == ',' || c == '+' || c == '<' || c == '>' || c == ';' ||
-               (is_first && (c == ' ' || c == '#')) ||
-               (is_last && (c == ' '))) {
-      if (flags & ASN1_STRFLGS_ESC_QUOTE) {
-        // No need to escape, just tell the caller to quote.
-        if (do_quotes != NULL) {
-          *do_quotes = 1;
-        }
-        return maybe_write(out, &u8, 1) ? 1 : -1;
-      }
-      snprintf(buf, sizeof(buf), "\\%c", (int)c);
-    } else {
-      return maybe_write(out, &u8, 1) ? 1 : -1;
-    }
-  } else if ((flags & ESC_FLAGS) && c == '\\') {
-    // If any escape flags are set, also escape backslashes.
-    snprintf(buf, sizeof(buf), "\\%c", (int)c);
-  } else {
-    return maybe_write(out, &u8, 1) ? 1 : -1;
-  }
-
-  static_assert(sizeof(buf) < INT_MAX, "len may not fit in int");
-  int len = (int)strlen(buf);
-  return maybe_write(out, buf, len) ? len : -1;
-}
-
-// This function sends each character in a buffer to do_esc_char(). It
-// interprets the content formats and converts to or from UTF8 as
-// appropriate.
-
-static int do_buf(const unsigned char *buf, int buflen, int encoding,
-                  unsigned long flags, char *quotes, BIO *out) {
-  int (*get_char)(CBS *cbs, uint32_t *out);
-  int get_char_error;
-  switch (encoding) {
-    case MBSTRING_UNIV:
-      get_char = CBS_get_utf32_be;
-      get_char_error = ASN1_R_INVALID_UNIVERSALSTRING;
-      break;
-    case MBSTRING_BMP:
-      get_char = CBS_get_ucs2_be;
-      get_char_error = ASN1_R_INVALID_BMPSTRING;
-      break;
-    case MBSTRING_ASC:
-      get_char = CBS_get_latin1;
-      get_char_error = ERR_R_INTERNAL_ERROR;  // Should not be possible.
-      break;
-    case MBSTRING_UTF8:
-      get_char = CBS_get_utf8;
-      get_char_error = ASN1_R_INVALID_UTF8STRING;
-      break;
-    default:
-      assert(0);
-      return -1;
-  }
-
-  CBS cbs;
-  CBS_init(&cbs, buf, buflen);
-  int outlen = 0;
-  while (CBS_len(&cbs) != 0) {
-    const int is_first = CBS_data(&cbs) == buf;
-    uint32_t c;
-    if (!get_char(&cbs, &c)) {
-      OPENSSL_PUT_ERROR(ASN1, get_char_error);
-      return -1;
-    }
-    const int is_last = CBS_len(&cbs) == 0;
-    if (flags & ASN1_STRFLGS_UTF8_CONVERT) {
-      uint8_t utf8_buf[6];
-      CBB utf8_cbb;
-      CBB_init_fixed(&utf8_cbb, utf8_buf, sizeof(utf8_buf));
-      if (!CBB_add_utf8(&utf8_cbb, c)) {
-        OPENSSL_PUT_ERROR(ASN1, ERR_R_INTERNAL_ERROR);
-        return 1;
-      }
-      size_t utf8_len = CBB_len(&utf8_cbb);
-      for (size_t i = 0; i < utf8_len; i++) {
-        int len = do_esc_char(utf8_buf[i], flags, quotes, out,
-                              is_first && i == 0, is_last && i == utf8_len - 1);
-        if (len < 0) {
-          return -1;
-        }
-        outlen += len;
-      }
-    } else {
-      int len = do_esc_char(c, flags, quotes, out, is_first, is_last);
-      if (len < 0) {
-        return -1;
-      }
-      outlen += len;
-    }
-  }
-  return outlen;
-}
-
-// This function hex dumps a buffer of characters
-
-static int do_hex_dump(BIO *out, unsigned char *buf, int buflen) {
-  static const char hexdig[] = "0123456789ABCDEF";
-  unsigned char *p, *q;
-  char hextmp[2];
-  if (out) {
-    p = buf;
-    q = buf + buflen;
-    while (p != q) {
-      hextmp[0] = hexdig[*p >> 4];
-      hextmp[1] = hexdig[*p & 0xf];
-      if (!maybe_write(out, hextmp, 2)) {
-        return -1;
-      }
-      p++;
-    }
-  }
-  return buflen << 1;
-}
-
-// "dump" a string. This is done when the type is unknown, or the flags
-// request it. We can either dump the content octets or the entire DER
-// encoding. This uses the RFC 2253 #01234 format.
-
-static int do_dump(unsigned long flags, BIO *out, const ASN1_STRING *str) {
-  if (!maybe_write(out, "#", 1)) {
-    return -1;
-  }
-
-  // If we don't dump DER encoding just dump content octets
-  if (!(flags & ASN1_STRFLGS_DUMP_DER)) {
-    int outlen = do_hex_dump(out, str->data, str->length);
-    if (outlen < 0) {
-      return -1;
-    }
-    return outlen + 1;
-  }
-
-  // Placing the ASN1_STRING in a temporary ASN1_TYPE allows the DER encoding
-  // to readily obtained.
-  ASN1_TYPE t;
-  OPENSSL_memset(&t, 0, sizeof(ASN1_TYPE));
-  asn1_type_set0_string(&t, (ASN1_STRING *)str);
-  unsigned char *der_buf = NULL;
-  int der_len = i2d_ASN1_TYPE(&t, &der_buf);
-  if (der_len < 0) {
-    return -1;
-  }
-  int outlen = do_hex_dump(out, der_buf, der_len);
-  OPENSSL_free(der_buf);
-  if (outlen < 0) {
-    return -1;
-  }
-  return outlen + 1;
-}
-
-// string_type_to_encoding returns the |MBSTRING_*| constant for the encoding
-// used by the |ASN1_STRING| type |type|, or -1 if |tag| is not a string
-// type.
-static int string_type_to_encoding(int type) {
-  // This function is sometimes passed ASN.1 universal types and sometimes
-  // passed |ASN1_STRING| type values
-  switch (type) {
-    case V_ASN1_UTF8STRING:
-      return MBSTRING_UTF8;
-    case V_ASN1_NUMERICSTRING:
-    case V_ASN1_PRINTABLESTRING:
-    case V_ASN1_T61STRING:
-    case V_ASN1_IA5STRING:
-    case V_ASN1_UTCTIME:
-    case V_ASN1_GENERALIZEDTIME:
-    case V_ASN1_ISO64STRING:
-      // |MBSTRING_ASC| refers to Latin-1, not ASCII.
-      return MBSTRING_ASC;
-    case V_ASN1_UNIVERSALSTRING:
-      return MBSTRING_UNIV;
-    case V_ASN1_BMPSTRING:
-      return MBSTRING_BMP;
-  }
-  return -1;
-}
-
-// This is the main function, print out an ASN1_STRING taking note of various
-// escape and display options. Returns number of characters written or -1 if
-// an error occurred.
-
-int ASN1_STRING_print_ex(BIO *out, const ASN1_STRING *str,
-                         unsigned long flags) {
-  int type = str->type;
-  int outlen = 0;
-  if (flags & ASN1_STRFLGS_SHOW_TYPE) {
-    const char *tagname = ASN1_tag2str(type);
-    outlen += strlen(tagname);
-    if (!maybe_write(out, tagname, outlen) || !maybe_write(out, ":", 1)) {
-      return -1;
-    }
-    outlen++;
-  }
-
-  // Decide what to do with |str|, either dump the contents or display it.
-  int encoding;
-  if (flags & ASN1_STRFLGS_DUMP_ALL) {
-    // Dump everything.
-    encoding = -1;
-  } else if (flags & ASN1_STRFLGS_IGNORE_TYPE) {
-    // Ignore the string type and interpret the contents as Latin-1.
-    encoding = MBSTRING_ASC;
-  } else {
-    encoding = string_type_to_encoding(type);
-    if (encoding == -1 && (flags & ASN1_STRFLGS_DUMP_UNKNOWN) == 0) {
-      encoding = MBSTRING_ASC;
-    }
-  }
-
-  if (encoding == -1) {
-    int len = do_dump(flags, out, str);
-    if (len < 0) {
-      return -1;
-    }
-    outlen += len;
-    return outlen;
-  }
-
-  // Measure the length.
-  char quotes = 0;
-  int len = do_buf(str->data, str->length, encoding, flags, &quotes, NULL);
-  if (len < 0) {
-    return -1;
-  }
-  outlen += len;
-  if (quotes) {
-    outlen += 2;
-  }
-  if (!out) {
-    return outlen;
-  }
-
-  // Encode the value.
-  if ((quotes && !maybe_write(out, "\"", 1)) ||
-      do_buf(str->data, str->length, encoding, flags, NULL, out) < 0 ||
-      (quotes && !maybe_write(out, "\"", 1))) {
-    return -1;
-  }
-  return outlen;
-}
-
-int ASN1_STRING_print_ex_fp(FILE *fp, const ASN1_STRING *str,
-                            unsigned long flags) {
-  BIO *bio = NULL;
-  if (fp != NULL) {
-    // If |fp| is NULL, this function returns the number of bytes without
-    // writing.
-    bio = BIO_new_fp(fp, BIO_NOCLOSE);
-    if (bio == NULL) {
-      return -1;
-    }
-  }
-  int ret = ASN1_STRING_print_ex(bio, str, flags);
-  BIO_free(bio);
-  return ret;
-}
-
-int ASN1_STRING_to_UTF8(unsigned char **out, const ASN1_STRING *in) {
-  if (!in) {
-    return -1;
-  }
-  int mbflag = string_type_to_encoding(in->type);
-  if (mbflag == -1) {
-    OPENSSL_PUT_ERROR(ASN1, ASN1_R_UNKNOWN_TAG);
-    return -1;
-  }
-  ASN1_STRING stmp, *str = &stmp;
-  stmp.data = NULL;
-  stmp.length = 0;
-  stmp.flags = 0;
-  int ret =
-      ASN1_mbstring_copy(&str, in->data, in->length, mbflag, B_ASN1_UTF8STRING);
-  if (ret < 0) {
-    return ret;
-  }
-  *out = stmp.data;
-  return stmp.length;
-}
-
-int ASN1_STRING_print(BIO *bp, const ASN1_STRING *v) {
-  int i, n;
-  char buf[80];
-  const char *p;
-
-  if (v == NULL) {
-    return 0;
-  }
-  n = 0;
-  p = (const char *)v->data;
-  for (i = 0; i < v->length; i++) {
-    if ((p[i] > '~') || ((p[i] < ' ') && (p[i] != '\n') && (p[i] != '\r'))) {
-      buf[n] = '.';
-    } else {
-      buf[n] = p[i];
-    }
-    n++;
-    if (n >= 80) {
-      if (BIO_write(bp, buf, n) <= 0) {
-        return 0;
-      }
-      n = 0;
-    }
-  }
-  if (n > 0) {
-    if (BIO_write(bp, buf, n) <= 0) {
-      return 0;
-    }
-  }
-  return 1;
-}
-
-int ASN1_TIME_print(BIO *bp, const ASN1_TIME *tm) {
-  if (tm->type == V_ASN1_UTCTIME) {
-    return ASN1_UTCTIME_print(bp, tm);
-  }
-  if (tm->type == V_ASN1_GENERALIZEDTIME) {
-    return ASN1_GENERALIZEDTIME_print(bp, tm);
-  }
-  BIO_puts(bp, "Bad time value");
-  return 0;
-}
-
-static const char *const mon[12] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun",
-                                    "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
-
-int ASN1_GENERALIZEDTIME_print(BIO *bp, const ASN1_GENERALIZEDTIME *tm) {
-  CBS cbs;
-  CBS_init(&cbs, tm->data, tm->length);
-  struct tm utc;
-  if (!CBS_parse_generalized_time(&cbs, &utc, /*allow_timezone_offset=*/0)) {
-    BIO_puts(bp, "Bad time value");
-    return 0;
-  }
-
-  return BIO_printf(bp, "%s %2d %02d:%02d:%02d %d GMT", mon[utc.tm_mon],
-                    utc.tm_mday, utc.tm_hour, utc.tm_min, utc.tm_sec,
-                    utc.tm_year + 1900) > 0;
-}
-
-int ASN1_UTCTIME_print(BIO *bp, const ASN1_UTCTIME *tm) {
-  CBS cbs;
-  CBS_init(&cbs, tm->data, tm->length);
-  struct tm utc;
-  if (!CBS_parse_utc_time(&cbs, &utc, /*allow_timezone_offset=*/0)) {
-    BIO_puts(bp, "Bad time value");
-    return 0;
-  }
-
-  return BIO_printf(bp, "%s %2d %02d:%02d:%02d %d GMT", mon[utc.tm_mon],
-                    utc.tm_mday, utc.tm_hour, utc.tm_min, utc.tm_sec,
-                    utc.tm_year + 1900) > 0;
-}
diff --git a/src/crypto/asn1/a_strnid.cc b/src/crypto/asn1/a_strnid.cc
deleted file mode 100644
index c2a0c27..0000000
--- a/src/crypto/asn1/a_strnid.cc
+++ /dev/null
@@ -1,206 +0,0 @@
-// Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved.
-//
-// 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
-//
-//     https://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 <openssl/asn1.h>
-
-#include <assert.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <openssl/err.h>
-#include <openssl/mem.h>
-#include <openssl/obj.h>
-
-#include "../internal.h"
-#include "../lhash/internal.h"
-#include "internal.h"
-
-
-DEFINE_LHASH_OF(ASN1_STRING_TABLE)
-
-static LHASH_OF(ASN1_STRING_TABLE) *string_tables = NULL;
-static CRYPTO_MUTEX string_tables_lock = CRYPTO_MUTEX_INIT;
-
-void ASN1_STRING_set_default_mask(unsigned long mask) {}
-
-unsigned long ASN1_STRING_get_default_mask(void) { return B_ASN1_UTF8STRING; }
-
-int ASN1_STRING_set_default_mask_asc(const char *p) { return 1; }
-
-static const ASN1_STRING_TABLE *asn1_string_table_get(int nid);
-
-// The following function generates an ASN1_STRING based on limits in a
-// table. Frequently the types and length of an ASN1_STRING are restricted by
-// a corresponding OID. For example certificates and certificate requests.
-
-ASN1_STRING *ASN1_STRING_set_by_NID(ASN1_STRING **out, const unsigned char *in,
-                                    ossl_ssize_t len, int inform, int nid) {
-  ASN1_STRING *str = NULL;
-  int ret;
-  if (!out) {
-    out = &str;
-  }
-  const ASN1_STRING_TABLE *tbl = asn1_string_table_get(nid);
-  if (tbl != NULL) {
-    unsigned long mask = tbl->mask;
-    if (!(tbl->flags & STABLE_NO_MASK)) {
-      mask &= B_ASN1_UTF8STRING;
-    }
-    ret = ASN1_mbstring_ncopy(out, in, len, inform, mask, tbl->minsize,
-                              tbl->maxsize);
-  } else {
-    ret = ASN1_mbstring_copy(out, in, len, inform, B_ASN1_UTF8STRING);
-  }
-  if (ret <= 0) {
-    return NULL;
-  }
-  return *out;
-}
-
-// Now the tables and helper functions for the string table:
-
-// See RFC 5280.
-#define ub_name 32768
-#define ub_common_name 64
-#define ub_locality_name 128
-#define ub_state_name 128
-#define ub_organization_name 64
-#define ub_organization_unit_name 64
-#define ub_email_address 128
-#define ub_serial_number 64
-
-// This table must be kept in NID order
-
-static const ASN1_STRING_TABLE tbl_standard[] = {
-    {NID_commonName, 1, ub_common_name, DIRSTRING_TYPE, 0},
-    {NID_countryName, 2, 2, B_ASN1_PRINTABLESTRING, STABLE_NO_MASK},
-    {NID_localityName, 1, ub_locality_name, DIRSTRING_TYPE, 0},
-    {NID_stateOrProvinceName, 1, ub_state_name, DIRSTRING_TYPE, 0},
-    {NID_organizationName, 1, ub_organization_name, DIRSTRING_TYPE, 0},
-    {NID_organizationalUnitName, 1, ub_organization_unit_name, DIRSTRING_TYPE,
-     0},
-    {NID_pkcs9_emailAddress, 1, ub_email_address, B_ASN1_IA5STRING,
-     STABLE_NO_MASK},
-    {NID_pkcs9_unstructuredName, 1, -1, PKCS9STRING_TYPE, 0},
-    {NID_pkcs9_challengePassword, 1, -1, PKCS9STRING_TYPE, 0},
-    {NID_pkcs9_unstructuredAddress, 1, -1, DIRSTRING_TYPE, 0},
-    {NID_givenName, 1, ub_name, DIRSTRING_TYPE, 0},
-    {NID_surname, 1, ub_name, DIRSTRING_TYPE, 0},
-    {NID_initials, 1, ub_name, DIRSTRING_TYPE, 0},
-    {NID_serialNumber, 1, ub_serial_number, B_ASN1_PRINTABLESTRING,
-     STABLE_NO_MASK},
-    {NID_friendlyName, -1, -1, B_ASN1_BMPSTRING, STABLE_NO_MASK},
-    {NID_name, 1, ub_name, DIRSTRING_TYPE, 0},
-    {NID_dnQualifier, -1, -1, B_ASN1_PRINTABLESTRING, STABLE_NO_MASK},
-    {NID_domainComponent, 1, -1, B_ASN1_IA5STRING, STABLE_NO_MASK},
-    {NID_ms_csp_name, -1, -1, B_ASN1_BMPSTRING, STABLE_NO_MASK}};
-
-static int table_cmp(const ASN1_STRING_TABLE *a, const ASN1_STRING_TABLE *b) {
-  if (a->nid < b->nid) {
-    return -1;
-  }
-  if (a->nid > b->nid) {
-    return 1;
-  }
-  return 0;
-}
-
-static int table_cmp_void(const void *a, const void *b) {
-  return table_cmp(reinterpret_cast<const ASN1_STRING_TABLE *>(a),
-                   reinterpret_cast<const ASN1_STRING_TABLE *>(b));
-}
-
-static uint32_t table_hash(const ASN1_STRING_TABLE *tbl) {
-  return OPENSSL_hash32(&tbl->nid, sizeof(tbl->nid));
-}
-
-static const ASN1_STRING_TABLE *asn1_string_table_get(int nid) {
-  ASN1_STRING_TABLE key;
-  key.nid = nid;
-  const ASN1_STRING_TABLE *tbl = reinterpret_cast<ASN1_STRING_TABLE *>(
-      bsearch(&key, tbl_standard, OPENSSL_ARRAY_SIZE(tbl_standard),
-              sizeof(ASN1_STRING_TABLE), table_cmp_void));
-  if (tbl != NULL) {
-    return tbl;
-  }
-
-  CRYPTO_MUTEX_lock_read(&string_tables_lock);
-  if (string_tables != NULL) {
-    tbl = lh_ASN1_STRING_TABLE_retrieve(string_tables, &key);
-  }
-  CRYPTO_MUTEX_unlock_read(&string_tables_lock);
-  // Note returning |tbl| without the lock is only safe because
-  // |ASN1_STRING_TABLE_add| cannot modify or delete existing entries. If we
-  // wish to support that, this function must copy the result under a lock.
-  return tbl;
-}
-
-int ASN1_STRING_TABLE_add(int nid, long minsize, long maxsize,
-                          unsigned long mask, unsigned long flags) {
-  // Existing entries cannot be overwritten.
-  if (asn1_string_table_get(nid) != NULL) {
-    OPENSSL_PUT_ERROR(ASN1, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
-    return 0;
-  }
-
-  int ret = 0;
-  CRYPTO_MUTEX_lock_write(&string_tables_lock);
-
-  ASN1_STRING_TABLE *tbl = NULL;
-  if (string_tables == NULL) {
-    string_tables = lh_ASN1_STRING_TABLE_new(table_hash, table_cmp);
-    if (string_tables == NULL) {
-      goto err;
-    }
-  } else {
-    // Check again for an existing entry. One may have been added while
-    // unlocked.
-    ASN1_STRING_TABLE key;
-    key.nid = nid;
-    if (lh_ASN1_STRING_TABLE_retrieve(string_tables, &key) != NULL) {
-      OPENSSL_PUT_ERROR(ASN1, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
-      goto err;
-    }
-  }
-
-  tbl = reinterpret_cast<ASN1_STRING_TABLE *>(
-      OPENSSL_malloc(sizeof(ASN1_STRING_TABLE)));
-  if (tbl == NULL) {
-    goto err;
-  }
-  tbl->nid = nid;
-  tbl->flags = flags;
-  tbl->minsize = minsize;
-  tbl->maxsize = maxsize;
-  tbl->mask = mask;
-  ASN1_STRING_TABLE *old_tbl;
-  if (!lh_ASN1_STRING_TABLE_insert(string_tables, &old_tbl, tbl)) {
-    OPENSSL_free(tbl);
-    goto err;
-  }
-  assert(old_tbl == NULL);
-  ret = 1;
-
-err:
-  CRYPTO_MUTEX_unlock_write(&string_tables_lock);
-  return ret;
-}
-
-void ASN1_STRING_TABLE_cleanup(void) {}
-
-void asn1_get_string_table_for_testing(const ASN1_STRING_TABLE **out_ptr,
-                                       size_t *out_len) {
-  *out_ptr = tbl_standard;
-  *out_len = OPENSSL_ARRAY_SIZE(tbl_standard);
-}
diff --git a/src/crypto/asn1/a_time.cc b/src/crypto/asn1/a_time.cc
deleted file mode 100644
index 46785f6..0000000
--- a/src/crypto/asn1/a_time.cc
+++ /dev/null
@@ -1,224 +0,0 @@
-// Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved.
-//
-// 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
-//
-//     https://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 <openssl/asn1.h>
-#include <openssl/posix_time.h>
-
-#include <string.h>
-#include <time.h>
-
-#include <openssl/asn1t.h>
-#include <openssl/bytestring.h>
-#include <openssl/err.h>
-#include <openssl/mem.h>
-
-#include "internal.h"
-
-// This is an implementation of the ASN1 Time structure which is: Time ::=
-// CHOICE { utcTime UTCTime, generalTime GeneralizedTime } written by Steve
-// Henson.
-
-IMPLEMENT_ASN1_MSTRING(ASN1_TIME, B_ASN1_TIME)
-
-IMPLEMENT_ASN1_FUNCTIONS_const(ASN1_TIME)
-
-ASN1_TIME *ASN1_TIME_set_posix(ASN1_TIME *s, int64_t posix_time) {
-  return ASN1_TIME_adj(s, posix_time, 0, 0);
-}
-
-ASN1_TIME *ASN1_TIME_set(ASN1_TIME *s, time_t time) {
-  return ASN1_TIME_adj(s, time, 0, 0);
-}
-
-static int fits_in_utc_time(const struct tm *tm) {
-  return 50 <= tm->tm_year && tm->tm_year < 150;
-}
-
-ASN1_TIME *ASN1_TIME_adj(ASN1_TIME *s, int64_t posix_time, int offset_day,
-                         long offset_sec) {
-  struct tm tm;
-
-  if (!OPENSSL_posix_to_tm(posix_time, &tm)) {
-    OPENSSL_PUT_ERROR(ASN1, ASN1_R_ERROR_GETTING_TIME);
-    return NULL;
-  }
-  if (offset_day || offset_sec) {
-    if (!OPENSSL_gmtime_adj(&tm, offset_day, offset_sec)) {
-      return NULL;
-    }
-  }
-  if (fits_in_utc_time(&tm)) {
-    return ASN1_UTCTIME_adj(s, posix_time, offset_day, offset_sec);
-  }
-  return ASN1_GENERALIZEDTIME_adj(s, posix_time, offset_day, offset_sec);
-}
-
-int ASN1_TIME_check(const ASN1_TIME *t) {
-  if (t->type == V_ASN1_GENERALIZEDTIME) {
-    return ASN1_GENERALIZEDTIME_check(t);
-  } else if (t->type == V_ASN1_UTCTIME) {
-    return ASN1_UTCTIME_check(t);
-  }
-  return 0;
-}
-
-// Convert an ASN1_TIME structure to GeneralizedTime
-ASN1_GENERALIZEDTIME *ASN1_TIME_to_generalizedtime(const ASN1_TIME *in,
-                                                   ASN1_GENERALIZEDTIME **out) {
-  if (!ASN1_TIME_check(in)) {
-    return NULL;
-  }
-
-  ASN1_GENERALIZEDTIME *ret = NULL;
-  if (!out || !*out) {
-    if (!(ret = ASN1_GENERALIZEDTIME_new())) {
-      goto err;
-    }
-  } else {
-    ret = *out;
-  }
-
-  // If already GeneralizedTime just copy across
-  if (in->type == V_ASN1_GENERALIZEDTIME) {
-    if (!ASN1_STRING_set(ret, in->data, in->length)) {
-      goto err;
-    }
-    goto done;
-  }
-
-  // Grow the string to accomodate the two-digit century.
-  if (!ASN1_STRING_set(ret, NULL, in->length + 2)) {
-    goto err;
-  }
-
-  {
-    char *const out_str = (char *)ret->data;
-    // |ASN1_STRING_set| also allocates an additional byte for a trailing NUL.
-    const size_t out_str_capacity = in->length + 2 + 1;
-    // Work out the century and prepend
-    if (in->data[0] >= '5') {
-      OPENSSL_strlcpy(out_str, "19", out_str_capacity);
-    } else {
-      OPENSSL_strlcpy(out_str, "20", out_str_capacity);
-    }
-    OPENSSL_strlcat(out_str, (const char *)in->data, out_str_capacity);
-  }
-
-done:
-  if (out != NULL && *out == NULL) {
-    *out = ret;
-  }
-  return ret;
-
-err:
-  if (out == NULL || *out != ret) {
-    ASN1_GENERALIZEDTIME_free(ret);
-  }
-  return NULL;
-}
-
-int ASN1_TIME_set_string(ASN1_TIME *s, const char *str) {
-  return ASN1_UTCTIME_set_string(s, str) ||
-         ASN1_GENERALIZEDTIME_set_string(s, str);
-}
-
-int ASN1_TIME_set_string_X509(ASN1_TIME *s, const char *str) {
-  CBS cbs;
-  CBS_init(&cbs, (const uint8_t *)str, strlen(str));
-  int type;
-  struct tm tm;
-  if (CBS_parse_utc_time(&cbs, /*out_tm=*/NULL,
-                         /*allow_timezone_offset=*/0)) {
-    type = V_ASN1_UTCTIME;
-  } else if (CBS_parse_generalized_time(&cbs, &tm,
-                                        /*allow_timezone_offset=*/0)) {
-    type = V_ASN1_GENERALIZEDTIME;
-    if (fits_in_utc_time(&tm)) {
-      type = V_ASN1_UTCTIME;
-      CBS_skip(&cbs, 2);
-    }
-  } else {
-    return 0;
-  }
-
-  if (s != NULL) {
-    if (!ASN1_STRING_set(s, CBS_data(&cbs), CBS_len(&cbs))) {
-      return 0;
-    }
-    s->type = type;
-  }
-  return 1;
-}
-
-static int asn1_time_to_tm(struct tm *tm, const ASN1_TIME *t,
-                           int allow_timezone_offset) {
-  if (t == NULL) {
-    if (OPENSSL_posix_to_tm(time(NULL), tm)) {
-      return 1;
-    }
-    return 0;
-  }
-
-  if (t->type == V_ASN1_UTCTIME) {
-    return asn1_utctime_to_tm(tm, t, allow_timezone_offset);
-  } else if (t->type == V_ASN1_GENERALIZEDTIME) {
-    return asn1_generalizedtime_to_tm(tm, t);
-  }
-
-  return 0;
-}
-
-int ASN1_TIME_diff(int *out_days, int *out_seconds, const ASN1_TIME *from,
-                   const ASN1_TIME *to) {
-  struct tm tm_from, tm_to;
-  if (!asn1_time_to_tm(&tm_from, from, /*allow_timezone_offset=*/1)) {
-    return 0;
-  }
-  if (!asn1_time_to_tm(&tm_to, to, /*allow_timezone_offset=*/1)) {
-    return 0;
-  }
-  return OPENSSL_gmtime_diff(out_days, out_seconds, &tm_from, &tm_to);
-}
-
-int ASN1_TIME_to_posix_nonstandard(const ASN1_TIME *t, int64_t *out_time) {
-  struct tm tm;
-  if (!asn1_time_to_tm(&tm, t, /*allow_timezone_offset=*/1)) {
-    return 0;
-  }
-  return OPENSSL_tm_to_posix(&tm, out_time);
-}
-
-// The functions below do *not* permissively allow the use of four digit
-// timezone offsets in UTC times, as is done elsewhere in the code. They are
-// both new API, and used internally to X509_cmp_time. This is to discourage the
-// use of nonstandard times in new code, and to ensure that this code behaves
-// correctly in X509_cmp_time which historically did its own time validations
-// slightly different than the many other copies of X.509 time validation
-// sprinkled through the codebase. The custom checks in X509_cmp_time meant that
-// it did not allow four digit timezone offsets in UTC times.
-int ASN1_TIME_to_time_t(const ASN1_TIME *t, time_t *out_time) {
-  struct tm tm;
-  if (!asn1_time_to_tm(&tm, t, /*allow_timezone_offset=*/0)) {
-    return 0;
-  }
-  return OPENSSL_timegm(&tm, out_time);
-}
-
-int ASN1_TIME_to_posix(const ASN1_TIME *t, int64_t *out_time) {
-  struct tm tm;
-  if (!asn1_time_to_tm(&tm, t, /*allow_timezone_offset=*/0)) {
-    return 0;
-  }
-  return OPENSSL_tm_to_posix(&tm, out_time);
-}
diff --git a/src/crypto/asn1/a_type.cc b/src/crypto/asn1/a_type.cc
deleted file mode 100644
index 92e9ede..0000000
--- a/src/crypto/asn1/a_type.cc
+++ /dev/null
@@ -1,172 +0,0 @@
-// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
-//
-// 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
-//
-//     https://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 <openssl/asn1.h>
-
-#include <assert.h>
-
-#include <openssl/err.h>
-#include <openssl/mem.h>
-#include <openssl/obj.h>
-
-#include "internal.h"
-
-
-int ASN1_TYPE_get(const ASN1_TYPE *a) {
-  switch (a->type) {
-    case V_ASN1_NULL:
-    case V_ASN1_BOOLEAN:
-      return a->type;
-    case V_ASN1_OBJECT:
-      return a->value.object != NULL ? a->type : 0;
-    default:
-      return a->value.asn1_string != NULL ? a->type : 0;
-  }
-}
-
-const void *asn1_type_value_as_pointer(const ASN1_TYPE *a) {
-  switch (a->type) {
-    case V_ASN1_NULL:
-      return NULL;
-    case V_ASN1_BOOLEAN:
-      return a->value.boolean ? (void *)0xff : NULL;
-    case V_ASN1_OBJECT:
-      return a->value.object;
-    default:
-      return a->value.asn1_string;
-  }
-}
-
-void asn1_type_set0_string(ASN1_TYPE *a, ASN1_STRING *str) {
-  // |ASN1_STRING| types are almost the same as |ASN1_TYPE| types, except that
-  // the negative flag is not reflected into |ASN1_TYPE|.
-  int type = str->type;
-  if (type == V_ASN1_NEG_INTEGER) {
-    type = V_ASN1_INTEGER;
-  } else if (type == V_ASN1_NEG_ENUMERATED) {
-    type = V_ASN1_ENUMERATED;
-  }
-
-  // These types are not |ASN1_STRING| types and use a different
-  // representation when stored in |ASN1_TYPE|.
-  assert(type != V_ASN1_NULL && type != V_ASN1_OBJECT &&
-         type != V_ASN1_BOOLEAN);
-  ASN1_TYPE_set(a, type, str);
-}
-
-void asn1_type_cleanup(ASN1_TYPE *a) {
-  switch (a->type) {
-    case V_ASN1_NULL:
-      a->value.ptr = NULL;
-      break;
-    case V_ASN1_BOOLEAN:
-      a->value.boolean = ASN1_BOOLEAN_NONE;
-      break;
-    case V_ASN1_OBJECT:
-      ASN1_OBJECT_free(a->value.object);
-      a->value.object = NULL;
-      break;
-    default:
-      ASN1_STRING_free(a->value.asn1_string);
-      a->value.asn1_string = NULL;
-      break;
-  }
-}
-
-void ASN1_TYPE_set(ASN1_TYPE *a, int type, void *value) {
-  asn1_type_cleanup(a);
-  a->type = type;
-  switch (type) {
-    case V_ASN1_NULL:
-      a->value.ptr = NULL;
-      break;
-    case V_ASN1_BOOLEAN:
-      a->value.boolean = value ? ASN1_BOOLEAN_TRUE : ASN1_BOOLEAN_FALSE;
-      break;
-    case V_ASN1_OBJECT:
-      a->value.object = reinterpret_cast<ASN1_OBJECT *>(value);
-      break;
-    default:
-      a->value.asn1_string = reinterpret_cast<ASN1_STRING *>(value);
-      break;
-  }
-}
-
-int ASN1_TYPE_set1(ASN1_TYPE *a, int type, const void *value) {
-  if (!value || (type == V_ASN1_BOOLEAN)) {
-    void *p = (void *)value;
-    ASN1_TYPE_set(a, type, p);
-  } else if (type == V_ASN1_OBJECT) {
-    ASN1_OBJECT *odup;
-    odup = OBJ_dup(reinterpret_cast<const ASN1_OBJECT *>(value));
-    if (!odup) {
-      return 0;
-    }
-    ASN1_TYPE_set(a, type, odup);
-  } else {
-    ASN1_STRING *sdup;
-    sdup = ASN1_STRING_dup(reinterpret_cast<const ASN1_STRING *>(value));
-    if (!sdup) {
-      return 0;
-    }
-    ASN1_TYPE_set(a, type, sdup);
-  }
-  return 1;
-}
-
-// Returns 0 if they are equal, != 0 otherwise.
-int ASN1_TYPE_cmp(const ASN1_TYPE *a, const ASN1_TYPE *b) {
-  int result = -1;
-
-  if (!a || !b || a->type != b->type) {
-    return -1;
-  }
-
-  switch (a->type) {
-    case V_ASN1_OBJECT:
-      result = OBJ_cmp(a->value.object, b->value.object);
-      break;
-    case V_ASN1_NULL:
-      result = 0;  // They do not have content.
-      break;
-    case V_ASN1_BOOLEAN:
-      result = a->value.boolean - b->value.boolean;
-      break;
-    case V_ASN1_INTEGER:
-    case V_ASN1_ENUMERATED:
-    case V_ASN1_BIT_STRING:
-    case V_ASN1_OCTET_STRING:
-    case V_ASN1_SEQUENCE:
-    case V_ASN1_SET:
-    case V_ASN1_NUMERICSTRING:
-    case V_ASN1_PRINTABLESTRING:
-    case V_ASN1_T61STRING:
-    case V_ASN1_VIDEOTEXSTRING:
-    case V_ASN1_IA5STRING:
-    case V_ASN1_UTCTIME:
-    case V_ASN1_GENERALIZEDTIME:
-    case V_ASN1_GRAPHICSTRING:
-    case V_ASN1_VISIBLESTRING:
-    case V_ASN1_GENERALSTRING:
-    case V_ASN1_UNIVERSALSTRING:
-    case V_ASN1_BMPSTRING:
-    case V_ASN1_UTF8STRING:
-    case V_ASN1_OTHER:
-    default:
-      result = ASN1_STRING_cmp(a->value.asn1_string, b->value.asn1_string);
-      break;
-  }
-
-  return result;
-}
diff --git a/src/crypto/asn1/a_utctm.cc b/src/crypto/asn1/a_utctm.cc
deleted file mode 100644
index 5c9e359..0000000
--- a/src/crypto/asn1/a_utctm.cc
+++ /dev/null
@@ -1,109 +0,0 @@
-// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
-//
-// 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
-//
-//     https://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 <openssl/asn1.h>
-#include <openssl/bytestring.h>
-#include <openssl/err.h>
-#include <openssl/mem.h>
-#include <openssl/posix_time.h>
-
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-
-#include "internal.h"
-
-int asn1_utctime_to_tm(struct tm *tm, const ASN1_UTCTIME *d,
-                       int allow_timezone_offset) {
-  if (d->type != V_ASN1_UTCTIME) {
-    return 0;
-  }
-  CBS cbs;
-  CBS_init(&cbs, d->data, (size_t)d->length);
-  if (!CBS_parse_utc_time(&cbs, tm, allow_timezone_offset)) {
-    return 0;
-  }
-  return 1;
-}
-
-int ASN1_UTCTIME_check(const ASN1_UTCTIME *d) {
-  return asn1_utctime_to_tm(NULL, d, /*allow_timezone_offset=*/1);
-}
-
-int ASN1_UTCTIME_set_string(ASN1_UTCTIME *s, const char *str) {
-  // Although elsewhere we allow timezone offsets with UTCTime, to be compatible
-  // with some existing misissued certificates, this function is used to
-  // construct new certificates and can be stricter.
-  size_t len = strlen(str);
-  CBS cbs;
-  CBS_init(&cbs, (const uint8_t *)str, len);
-  if (!CBS_parse_utc_time(&cbs, /*out_tm=*/NULL,
-                          /*allow_timezone_offset=*/0)) {
-    return 0;
-  }
-  if (s != NULL) {
-    if (!ASN1_STRING_set(s, str, len)) {
-      return 0;
-    }
-    s->type = V_ASN1_UTCTIME;
-  }
-  return 1;
-}
-
-ASN1_UTCTIME *ASN1_UTCTIME_set(ASN1_UTCTIME *s, int64_t posix_time) {
-  return ASN1_UTCTIME_adj(s, posix_time, 0, 0);
-}
-
-ASN1_UTCTIME *ASN1_UTCTIME_adj(ASN1_UTCTIME *s, int64_t posix_time,
-                               int offset_day, long offset_sec) {
-  struct tm data;
-  if (!OPENSSL_posix_to_tm(posix_time, &data)) {
-    return NULL;
-  }
-
-  if (offset_day || offset_sec) {
-    if (!OPENSSL_gmtime_adj(&data, offset_day, offset_sec)) {
-      return NULL;
-    }
-  }
-
-  if (data.tm_year < 50 || data.tm_year >= 150) {
-    return NULL;
-  }
-
-  char buf[14];
-  int ret = snprintf(buf, sizeof(buf), "%02d%02d%02d%02d%02d%02dZ",
-                     data.tm_year % 100, data.tm_mon + 1, data.tm_mday,
-                     data.tm_hour, data.tm_min, data.tm_sec);
-  // |snprintf| must write exactly 15 bytes (plus the NUL) to the buffer.
-  BSSL_CHECK(ret == static_cast<int>(sizeof(buf) - 1));
-
-  int free_s = 0;
-  if (s == NULL) {
-    free_s = 1;
-    s = ASN1_UTCTIME_new();
-    if (s == NULL) {
-      return NULL;
-    }
-  }
-
-  if (!ASN1_STRING_set(s, buf, strlen(buf))) {
-    if (free_s) {
-      ASN1_UTCTIME_free(s);
-    }
-    return NULL;
-  }
-  s->type = V_ASN1_UTCTIME;
-  return s;
-}
diff --git a/src/crypto/asn1/asn1_lib.cc b/src/crypto/asn1/asn1_lib.cc
deleted file mode 100644
index 517dda5..0000000
--- a/src/crypto/asn1/asn1_lib.cc
+++ /dev/null
@@ -1,355 +0,0 @@
-// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
-//
-// 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
-//
-//     https://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 <openssl/asn1.h>
-
-#include <limits.h>
-#include <string.h>
-
-#include <openssl/bytestring.h>
-#include <openssl/err.h>
-#include <openssl/mem.h>
-
-#include "../internal.h"
-#include "internal.h"
-
-
-// Cross-module errors from crypto/x509/i2d_pr.c.
-OPENSSL_DECLARE_ERROR_REASON(ASN1, UNSUPPORTED_PUBLIC_KEY_TYPE)
-
-// Cross-module errors from crypto/x509/algorithm.c.
-OPENSSL_DECLARE_ERROR_REASON(ASN1, CONTEXT_NOT_INITIALISED)
-OPENSSL_DECLARE_ERROR_REASON(ASN1, DIGEST_AND_KEY_TYPE_NOT_SUPPORTED)
-OPENSSL_DECLARE_ERROR_REASON(ASN1, UNKNOWN_MESSAGE_DIGEST_ALGORITHM)
-OPENSSL_DECLARE_ERROR_REASON(ASN1, UNKNOWN_SIGNATURE_ALGORITHM)
-OPENSSL_DECLARE_ERROR_REASON(ASN1, WRONG_PUBLIC_KEY_TYPE)
-// Cross-module errors from crypto/x509/asn1_gen.c. TODO(davidben): Remove
-// these once asn1_gen.c is gone.
-OPENSSL_DECLARE_ERROR_REASON(ASN1, DEPTH_EXCEEDED)
-OPENSSL_DECLARE_ERROR_REASON(ASN1, ILLEGAL_BITSTRING_FORMAT)
-OPENSSL_DECLARE_ERROR_REASON(ASN1, ILLEGAL_BOOLEAN)
-OPENSSL_DECLARE_ERROR_REASON(ASN1, ILLEGAL_FORMAT)
-OPENSSL_DECLARE_ERROR_REASON(ASN1, ILLEGAL_HEX)
-OPENSSL_DECLARE_ERROR_REASON(ASN1, ILLEGAL_IMPLICIT_TAG)
-OPENSSL_DECLARE_ERROR_REASON(ASN1, ILLEGAL_INTEGER)
-OPENSSL_DECLARE_ERROR_REASON(ASN1, ILLEGAL_NESTED_TAGGING)
-OPENSSL_DECLARE_ERROR_REASON(ASN1, ILLEGAL_NULL_VALUE)
-OPENSSL_DECLARE_ERROR_REASON(ASN1, ILLEGAL_OBJECT)
-OPENSSL_DECLARE_ERROR_REASON(ASN1, ILLEGAL_TIME_VALUE)
-OPENSSL_DECLARE_ERROR_REASON(ASN1, INTEGER_NOT_ASCII_FORMAT)
-OPENSSL_DECLARE_ERROR_REASON(ASN1, INVALID_MODIFIER)
-OPENSSL_DECLARE_ERROR_REASON(ASN1, INVALID_NUMBER)
-OPENSSL_DECLARE_ERROR_REASON(ASN1, LIST_ERROR)
-OPENSSL_DECLARE_ERROR_REASON(ASN1, MISSING_VALUE)
-OPENSSL_DECLARE_ERROR_REASON(ASN1, NOT_ASCII_FORMAT)
-OPENSSL_DECLARE_ERROR_REASON(ASN1, OBJECT_NOT_ASCII_FORMAT)
-OPENSSL_DECLARE_ERROR_REASON(ASN1, SEQUENCE_OR_SET_NEEDS_CONFIG)
-OPENSSL_DECLARE_ERROR_REASON(ASN1, TIME_NOT_ASCII_FORMAT)
-OPENSSL_DECLARE_ERROR_REASON(ASN1, UNKNOWN_FORMAT)
-OPENSSL_DECLARE_ERROR_REASON(ASN1, UNKNOWN_TAG)
-OPENSSL_DECLARE_ERROR_REASON(ASN1, UNSUPPORTED_TYPE)
-
-// Limit |ASN1_STRING|s to 64 MiB of data. Most of this module, as well as
-// downstream code, does not correctly handle overflow. We cap string fields
-// more tightly than strictly necessary to fit in |int|. This is not expected to
-// impact real world uses of this field.
-//
-// In particular, this limit is small enough that the bit count of a BIT STRING
-// comfortably fits in an |int|, with room for arithmetic.
-#define ASN1_STRING_MAX (64 * 1024 * 1024)
-
-static void asn1_put_length(unsigned char **pp, int length);
-
-int ASN1_get_object(const unsigned char **inp, long *out_len, int *out_tag,
-                    int *out_class, long in_len) {
-  if (in_len < 0) {
-    OPENSSL_PUT_ERROR(ASN1, ASN1_R_HEADER_TOO_LONG);
-    return 0x80;
-  }
-
-  CBS_ASN1_TAG tag;
-  CBS cbs, body;
-  CBS_init(&cbs, *inp, (size_t)in_len);
-  if (!CBS_get_any_asn1(&cbs, &body, &tag) ||
-      // Bound the length to comfortably fit in an int. Lengths in this
-      // module often switch between int and long without overflow checks.
-      CBS_len(&body) > INT_MAX / 2) {
-    OPENSSL_PUT_ERROR(ASN1, ASN1_R_HEADER_TOO_LONG);
-    return 0x80;
-  }
-
-  // Convert between tag representations.
-  int tag_class = (tag & CBS_ASN1_CLASS_MASK) >> CBS_ASN1_TAG_SHIFT;
-  int constructed = (tag & CBS_ASN1_CONSTRUCTED) >> CBS_ASN1_TAG_SHIFT;
-  int tag_number = tag & CBS_ASN1_TAG_NUMBER_MASK;
-
-  // To avoid ambiguity with V_ASN1_NEG, impose a limit on universal tags.
-  if (tag_class == V_ASN1_UNIVERSAL && tag_number > V_ASN1_MAX_UNIVERSAL) {
-    OPENSSL_PUT_ERROR(ASN1, ASN1_R_HEADER_TOO_LONG);
-    return 0x80;
-  }
-
-  *inp = CBS_data(&body);
-  *out_len = CBS_len(&body);
-  *out_tag = tag_number;
-  *out_class = tag_class;
-  return constructed;
-}
-
-// class 0 is constructed constructed == 2 for indefinite length constructed
-void ASN1_put_object(unsigned char **pp, int constructed, int length, int tag,
-                     int xclass) {
-  unsigned char *p = *pp;
-  int i, ttag;
-
-  i = (constructed) ? V_ASN1_CONSTRUCTED : 0;
-  i |= (xclass & V_ASN1_PRIVATE);
-  if (tag < 31) {
-    *(p++) = i | (tag & V_ASN1_PRIMITIVE_TAG);
-  } else {
-    *(p++) = i | V_ASN1_PRIMITIVE_TAG;
-    for (i = 0, ttag = tag; ttag > 0; i++) {
-      ttag >>= 7;
-    }
-    ttag = i;
-    while (i-- > 0) {
-      p[i] = tag & 0x7f;
-      if (i != (ttag - 1)) {
-        p[i] |= 0x80;
-      }
-      tag >>= 7;
-    }
-    p += ttag;
-  }
-  if (constructed == 2) {
-    *(p++) = 0x80;
-  } else {
-    asn1_put_length(&p, length);
-  }
-  *pp = p;
-}
-
-int ASN1_put_eoc(unsigned char **pp) {
-  // This function is no longer used in the library, but some external code
-  // uses it.
-  unsigned char *p = *pp;
-  *p++ = 0;
-  *p++ = 0;
-  *pp = p;
-  return 2;
-}
-
-static void asn1_put_length(unsigned char **pp, int length) {
-  unsigned char *p = *pp;
-  int i, l;
-  if (length <= 127) {
-    *(p++) = (unsigned char)length;
-  } else {
-    l = length;
-    for (i = 0; l > 0; i++) {
-      l >>= 8;
-    }
-    *(p++) = i | 0x80;
-    l = i;
-    while (i-- > 0) {
-      p[i] = length & 0xff;
-      length >>= 8;
-    }
-    p += l;
-  }
-  *pp = p;
-}
-
-int ASN1_object_size(int constructed, int length, int tag) {
-  int ret = 1;
-  if (length < 0) {
-    return -1;
-  }
-  if (tag >= 31) {
-    while (tag > 0) {
-      tag >>= 7;
-      ret++;
-    }
-  }
-  if (constructed == 2) {
-    ret += 3;
-  } else {
-    ret++;
-    if (length > 127) {
-      int tmplen = length;
-      while (tmplen > 0) {
-        tmplen >>= 8;
-        ret++;
-      }
-    }
-  }
-  if (ret >= INT_MAX - length) {
-    return -1;
-  }
-  return ret + length;
-}
-
-int ASN1_STRING_copy(ASN1_STRING *dst, const ASN1_STRING *str) {
-  if (str == NULL) {
-    return 0;
-  }
-  if (!ASN1_STRING_set(dst, str->data, str->length)) {
-    return 0;
-  }
-  dst->type = str->type;
-  dst->flags = str->flags;
-  return 1;
-}
-
-ASN1_STRING *ASN1_STRING_dup(const ASN1_STRING *str) {
-  ASN1_STRING *ret;
-  if (!str) {
-    return NULL;
-  }
-  ret = ASN1_STRING_new();
-  if (!ret) {
-    return NULL;
-  }
-  if (!ASN1_STRING_copy(ret, str)) {
-    ASN1_STRING_free(ret);
-    return NULL;
-  }
-  return ret;
-}
-
-int ASN1_STRING_set(ASN1_STRING *str, const void *_data, ossl_ssize_t len_s) {
-  const char *data = reinterpret_cast<const char *>(_data);
-  size_t len;
-  if (len_s < 0) {
-    if (data == NULL) {
-      return 0;
-    }
-    len = strlen(data);
-  } else {
-    len = (size_t)len_s;
-  }
-
-  static_assert(ASN1_STRING_MAX < INT_MAX, "len will not overflow int");
-  if (len > ASN1_STRING_MAX) {
-    OPENSSL_PUT_ERROR(ASN1, ERR_R_OVERFLOW);
-    return 0;
-  }
-
-  if (str->length <= (int)len || str->data == NULL) {
-    unsigned char *c = str->data;
-    if (c == NULL) {
-      str->data = reinterpret_cast<uint8_t *>(OPENSSL_malloc(len + 1));
-    } else {
-      str->data = reinterpret_cast<uint8_t *>(OPENSSL_realloc(c, len + 1));
-    }
-
-    if (str->data == NULL) {
-      str->data = c;
-      return 0;
-    }
-  }
-  str->length = (int)len;
-  if (data != NULL) {
-    OPENSSL_memcpy(str->data, data, len);
-    // Historically, OpenSSL would NUL-terminate most (but not all)
-    // |ASN1_STRING|s, in case anyone accidentally passed |str->data| into a
-    // function expecting a C string. We retain this behavior for compatibility,
-    // but code must not rely on this. See CVE-2021-3712.
-    str->data[len] = '\0';
-  }
-  return 1;
-}
-
-void ASN1_STRING_set0(ASN1_STRING *str, void *data, int len) {
-  OPENSSL_free(str->data);
-  str->data = reinterpret_cast<uint8_t *>(data);
-  str->length = len;
-}
-
-ASN1_STRING *ASN1_STRING_new(void) {
-  return (ASN1_STRING_type_new(V_ASN1_OCTET_STRING));
-}
-
-ASN1_STRING *ASN1_STRING_type_new(int type) {
-  ASN1_STRING *ret;
-
-  ret = (ASN1_STRING *)OPENSSL_malloc(sizeof(ASN1_STRING));
-  if (ret == NULL) {
-    return NULL;
-  }
-  ret->length = 0;
-  ret->type = type;
-  ret->data = NULL;
-  ret->flags = 0;
-  return ret;
-}
-
-void ASN1_STRING_free(ASN1_STRING *str) {
-  if (str == NULL) {
-    return;
-  }
-  OPENSSL_free(str->data);
-  OPENSSL_free(str);
-}
-
-int ASN1_STRING_cmp(const ASN1_STRING *a, const ASN1_STRING *b) {
-  // Capture padding bits and implicit truncation in BIT STRINGs.
-  int a_length = a->length, b_length = b->length;
-  uint8_t a_padding = 0, b_padding = 0;
-  if (a->type == V_ASN1_BIT_STRING) {
-    a_length = asn1_bit_string_length(a, &a_padding);
-  }
-  if (b->type == V_ASN1_BIT_STRING) {
-    b_length = asn1_bit_string_length(b, &b_padding);
-  }
-
-  if (a_length < b_length) {
-    return -1;
-  }
-  if (a_length > b_length) {
-    return 1;
-  }
-  // In a BIT STRING, the number of bits is 8 * length - padding. Invert this
-  // comparison so we compare by lengths.
-  if (a_padding > b_padding) {
-    return -1;
-  }
-  if (a_padding < b_padding) {
-    return 1;
-  }
-
-  int ret = OPENSSL_memcmp(a->data, b->data, a_length);
-  if (ret != 0) {
-    return ret;
-  }
-
-  // Comparing the type first is more natural, but this matches OpenSSL.
-  if (a->type < b->type) {
-    return -1;
-  }
-  if (a->type > b->type) {
-    return 1;
-  }
-  return 0;
-}
-
-int ASN1_STRING_length(const ASN1_STRING *str) { return str->length; }
-
-int ASN1_STRING_type(const ASN1_STRING *str) { return str->type; }
-
-unsigned char *ASN1_STRING_data(ASN1_STRING *str) { return str->data; }
-
-const unsigned char *ASN1_STRING_get0_data(const ASN1_STRING *str) {
-  return str->data;
-}
diff --git a/src/crypto/asn1/asn1_par.cc b/src/crypto/asn1/asn1_par.cc
deleted file mode 100644
index 7767cca..0000000
--- a/src/crypto/asn1/asn1_par.cc
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
-//
-// 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
-//
-//     https://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 <openssl/asn1.h>
-
-
-const char *ASN1_tag2str(int tag) {
-  static const char *const tag2str[] = {
-      "EOC",
-      "BOOLEAN",
-      "INTEGER",
-      "BIT STRING",
-      "OCTET STRING",
-      "NULL",
-      "OBJECT",
-      "OBJECT DESCRIPTOR",
-      "EXTERNAL",
-      "REAL",
-      "ENUMERATED",
-      "<ASN1 11>",
-      "UTF8STRING",
-      "<ASN1 13>",
-      "<ASN1 14>",
-      "<ASN1 15>",
-      "SEQUENCE",
-      "SET",
-      "NUMERICSTRING",
-      "PRINTABLESTRING",
-      "T61STRING",
-      "VIDEOTEXSTRING",
-      "IA5STRING",
-      "UTCTIME",
-      "GENERALIZEDTIME",
-      "GRAPHICSTRING",
-      "VISIBLESTRING",
-      "GENERALSTRING",
-      "UNIVERSALSTRING",
-      "<ASN1 29>",
-      "BMPSTRING",
-  };
-
-  if ((tag == V_ASN1_NEG_INTEGER) || (tag == V_ASN1_NEG_ENUMERATED)) {
-    tag &= ~V_ASN1_NEG;
-  }
-
-  if (tag < 0 || tag > 30) {
-    return "(unknown)";
-  }
-  return tag2str[tag];
-}
diff --git a/src/crypto/asn1/asn1_test.cc b/src/crypto/asn1/asn1_test.cc
deleted file mode 100644
index 36ef5d6..0000000
--- a/src/crypto/asn1/asn1_test.cc
+++ /dev/null
@@ -1,3120 +0,0 @@
-// Copyright 2016 The BoringSSL Authors
-//
-// 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
-//
-//     https://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 <limits.h>
-#include <stdio.h>
-
-#include <map>
-#include <string>
-#include <string_view>
-#include <vector>
-
-#include <gtest/gtest.h>
-
-#include <openssl/asn1.h>
-#include <openssl/asn1t.h>
-#include <openssl/bio.h>
-#include <openssl/bytestring.h>
-#include <openssl/err.h>
-#include <openssl/mem.h>
-#include <openssl/obj.h>
-#include <openssl/pem.h>
-#include <openssl/posix_time.h>
-#include <openssl/span.h>
-#include <openssl/x509.h>
-
-#include "../test/test_util.h"
-#include "internal.h"
-
-#if defined(OPENSSL_THREADS)
-#include <thread>
-#endif
-
-
-// |obj| and |i2d_func| require different template parameters because C++ may
-// deduce, say, |ASN1_STRING*| via |obj| and |const ASN1_STRING*| via
-// |i2d_func|. Template argument deduction then fails. The language is not able
-// to resolve this by observing that |const ASN1_STRING*| works for both.
-template <typename T, typename U>
-void TestSerialize(T obj, int (*i2d_func)(U a, uint8_t **pp),
-                   bssl::Span<const uint8_t> expected) {
-  static_assert(std::is_convertible<T, U>::value,
-                "incompatible parameter to i2d_func");
-  // Test the allocating version first. It is easiest to debug.
-  uint8_t *ptr = nullptr;
-  int len = i2d_func(obj, &ptr);
-  ASSERT_GT(len, 0);
-  EXPECT_EQ(Bytes(expected), Bytes(ptr, len));
-  OPENSSL_free(ptr);
-
-  len = i2d_func(obj, nullptr);
-  ASSERT_GT(len, 0);
-  EXPECT_EQ(len, static_cast<int>(expected.size()));
-
-  std::vector<uint8_t> buf(len);
-  ptr = buf.data();
-  len = i2d_func(obj, &ptr);
-  ASSERT_EQ(len, static_cast<int>(expected.size()));
-  EXPECT_EQ(ptr, buf.data() + buf.size());
-  EXPECT_EQ(Bytes(expected), Bytes(buf));
-}
-
-// Historically, unknown universal tags were represented in |ASN1_TYPE| as
-// |ASN1_STRING|s with the type matching the tag number. This can collide with
-// |V_ASN_NEG|, which was one of the causes of CVE-2016-2108. We now represent
-// unsupported values with |V_ASN1_OTHER|, but retain the |V_ASN1_MAX_UNIVERSAL|
-// limit.
-TEST(ASN1Test, UnknownTags) {
-  // kTag258 is an ASN.1 structure with a universal tag with number 258.
-  static const uint8_t kTag258[] = {0x1f, 0x82, 0x02, 0x01, 0x00};
-  static_assert(
-      V_ASN1_NEG_INTEGER == 258,
-      "V_ASN1_NEG_INTEGER changed. Update kTag258 to collide with it.");
-  const uint8_t *p = kTag258;
-  bssl::UniquePtr<ASN1_TYPE> obj(d2i_ASN1_TYPE(NULL, &p, sizeof(kTag258)));
-  EXPECT_FALSE(obj) << "Parsed value with illegal tag" << obj->type;
-  ERR_clear_error();
-
-  // kTagOverflow is an ASN.1 structure with a universal tag with number 2^35-1,
-  // which will not fit in an int.
-  static const uint8_t kTagOverflow[] = {0x1f, 0xff, 0xff, 0xff,
-                                         0xff, 0x7f, 0x01, 0x00};
-  p = kTagOverflow;
-  obj.reset(d2i_ASN1_TYPE(NULL, &p, sizeof(kTagOverflow)));
-  EXPECT_FALSE(obj) << "Parsed value with tag overflow" << obj->type;
-  ERR_clear_error();
-
-  // kTag128 is an ASN.1 structure with a universal tag with number 128. It
-  // should be parsed as |V_ASN1_OTHER|.
-  static const uint8_t kTag128[] = {0x1f, 0x81, 0x00, 0x01, 0x00};
-  p = kTag128;
-  obj.reset(d2i_ASN1_TYPE(NULL, &p, sizeof(kTag128)));
-  ASSERT_TRUE(obj);
-  EXPECT_EQ(V_ASN1_OTHER, obj->type);
-  EXPECT_EQ(Bytes(kTag128), Bytes(obj->value.asn1_string->data,
-                                  obj->value.asn1_string->length));
-  TestSerialize(obj.get(), i2d_ASN1_TYPE, kTag128);
-
-  // If a tag is known, but has the wrong constructed bit, it should be
-  // rejected, not placed in |V_ASN1_OTHER|.
-  static const uint8_t kConstructedOctetString[] = {0x24, 0x00};
-  p = kConstructedOctetString;
-  obj.reset(d2i_ASN1_TYPE(nullptr, &p, sizeof(kConstructedOctetString)));
-  EXPECT_FALSE(obj);
-
-  static const uint8_t kPrimitiveSequence[] = {0x10, 0x00};
-  p = kPrimitiveSequence;
-  obj.reset(d2i_ASN1_TYPE(nullptr, &p, sizeof(kPrimitiveSequence)));
-  EXPECT_FALSE(obj);
-}
-
-static bssl::UniquePtr<BIGNUM> BIGNUMPow2(unsigned bit) {
-  bssl::UniquePtr<BIGNUM> bn(BN_new());
-  if (!bn ||  //
-      !BN_set_bit(bn.get(), bit)) {
-    return nullptr;
-  }
-  return bn;
-}
-
-TEST(ASN1Test, Integer) {
-  bssl::UniquePtr<BIGNUM> int64_min = BIGNUMPow2(63);
-  ASSERT_TRUE(int64_min);
-  BN_set_negative(int64_min.get(), 1);
-
-  bssl::UniquePtr<BIGNUM> int64_max = BIGNUMPow2(63);
-  ASSERT_TRUE(int64_max);
-  ASSERT_TRUE(BN_sub_word(int64_max.get(), 1));
-
-  bssl::UniquePtr<BIGNUM> int32_min = BIGNUMPow2(31);
-  ASSERT_TRUE(int32_min);
-  BN_set_negative(int32_min.get(), 1);
-
-  bssl::UniquePtr<BIGNUM> int32_max = BIGNUMPow2(31);
-  ASSERT_TRUE(int32_max);
-  ASSERT_TRUE(BN_sub_word(int32_max.get(), 1));
-
-  struct {
-    // der is the DER encoding of the INTEGER, including the tag and length.
-    std::vector<uint8_t> der;
-    // type and data are the corresponding fields of the |ASN1_STRING|
-    // representation.
-    int type;
-    std::vector<uint8_t> data;
-    // bn_asc is the |BIGNUM| representation, as parsed by the |BN_asc2bn|
-    // function.
-    const char *bn_asc;
-  } kTests[] = {
-      // -2^64 - 1
-      {{0x02, 0x09, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
-       V_ASN1_NEG_INTEGER,
-       {0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01},
-       "-0x10000000000000001"},
-      // -2^64
-      {{0x02, 0x09, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
-       V_ASN1_NEG_INTEGER,
-       {0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
-       "-0x10000000000000000"},
-      // -2^64 + 1
-      {{0x02, 0x09, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01},
-       V_ASN1_NEG_INTEGER,
-       {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
-       "-0xffffffffffffffff"},
-      // -2^63 - 1
-      {{0x02, 0x09, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
-       V_ASN1_NEG_INTEGER,
-       {0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01},
-       "-0x8000000000000001"},
-      // -2^63 (INT64_MIN)
-      {{0x02, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
-       V_ASN1_NEG_INTEGER,
-       {0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
-       "-0x8000000000000000"},
-      // -2^63 + 1
-      {{0x02, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01},
-       V_ASN1_NEG_INTEGER,
-       {0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
-       "-0x7fffffffffffffff"},
-      // -2^32 - 1
-      {{0x02, 0x05, 0xfe, 0xff, 0xff, 0xff, 0xff},
-       V_ASN1_NEG_INTEGER,
-       {0x01, 0x00, 0x00, 0x00, 0x01},
-       "-0x100000001"},
-      // -2^32
-      {{0x02, 0x05, 0xff, 0x00, 0x00, 0x00, 0x00},
-       V_ASN1_NEG_INTEGER,
-       {0x01, 0x00, 0x00, 0x00, 0x00},
-       "-0x100000000"},
-      // -2^32 + 1
-      {{0x02, 0x05, 0xff, 0x00, 0x00, 0x00, 0x01},
-       V_ASN1_NEG_INTEGER,
-       {0xff, 0xff, 0xff, 0xff},
-       "-0xffffffff"},
-      // -2^31 - 1
-      {{0x02, 0x05, 0xff, 0x7f, 0xff, 0xff, 0xff},
-       V_ASN1_NEG_INTEGER,
-       {0x80, 0x00, 0x00, 0x01},
-       "-0x80000001"},
-      // -2^31 (INT32_MIN)
-      {{0x02, 0x04, 0x80, 0x00, 0x00, 0x00},
-       V_ASN1_NEG_INTEGER,
-       {0x80, 0x00, 0x00, 0x00},
-       "-0x80000000"},
-      // -2^31 + 1
-      {{0x02, 0x04, 0x80, 0x00, 0x00, 0x01},
-       V_ASN1_NEG_INTEGER,
-       {0x7f, 0xff, 0xff, 0xff},
-       "-0x7fffffff"},
-      // -257
-      {{0x02, 0x02, 0xfe, 0xff}, V_ASN1_NEG_INTEGER, {0x01, 0x01}, "-257"},
-      // -256
-      {{0x02, 0x02, 0xff, 0x00}, V_ASN1_NEG_INTEGER, {0x01, 0x00}, "-256"},
-      // -255
-      {{0x02, 0x02, 0xff, 0x01}, V_ASN1_NEG_INTEGER, {0xff}, "-255"},
-      // -129
-      {{0x02, 0x02, 0xff, 0x7f}, V_ASN1_NEG_INTEGER, {0x81}, "-129"},
-      // -128
-      {{0x02, 0x01, 0x80}, V_ASN1_NEG_INTEGER, {0x80}, "-128"},
-      // -127
-      {{0x02, 0x01, 0x81}, V_ASN1_NEG_INTEGER, {0x7f}, "-127"},
-      // -1
-      {{0x02, 0x01, 0xff}, V_ASN1_NEG_INTEGER, {0x01}, "-1"},
-      // 0
-      {{0x02, 0x01, 0x00}, V_ASN1_INTEGER, {}, "0"},
-      // 1
-      {{0x02, 0x01, 0x01}, V_ASN1_INTEGER, {0x01}, "1"},
-      // 127
-      {{0x02, 0x01, 0x7f}, V_ASN1_INTEGER, {0x7f}, "127"},
-      // 128
-      {{0x02, 0x02, 0x00, 0x80}, V_ASN1_INTEGER, {0x80}, "128"},
-      // 129
-      {{0x02, 0x02, 0x00, 0x81}, V_ASN1_INTEGER, {0x81}, "129"},
-      // 255
-      {{0x02, 0x02, 0x00, 0xff}, V_ASN1_INTEGER, {0xff}, "255"},
-      // 256
-      {{0x02, 0x02, 0x01, 0x00}, V_ASN1_INTEGER, {0x01, 0x00}, "256"},
-      // 257
-      {{0x02, 0x02, 0x01, 0x01}, V_ASN1_INTEGER, {0x01, 0x01}, "257"},
-      // 2^31 - 2
-      {{0x02, 0x04, 0x7f, 0xff, 0xff, 0xfe},
-       V_ASN1_INTEGER,
-       {0x7f, 0xff, 0xff, 0xfe},
-       "0x7ffffffe"},
-      // 2^31 - 1 (INT32_MAX)
-      {{0x02, 0x04, 0x7f, 0xff, 0xff, 0xff},
-       V_ASN1_INTEGER,
-       {0x7f, 0xff, 0xff, 0xff},
-       "0x7fffffff"},
-      // 2^31
-      {{0x02, 0x05, 0x00, 0x80, 0x00, 0x00, 0x00},
-       V_ASN1_INTEGER,
-       {0x80, 0x00, 0x00, 0x00},
-       "0x80000000"},
-      // 2^32 - 2
-      {{0x02, 0x05, 0x00, 0xff, 0xff, 0xff, 0xfe},
-       V_ASN1_INTEGER,
-       {0xff, 0xff, 0xff, 0xfe},
-       "0xfffffffe"},
-      // 2^32 - 1 (UINT32_MAX)
-      {{0x02, 0x05, 0x00, 0xff, 0xff, 0xff, 0xff},
-       V_ASN1_INTEGER,
-       {0xff, 0xff, 0xff, 0xff},
-       "0xffffffff"},
-      // 2^32
-      {{0x02, 0x05, 0x01, 0x00, 0x00, 0x00, 0x00},
-       V_ASN1_INTEGER,
-       {0x01, 0x00, 0x00, 0x00, 0x00},
-       "0x100000000"},
-      // 2^63 - 2
-      {{0x02, 0x08, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe},
-       V_ASN1_INTEGER,
-       {0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe},
-       "0x7ffffffffffffffe"},
-      // 2^63 - 1 (INT64_MAX)
-      {{0x02, 0x08, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
-       V_ASN1_INTEGER,
-       {0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
-       "0x7fffffffffffffff"},
-      // 2^63
-      {{0x02, 0x09, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
-       V_ASN1_INTEGER,
-       {0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
-       "0x8000000000000000"},
-      // 2^64 - 2
-      {{0x02, 0x09, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe},
-       V_ASN1_INTEGER,
-       {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe},
-       "0xfffffffffffffffe"},
-      // 2^64 - 1 (UINT64_MAX)
-      {{0x02, 0x09, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
-       V_ASN1_INTEGER,
-       {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
-       "0xffffffffffffffff"},
-      // 2^64
-      {{0x02, 0x09, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
-       V_ASN1_INTEGER,
-       {0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
-       "0x10000000000000000"},
-      // 2^64 + 1
-      {{0x02, 0x09, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01},
-       V_ASN1_INTEGER,
-       {0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01},
-       "0x10000000000000001"},
-  };
-
-  for (const auto &t : kTests) {
-    SCOPED_TRACE(t.bn_asc);
-    // Collect a map of different ways to construct the integer. The key is the
-    // method used and is only retained to aid debugging.
-    std::map<std::string, bssl::UniquePtr<ASN1_INTEGER>> objs;
-
-    // Construct |ASN1_INTEGER| by setting the type and data manually.
-    bssl::UniquePtr<ASN1_INTEGER> by_data(ASN1_STRING_type_new(t.type));
-    ASSERT_TRUE(by_data);
-    ASSERT_TRUE(ASN1_STRING_set(by_data.get(), t.data.data(), t.data.size()));
-    objs["data"] = std::move(by_data);
-
-    // Construct |ASN1_INTEGER| from a |BIGNUM|.
-    BIGNUM *bn_raw = nullptr;
-    ASSERT_TRUE(BN_asc2bn(&bn_raw, t.bn_asc));
-    bssl::UniquePtr<BIGNUM> bn(bn_raw);
-    bssl::UniquePtr<ASN1_INTEGER> by_bn(BN_to_ASN1_INTEGER(bn.get(), nullptr));
-    ASSERT_TRUE(by_bn);
-    objs["bn"] = std::move(by_bn);
-
-    // Construct |ASN1_INTEGER| from decoding.
-    const uint8_t *ptr = t.der.data();
-    bssl::UniquePtr<ASN1_INTEGER> by_der(
-        d2i_ASN1_INTEGER(nullptr, &ptr, t.der.size()));
-    ASSERT_TRUE(by_der);
-    EXPECT_EQ(ptr, t.der.data() + t.der.size());
-    objs["der"] = std::move(by_der);
-
-    // Construct |ASN1_INTEGER| from various C types, if it fits.
-    bool fits_in_long = false, fits_in_i64 = false, fits_in_u64 = false;
-    uint64_t u64 = 0;
-    int64_t i64 = 0;
-    long l = 0;
-    uint64_t abs_u64;
-    if (BN_get_u64(bn.get(), &abs_u64)) {
-      fits_in_u64 = !BN_is_negative(bn.get());
-      if (fits_in_u64) {
-        u64 = abs_u64;
-        bssl::UniquePtr<ASN1_INTEGER> by_u64(ASN1_INTEGER_new());
-        ASSERT_TRUE(by_u64);
-        ASSERT_TRUE(ASN1_INTEGER_set_uint64(by_u64.get(), u64));
-        objs["u64"] = std::move(by_u64);
-      }
-
-      fits_in_i64 = BN_cmp(int64_min.get(), bn.get()) <= 0 &&
-                    BN_cmp(bn.get(), int64_max.get()) <= 0;
-      if (fits_in_i64) {
-        if (BN_is_negative(bn.get())) {
-          i64 = static_cast<int64_t>(0u - abs_u64);
-        } else {
-          i64 = static_cast<int64_t>(abs_u64);
-        }
-        bssl::UniquePtr<ASN1_INTEGER> by_i64(ASN1_INTEGER_new());
-        ASSERT_TRUE(by_i64);
-        ASSERT_TRUE(ASN1_INTEGER_set_int64(by_i64.get(), i64));
-        objs["i64"] = std::move(by_i64);
-      }
-
-      if (sizeof(long) == 8) {
-        fits_in_long = fits_in_i64;
-      } else {
-        ASSERT_EQ(4u, sizeof(long));
-        fits_in_long = BN_cmp(int32_min.get(), bn.get()) <= 0 &&
-                       BN_cmp(bn.get(), int32_max.get()) <= 0;
-      }
-      if (fits_in_long) {
-        l = static_cast<long>(i64);
-        bssl::UniquePtr<ASN1_INTEGER> by_long(ASN1_INTEGER_new());
-        ASSERT_TRUE(by_long);
-        ASSERT_TRUE(ASN1_INTEGER_set(by_long.get(), l));
-        objs["long"] = std::move(by_long);
-      }
-    }
-
-    // Default construction should return the zero |ASN1_INTEGER|.
-    if (BN_is_zero(bn.get())) {
-      bssl::UniquePtr<ASN1_INTEGER> by_default(ASN1_INTEGER_new());
-      ASSERT_TRUE(by_default);
-      objs["default"] = std::move(by_default);
-    }
-
-    // Test that every |ASN1_INTEGER| constructed behaves as expected.
-    for (const auto &pair : objs) {
-      // The fields should be as expected.
-      SCOPED_TRACE(pair.first);
-      const ASN1_INTEGER *obj = pair.second.get();
-      EXPECT_EQ(t.type, ASN1_STRING_type(obj));
-      EXPECT_EQ(Bytes(t.data),
-                Bytes(ASN1_STRING_get0_data(obj), ASN1_STRING_length(obj)));
-
-      // The object should encode correctly.
-      TestSerialize(obj, i2d_ASN1_INTEGER, t.der);
-
-      bssl::UniquePtr<BIGNUM> bn2(ASN1_INTEGER_to_BN(obj, nullptr));
-      ASSERT_TRUE(bn2);
-      EXPECT_EQ(0, BN_cmp(bn.get(), bn2.get()));
-
-      if (fits_in_u64) {
-        uint64_t v;
-        ASSERT_TRUE(ASN1_INTEGER_get_uint64(&v, obj));
-        EXPECT_EQ(v, u64);
-      } else {
-        uint64_t v;
-        EXPECT_FALSE(ASN1_INTEGER_get_uint64(&v, obj));
-      }
-
-      if (fits_in_i64) {
-        int64_t v;
-        ASSERT_TRUE(ASN1_INTEGER_get_int64(&v, obj));
-        EXPECT_EQ(v, i64);
-      } else {
-        int64_t v;
-        EXPECT_FALSE(ASN1_INTEGER_get_int64(&v, obj));
-      }
-
-      if (fits_in_long) {
-        EXPECT_EQ(l, ASN1_INTEGER_get(obj));
-      } else {
-        EXPECT_EQ(-1, ASN1_INTEGER_get(obj));
-      }
-
-      // All variations of integers should compare as equal to each other, as
-      // strings or integers. (Functions like |ASN1_TYPE_cmp| rely on
-      // string-based comparison.)
-      for (const auto &pair2 : objs) {
-        SCOPED_TRACE(pair2.first);
-        EXPECT_EQ(0, ASN1_INTEGER_cmp(obj, pair2.second.get()));
-        EXPECT_EQ(0, ASN1_STRING_cmp(obj, pair2.second.get()));
-      }
-    }
-
-    // Although our parsers will never output non-minimal |ASN1_INTEGER|s, it is
-    // possible to construct them manually. They should encode correctly.
-    std::vector<uint8_t> data = t.data;
-    const int kMaxExtraBytes = 5;
-    for (int i = 0; i < kMaxExtraBytes; i++) {
-      data.insert(data.begin(), 0x00);
-      SCOPED_TRACE(Bytes(data));
-
-      bssl::UniquePtr<ASN1_INTEGER> non_minimal(ASN1_STRING_type_new(t.type));
-      ASSERT_TRUE(non_minimal);
-      ASSERT_TRUE(ASN1_STRING_set(non_minimal.get(), data.data(), data.size()));
-
-      TestSerialize(non_minimal.get(), i2d_ASN1_INTEGER, t.der);
-    }
-  }
-
-  for (size_t i = 0; i < OPENSSL_ARRAY_SIZE(kTests); i++) {
-    SCOPED_TRACE(Bytes(kTests[i].der));
-    const uint8_t *ptr = kTests[i].der.data();
-    bssl::UniquePtr<ASN1_INTEGER> a(
-        d2i_ASN1_INTEGER(nullptr, &ptr, kTests[i].der.size()));
-    ASSERT_TRUE(a);
-    for (size_t j = 0; j < OPENSSL_ARRAY_SIZE(kTests); j++) {
-      SCOPED_TRACE(Bytes(kTests[j].der));
-      ptr = kTests[j].der.data();
-      bssl::UniquePtr<ASN1_INTEGER> b(
-          d2i_ASN1_INTEGER(nullptr, &ptr, kTests[j].der.size()));
-      ASSERT_TRUE(b);
-
-      // |ASN1_INTEGER_cmp| should compare numerically. |ASN1_STRING_cmp| does
-      // not but should preserve equality.
-      if (i < j) {
-        EXPECT_LT(ASN1_INTEGER_cmp(a.get(), b.get()), 0);
-        EXPECT_NE(ASN1_STRING_cmp(a.get(), b.get()), 0);
-      } else if (i > j) {
-        EXPECT_GT(ASN1_INTEGER_cmp(a.get(), b.get()), 0);
-        EXPECT_NE(ASN1_STRING_cmp(a.get(), b.get()), 0);
-      } else {
-        EXPECT_EQ(ASN1_INTEGER_cmp(a.get(), b.get()), 0);
-        EXPECT_EQ(ASN1_STRING_cmp(a.get(), b.get()), 0);
-      }
-    }
-  }
-
-  std::vector<uint8_t> kInvalidTests[] = {
-      // The empty string is not an integer.
-      {0x02, 0x00},
-      // Integers must be minimally-encoded.
-      {0x02, 0x02, 0x00, 0x00},
-      {0x02, 0x02, 0x00, 0x7f},
-      {0x02, 0x02, 0xff, 0xff},
-      {0x02, 0x02, 0xff, 0x80},
-  };
-  for (const auto &invalid : kInvalidTests) {
-    SCOPED_TRACE(Bytes(invalid));
-
-    const uint8_t *ptr = invalid.data();
-    bssl::UniquePtr<ASN1_INTEGER> integer(
-        d2i_ASN1_INTEGER(nullptr, &ptr, invalid.size()));
-    EXPECT_FALSE(integer);
-  }
-
-  // Callers expect |ASN1_INTEGER_get| and |ASN1_ENUMERATED_get| to return zero
-  // given NULL.
-  EXPECT_EQ(0, ASN1_INTEGER_get(nullptr));
-  EXPECT_EQ(0, ASN1_ENUMERATED_get(nullptr));
-}
-
-// Although invalid, a negative zero should encode correctly.
-TEST(ASN1Test, NegativeZero) {
-  bssl::UniquePtr<ASN1_INTEGER> neg_zero(
-      ASN1_STRING_type_new(V_ASN1_NEG_INTEGER));
-  ASSERT_TRUE(neg_zero);
-  EXPECT_EQ(0, ASN1_INTEGER_get(neg_zero.get()));
-
-  static const uint8_t kDER[] = {0x02, 0x01, 0x00};
-  TestSerialize(neg_zero.get(), i2d_ASN1_INTEGER, kDER);
-}
-
-TEST(ASN1Test, SerializeObject) {
-  static const uint8_t kDER[] = {0x06, 0x09, 0x2a, 0x86, 0x48, 0x86,
-                                 0xf7, 0x0d, 0x01, 0x01, 0x01};
-  const ASN1_OBJECT *obj = OBJ_nid2obj(NID_rsaEncryption);
-  TestSerialize(obj, i2d_ASN1_OBJECT, kDER);
-}
-
-TEST(ASN1Test, Boolean) {
-  static const uint8_t kTrue[] = {0x01, 0x01, 0xff};
-  TestSerialize(0xff, i2d_ASN1_BOOLEAN, kTrue);
-  // Other constants are also correctly encoded as TRUE.
-  TestSerialize(1, i2d_ASN1_BOOLEAN, kTrue);
-  TestSerialize(0x100, i2d_ASN1_BOOLEAN, kTrue);
-
-  const uint8_t *ptr = kTrue;
-  EXPECT_EQ(0xff, d2i_ASN1_BOOLEAN(nullptr, &ptr, sizeof(kTrue)));
-  EXPECT_EQ(ptr, kTrue + sizeof(kTrue));
-
-  static const uint8_t kFalse[] = {0x01, 0x01, 0x00};
-  TestSerialize(0x00, i2d_ASN1_BOOLEAN, kFalse);
-
-  ptr = kFalse;
-  EXPECT_EQ(0, d2i_ASN1_BOOLEAN(nullptr, &ptr, sizeof(kFalse)));
-  EXPECT_EQ(ptr, kFalse + sizeof(kFalse));
-
-  const std::vector<uint8_t> kInvalidBooleans[] = {
-      // No tag header.
-      {},
-      // No length.
-      {0x01},
-      // Truncated contents.
-      {0x01, 0x01},
-      // Contents too short or too long.
-      {0x01, 0x00},
-      {0x01, 0x02, 0x00, 0x00},
-      // Wrong tag number.
-      {0x02, 0x01, 0x00},
-      // Wrong tag class.
-      {0x81, 0x01, 0x00},
-      // Element is constructed.
-      {0x21, 0x01, 0x00},
-      // Not a DER encoding of TRUE.
-      {0x01, 0x01, 0x01},
-      // Non-minimal tag length.
-      {0x01, 0x81, 0x01, 0xff},
-  };
-  for (const auto &invalid : kInvalidBooleans) {
-    SCOPED_TRACE(Bytes(invalid));
-    ptr = invalid.data();
-    EXPECT_EQ(-1, d2i_ASN1_BOOLEAN(nullptr, &ptr, invalid.size()));
-    ERR_clear_error();
-  }
-}
-
-// The templates go through a different codepath, so test them separately.
-TEST(ASN1Test, SerializeEmbeddedBoolean) {
-  bssl::UniquePtr<BASIC_CONSTRAINTS> val(BASIC_CONSTRAINTS_new());
-  ASSERT_TRUE(val);
-
-  // BasicConstraints defaults to FALSE, so the encoding should be empty.
-  static const uint8_t kLeaf[] = {0x30, 0x00};
-  val->ca = 0;
-  TestSerialize(val.get(), i2d_BASIC_CONSTRAINTS, kLeaf);
-
-  // TRUE should always be encoded as 0xff, independent of what value the caller
-  // placed in the |ASN1_BOOLEAN|.
-  static const uint8_t kCA[] = {0x30, 0x03, 0x01, 0x01, 0xff};
-  val->ca = 0xff;
-  TestSerialize(val.get(), i2d_BASIC_CONSTRAINTS, kCA);
-  val->ca = 1;
-  TestSerialize(val.get(), i2d_BASIC_CONSTRAINTS, kCA);
-  val->ca = 0x100;
-  TestSerialize(val.get(), i2d_BASIC_CONSTRAINTS, kCA);
-}
-
-TEST(ASN1Test, ASN1Type) {
-  const struct {
-    int type;
-    std::vector<uint8_t> der;
-  } kTests[] = {
-      // BOOLEAN { TRUE }
-      {V_ASN1_BOOLEAN, {0x01, 0x01, 0xff}},
-      // BOOLEAN { FALSE }
-      {V_ASN1_BOOLEAN, {0x01, 0x01, 0x00}},
-      // OCTET_STRING { "a" }
-      {V_ASN1_OCTET_STRING, {0x04, 0x01, 0x61}},
-      // OCTET_STRING { }
-      {V_ASN1_OCTET_STRING, {0x04, 0x00}},
-      // BIT_STRING { `01` `00` }
-      {V_ASN1_BIT_STRING, {0x03, 0x02, 0x01, 0x00}},
-      // INTEGER { -1 }
-      {V_ASN1_INTEGER, {0x02, 0x01, 0xff}},
-      // OBJECT_IDENTIFIER { 1.2.840.113554.4.1.72585.2 }
-      {V_ASN1_OBJECT,
-       {0x06, 0x0c, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x12, 0x04, 0x01, 0x84, 0xb7,
-        0x09, 0x02}},
-      // NULL {}
-      {V_ASN1_NULL, {0x05, 0x00}},
-      // SEQUENCE {}
-      {V_ASN1_SEQUENCE, {0x30, 0x00}},
-      // SET {}
-      {V_ASN1_SET, {0x31, 0x00}},
-      // [0] { UTF8String { "a" } }
-      {V_ASN1_OTHER, {0xa0, 0x03, 0x0c, 0x01, 0x61}},
-  };
-  for (const auto &t : kTests) {
-    SCOPED_TRACE(Bytes(t.der));
-
-    // The input should successfully parse.
-    const uint8_t *ptr = t.der.data();
-    bssl::UniquePtr<ASN1_TYPE> val(d2i_ASN1_TYPE(nullptr, &ptr, t.der.size()));
-    ASSERT_TRUE(val);
-
-    EXPECT_EQ(ASN1_TYPE_get(val.get()), t.type);
-    EXPECT_EQ(val->type, t.type);
-    TestSerialize(val.get(), i2d_ASN1_TYPE, t.der);
-  }
-}
-
-// Test that reading |value.ptr| from a FALSE |ASN1_TYPE| behaves correctly. The
-// type historically supported this, so maintain the invariant in case external
-// code relies on it.
-TEST(ASN1Test, UnusedBooleanBits) {
-  // OCTET_STRING { "a" }
-  static const uint8_t kDER[] = {0x04, 0x01, 0x61};
-  const uint8_t *ptr = kDER;
-  bssl::UniquePtr<ASN1_TYPE> val(d2i_ASN1_TYPE(nullptr, &ptr, sizeof(kDER)));
-  ASSERT_TRUE(val);
-  EXPECT_EQ(V_ASN1_OCTET_STRING, val->type);
-  EXPECT_TRUE(val->value.ptr);
-
-  // Set |val| to a BOOLEAN containing FALSE.
-  ASN1_TYPE_set(val.get(), V_ASN1_BOOLEAN, NULL);
-  EXPECT_EQ(V_ASN1_BOOLEAN, val->type);
-  EXPECT_FALSE(val->value.ptr);
-}
-
-TEST(ASN1Test, ParseASN1Object) {
-  // 1.2.840.113554.4.1.72585.2, an arbitrary unknown OID.
-  static const uint8_t kOID[] = {0x2a, 0x86, 0x48, 0x86, 0xf7, 0x12,
-                                 0x04, 0x01, 0x84, 0xb7, 0x09, 0x02};
-  ASN1_OBJECT *obj = ASN1_OBJECT_create(NID_undef, kOID, sizeof(kOID),
-                                        "short name", "long name");
-  ASSERT_TRUE(obj);
-
-  // OBJECT_IDENTIFIER { 1.3.101.112 }
-  static const uint8_t kDER[] = {0x06, 0x03, 0x2b, 0x65, 0x70};
-  const uint8_t *ptr = kDER;
-  // Parse an |ASN1_OBJECT| with object reuse.
-  EXPECT_TRUE(d2i_ASN1_OBJECT(&obj, &ptr, sizeof(kDER)));
-  EXPECT_EQ(NID_ED25519, OBJ_obj2nid(obj));
-  ASN1_OBJECT_free(obj);
-
-  // Repeat the test, this time overriding a static |ASN1_OBJECT|. It should
-  // detect this and construct a new one.
-  obj = OBJ_nid2obj(NID_rsaEncryption);
-  ptr = kDER;
-  EXPECT_TRUE(d2i_ASN1_OBJECT(&obj, &ptr, sizeof(kDER)));
-  EXPECT_EQ(NID_ED25519, OBJ_obj2nid(obj));
-  ASN1_OBJECT_free(obj);
-
-  const std::vector<uint8_t> kInvalidObjects[] = {
-      // No tag header.
-      {},
-      // No length.
-      {0x06},
-      // Truncated contents.
-      {0x06, 0x01},
-      // An OID may not be empty.
-      {0x06, 0x00},
-      // The last byte may not be a continuation byte (high bit set).
-      {0x06, 0x03, 0x2b, 0x65, 0xf0},
-      // Each component must be minimally-encoded.
-      {0x06, 0x03, 0x2b, 0x65, 0x80, 0x70},
-      {0x06, 0x03, 0x80, 0x2b, 0x65, 0x70},
-      // Wrong tag number.
-      {0x01, 0x03, 0x2b, 0x65, 0x70},
-      // Wrong tag class.
-      {0x86, 0x03, 0x2b, 0x65, 0x70},
-      // Element is constructed.
-      {0x26, 0x03, 0x2b, 0x65, 0x70},
-      // Non-minimal tag length.
-      {0x06, 0x81, 0x03, 0x2b, 0x65, 0x70},
-  };
-  for (const auto &invalid : kInvalidObjects) {
-    SCOPED_TRACE(Bytes(invalid));
-    ptr = invalid.data();
-    obj = d2i_ASN1_OBJECT(nullptr, &ptr, invalid.size());
-    EXPECT_FALSE(obj);
-    ASN1_OBJECT_free(obj);
-    ERR_clear_error();
-  }
-}
-
-TEST(ASN1Test, BitString) {
-  const size_t kNotWholeBytes = static_cast<size_t>(-1);
-  const struct {
-    std::vector<uint8_t> in;
-    size_t num_bytes;
-  } kValidInputs[] = {
-      // Empty bit string
-      {{0x03, 0x01, 0x00}, 0},
-      // 0b1
-      {{0x03, 0x02, 0x07, 0x80}, kNotWholeBytes},
-      // 0b1010
-      {{0x03, 0x02, 0x04, 0xa0}, kNotWholeBytes},
-      // 0b1010101
-      {{0x03, 0x02, 0x01, 0xaa}, kNotWholeBytes},
-      // 0b10101010
-      {{0x03, 0x02, 0x00, 0xaa}, 1},
-      // Bits 0 and 63 are set
-      {{0x03, 0x09, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01}, 8},
-      // 64 zero bits
-      {{0x03, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 8},
-  };
-  for (const auto &test : kValidInputs) {
-    SCOPED_TRACE(Bytes(test.in));
-    // The input should parse and round-trip correctly.
-    const uint8_t *ptr = test.in.data();
-    bssl::UniquePtr<ASN1_BIT_STRING> val(
-        d2i_ASN1_BIT_STRING(nullptr, &ptr, test.in.size()));
-    ASSERT_TRUE(val);
-    TestSerialize(val.get(), i2d_ASN1_BIT_STRING, test.in);
-
-    // Check the byte count.
-    size_t num_bytes;
-    if (test.num_bytes == kNotWholeBytes) {
-      EXPECT_FALSE(ASN1_BIT_STRING_num_bytes(val.get(), &num_bytes));
-    } else {
-      ASSERT_TRUE(ASN1_BIT_STRING_num_bytes(val.get(), &num_bytes));
-      EXPECT_EQ(num_bytes, test.num_bytes);
-    }
-  }
-
-  const std::vector<uint8_t> kInvalidInputs[] = {
-      // Wrong tag
-      {0x04, 0x01, 0x00},
-      // Missing leading byte
-      {0x03, 0x00},
-      // Leading byte too high
-      {0x03, 0x02, 0x08, 0x00},
-      {0x03, 0x02, 0xff, 0x00},
-      // Empty bit strings must have a zero leading byte.
-      {0x03, 0x01, 0x01},
-      // Unused bits must all be zero.
-      {0x03, 0x02, 0x06, 0xc1 /* 0b11000001 */},
-  };
-  for (const auto &test : kInvalidInputs) {
-    SCOPED_TRACE(Bytes(test));
-    const uint8_t *ptr = test.data();
-    bssl::UniquePtr<ASN1_BIT_STRING> val(
-        d2i_ASN1_BIT_STRING(nullptr, &ptr, test.size()));
-    EXPECT_FALSE(val);
-  }
-}
-
-TEST(ASN1Test, SetBit) {
-  bssl::UniquePtr<ASN1_BIT_STRING> val(ASN1_BIT_STRING_new());
-  ASSERT_TRUE(val);
-  static const uint8_t kBitStringEmpty[] = {0x03, 0x01, 0x00};
-  TestSerialize(val.get(), i2d_ASN1_BIT_STRING, kBitStringEmpty);
-  EXPECT_EQ(0, ASN1_BIT_STRING_get_bit(val.get(), 0));
-  EXPECT_EQ(0, ASN1_BIT_STRING_get_bit(val.get(), 100));
-
-  // Set a few bits via |ASN1_BIT_STRING_set_bit|.
-  ASSERT_TRUE(ASN1_BIT_STRING_set_bit(val.get(), 0, 1));
-  ASSERT_TRUE(ASN1_BIT_STRING_set_bit(val.get(), 1, 1));
-  ASSERT_TRUE(ASN1_BIT_STRING_set_bit(val.get(), 2, 0));
-  ASSERT_TRUE(ASN1_BIT_STRING_set_bit(val.get(), 3, 1));
-  static const uint8_t kBitString1101[] = {0x03, 0x02, 0x04, 0xd0};
-  TestSerialize(val.get(), i2d_ASN1_BIT_STRING, kBitString1101);
-  EXPECT_EQ(1, ASN1_BIT_STRING_get_bit(val.get(), 0));
-  EXPECT_EQ(1, ASN1_BIT_STRING_get_bit(val.get(), 1));
-  EXPECT_EQ(0, ASN1_BIT_STRING_get_bit(val.get(), 2));
-  EXPECT_EQ(1, ASN1_BIT_STRING_get_bit(val.get(), 3));
-  EXPECT_EQ(0, ASN1_BIT_STRING_get_bit(val.get(), 4));
-
-  // Bits that were set may be cleared.
-  ASSERT_TRUE(ASN1_BIT_STRING_set_bit(val.get(), 1, 0));
-  static const uint8_t kBitString1001[] = {0x03, 0x02, 0x04, 0x90};
-  TestSerialize(val.get(), i2d_ASN1_BIT_STRING, kBitString1001);
-  EXPECT_EQ(1, ASN1_BIT_STRING_get_bit(val.get(), 0));
-  EXPECT_EQ(0, ASN1_BIT_STRING_get_bit(val.get(), 1));
-  EXPECT_EQ(0, ASN1_BIT_STRING_get_bit(val.get(), 2));
-  EXPECT_EQ(1, ASN1_BIT_STRING_get_bit(val.get(), 3));
-  EXPECT_EQ(0, ASN1_BIT_STRING_get_bit(val.get(), 4));
-
-  // Clearing trailing bits truncates the string.
-  ASSERT_TRUE(ASN1_BIT_STRING_set_bit(val.get(), 3, 0));
-  static const uint8_t kBitString1[] = {0x03, 0x02, 0x07, 0x80};
-  TestSerialize(val.get(), i2d_ASN1_BIT_STRING, kBitString1);
-  EXPECT_EQ(1, ASN1_BIT_STRING_get_bit(val.get(), 0));
-  EXPECT_EQ(0, ASN1_BIT_STRING_get_bit(val.get(), 1));
-  EXPECT_EQ(0, ASN1_BIT_STRING_get_bit(val.get(), 2));
-  EXPECT_EQ(0, ASN1_BIT_STRING_get_bit(val.get(), 3));
-  EXPECT_EQ(0, ASN1_BIT_STRING_get_bit(val.get(), 4));
-
-  // Bits may be set beyond the end of the string.
-  ASSERT_TRUE(ASN1_BIT_STRING_set_bit(val.get(), 63, 1));
-  static const uint8_t kBitStringLong[] = {0x03, 0x09, 0x00, 0x80, 0x00, 0x00,
-                                           0x00, 0x00, 0x00, 0x00, 0x01};
-  TestSerialize(val.get(), i2d_ASN1_BIT_STRING, kBitStringLong);
-  EXPECT_EQ(1, ASN1_BIT_STRING_get_bit(val.get(), 0));
-  EXPECT_EQ(0, ASN1_BIT_STRING_get_bit(val.get(), 62));
-  EXPECT_EQ(1, ASN1_BIT_STRING_get_bit(val.get(), 63));
-  EXPECT_EQ(0, ASN1_BIT_STRING_get_bit(val.get(), 64));
-
-  // The string can be truncated back down again.
-  ASSERT_TRUE(ASN1_BIT_STRING_set_bit(val.get(), 63, 0));
-  TestSerialize(val.get(), i2d_ASN1_BIT_STRING, kBitString1);
-  EXPECT_EQ(1, ASN1_BIT_STRING_get_bit(val.get(), 0));
-  EXPECT_EQ(0, ASN1_BIT_STRING_get_bit(val.get(), 62));
-  EXPECT_EQ(0, ASN1_BIT_STRING_get_bit(val.get(), 63));
-  EXPECT_EQ(0, ASN1_BIT_STRING_get_bit(val.get(), 64));
-
-  // |ASN1_BIT_STRING_set_bit| also truncates when starting from a parsed
-  // string.
-  const uint8_t *ptr = kBitStringLong;
-  val.reset(d2i_ASN1_BIT_STRING(nullptr, &ptr, sizeof(kBitStringLong)));
-  ASSERT_TRUE(val);
-  TestSerialize(val.get(), i2d_ASN1_BIT_STRING, kBitStringLong);
-  ASSERT_TRUE(ASN1_BIT_STRING_set_bit(val.get(), 63, 0));
-  TestSerialize(val.get(), i2d_ASN1_BIT_STRING, kBitString1);
-  EXPECT_EQ(1, ASN1_BIT_STRING_get_bit(val.get(), 0));
-  EXPECT_EQ(0, ASN1_BIT_STRING_get_bit(val.get(), 62));
-  EXPECT_EQ(0, ASN1_BIT_STRING_get_bit(val.get(), 63));
-  EXPECT_EQ(0, ASN1_BIT_STRING_get_bit(val.get(), 64));
-
-  // A parsed bit string preserves trailing zero bits.
-  static const uint8_t kBitString10010[] = {0x03, 0x02, 0x03, 0x90};
-  ptr = kBitString10010;
-  val.reset(d2i_ASN1_BIT_STRING(nullptr, &ptr, sizeof(kBitString10010)));
-  ASSERT_TRUE(val);
-  TestSerialize(val.get(), i2d_ASN1_BIT_STRING, kBitString10010);
-  // But |ASN1_BIT_STRING_set_bit| will truncate it even if otherwise a no-op.
-  ASSERT_TRUE(ASN1_BIT_STRING_set_bit(val.get(), 0, 1));
-  TestSerialize(val.get(), i2d_ASN1_BIT_STRING, kBitString1001);
-  EXPECT_EQ(1, ASN1_BIT_STRING_get_bit(val.get(), 0));
-  EXPECT_EQ(0, ASN1_BIT_STRING_get_bit(val.get(), 62));
-  EXPECT_EQ(0, ASN1_BIT_STRING_get_bit(val.get(), 63));
-  EXPECT_EQ(0, ASN1_BIT_STRING_get_bit(val.get(), 64));
-
-  // By default, a BIT STRING implicitly truncates trailing zeros.
-  val.reset(ASN1_BIT_STRING_new());
-  ASSERT_TRUE(val);
-  static const uint8_t kZeros[64] = {0};
-  ASSERT_TRUE(ASN1_STRING_set(val.get(), kZeros, sizeof(kZeros)));
-  TestSerialize(val.get(), i2d_ASN1_BIT_STRING, kBitStringEmpty);
-}
-
-TEST(ASN1Test, StringToUTF8) {
-  static const struct {
-    std::vector<uint8_t> in;
-    int type;
-    const char *expected;
-  } kTests[] = {
-      // Non-minimal, two-byte UTF-8.
-      {{0xc0, 0x81}, V_ASN1_UTF8STRING, nullptr},
-      // Non-minimal, three-byte UTF-8.
-      {{0xe0, 0x80, 0x81}, V_ASN1_UTF8STRING, nullptr},
-      // Non-minimal, four-byte UTF-8.
-      {{0xf0, 0x80, 0x80, 0x81}, V_ASN1_UTF8STRING, nullptr},
-      // Truncated, four-byte UTF-8.
-      {{0xf0, 0x80, 0x80}, V_ASN1_UTF8STRING, nullptr},
-      // Low-surrogate value.
-      {{0xed, 0xa0, 0x80}, V_ASN1_UTF8STRING, nullptr},
-      // High-surrogate value.
-      {{0xed, 0xb0, 0x81}, V_ASN1_UTF8STRING, nullptr},
-      // Initial BOMs should be rejected from UCS-2 and UCS-4.
-      {{0xfe, 0xff, 0, 88}, V_ASN1_BMPSTRING, nullptr},
-      {{0, 0, 0xfe, 0xff, 0, 0, 0, 88}, V_ASN1_UNIVERSALSTRING, nullptr},
-      // Otherwise, BOMs should pass through.
-      {{0, 88, 0xfe, 0xff}, V_ASN1_BMPSTRING, "X\xef\xbb\xbf"},
-      {{0, 0, 0, 88, 0, 0, 0xfe, 0xff},
-       V_ASN1_UNIVERSALSTRING,
-       "X\xef\xbb\xbf"},
-      // The maximum code-point should pass though.
-      {{0, 16, 0xff, 0xfd}, V_ASN1_UNIVERSALSTRING, "\xf4\x8f\xbf\xbd"},
-      // Values outside the Unicode space should not.
-      {{0, 17, 0, 0}, V_ASN1_UNIVERSALSTRING, nullptr},
-      // Non-characters should be rejected.
-      {{0, 1, 0xff, 0xff}, V_ASN1_UNIVERSALSTRING, nullptr},
-      {{0, 1, 0xff, 0xfe}, V_ASN1_UNIVERSALSTRING, nullptr},
-      {{0, 0, 0xfd, 0xd5}, V_ASN1_UNIVERSALSTRING, nullptr},
-      // BMPString is UCS-2, not UTF-16, so surrogate pairs are invalid.
-      {{0xd8, 0, 0xdc, 1}, V_ASN1_BMPSTRING, nullptr},
-      // INTEGERs are stored as strings, but cannot be converted to UTF-8.
-      {{0x01}, V_ASN1_INTEGER, nullptr},
-  };
-
-  for (const auto &test : kTests) {
-    SCOPED_TRACE(Bytes(test.in));
-    SCOPED_TRACE(test.type);
-    bssl::UniquePtr<ASN1_STRING> s(ASN1_STRING_type_new(test.type));
-    ASSERT_TRUE(s);
-    ASSERT_TRUE(ASN1_STRING_set(s.get(), test.in.data(), test.in.size()));
-
-    uint8_t *utf8;
-    const int utf8_len = ASN1_STRING_to_UTF8(&utf8, s.get());
-    EXPECT_EQ(utf8_len < 0, test.expected == nullptr);
-    if (utf8_len >= 0) {
-      if (test.expected != nullptr) {
-        EXPECT_EQ(Bytes(test.expected), Bytes(utf8, utf8_len));
-      }
-      OPENSSL_free(utf8);
-    } else {
-      ERR_clear_error();
-    }
-  }
-}
-
-static std::string_view ASN1StringToStringView(const ASN1_STRING *str) {
-  return std::string_view(
-      reinterpret_cast<const char *>(ASN1_STRING_get0_data(str)),
-      ASN1_STRING_length(str));
-}
-
-static bool ASN1Time_check_posix(const ASN1_TIME *s, int64_t t) {
-  struct tm stm, ttm;
-  int day, sec;
-
-  switch (ASN1_STRING_type(s)) {
-    case V_ASN1_GENERALIZEDTIME:
-      if (!asn1_generalizedtime_to_tm(&stm, s)) {
-        return false;
-      }
-      break;
-    case V_ASN1_UTCTIME:
-      if (!asn1_utctime_to_tm(&stm, s, /*allow_timezone_offset=*/1)) {
-        return false;
-      }
-      break;
-    default:
-      return false;
-  }
-  if (!OPENSSL_posix_to_tm(t, &ttm) ||
-      !OPENSSL_gmtime_diff(&day, &sec, &ttm, &stm)) {
-    return false;
-  }
-  return day == 0 && sec == 0;
-}
-
-static std::string PrintStringToBIO(const ASN1_STRING *str,
-                                    int (*print_func)(BIO *,
-                                                      const ASN1_STRING *)) {
-  const uint8_t *data;
-  size_t len;
-  bssl::UniquePtr<BIO> bio(BIO_new(BIO_s_mem()));
-  if (!bio ||  //
-      !print_func(bio.get(), str) ||
-      !BIO_mem_contents(bio.get(), &data, &len)) {
-    ADD_FAILURE() << "Could not print to BIO";
-    return "";
-  }
-  return std::string(data, data + len);
-}
-
-TEST(ASN1Test, SetTime) {
-  static const struct {
-    int64_t time;
-    const char *generalized;
-    const char *utc;
-    const char *printed;
-  } kTests[] = {
-      {-631152001, "19491231235959Z", nullptr, "Dec 31 23:59:59 1949 GMT"},
-      {-631152000, "19500101000000Z", "500101000000Z",
-       "Jan  1 00:00:00 1950 GMT"},
-      {0, "19700101000000Z", "700101000000Z", "Jan  1 00:00:00 1970 GMT"},
-      {981173106, "20010203040506Z", "010203040506Z",
-       "Feb  3 04:05:06 2001 GMT"},
-      {951804000, "20000229060000Z", "000229060000Z",
-       "Feb 29 06:00:00 2000 GMT"},
-      // NASA says this is the correct time for posterity.
-      {-16751025, "19690621025615Z", "690621025615Z",
-       "Jun 21 02:56:15 1969 GMT"},
-      // -1 is sometimes used as an error value. Ensure we correctly handle it.
-      {-1, "19691231235959Z", "691231235959Z", "Dec 31 23:59:59 1969 GMT"},
-      {2524607999, "20491231235959Z", "491231235959Z",
-       "Dec 31 23:59:59 2049 GMT"},
-      {2524608000, "20500101000000Z", nullptr, "Jan  1 00:00:00 2050 GMT"},
-      // Test boundary conditions.
-      {-62167219200, "00000101000000Z", nullptr, "Jan  1 00:00:00 0 GMT"},
-      {-62167219201, nullptr, nullptr, nullptr},
-      {253402300799, "99991231235959Z", nullptr, "Dec 31 23:59:59 9999 GMT"},
-      {253402300800, nullptr, nullptr, nullptr},
-  };
-  for (const auto &t : kTests) {
-    int64_t tt;
-    SCOPED_TRACE(t.time);
-
-    bssl::UniquePtr<ASN1_UTCTIME> utc(ASN1_UTCTIME_set(nullptr, t.time));
-    if (t.utc) {
-      ASSERT_TRUE(utc);
-      EXPECT_EQ(V_ASN1_UTCTIME, ASN1_STRING_type(utc.get()));
-      EXPECT_EQ(t.utc, ASN1StringToStringView(utc.get()));
-      EXPECT_TRUE(ASN1Time_check_posix(utc.get(), t.time));
-      EXPECT_EQ(ASN1_TIME_to_posix(utc.get(), &tt), 1);
-      EXPECT_EQ(tt, t.time);
-      EXPECT_EQ(PrintStringToBIO(utc.get(), &ASN1_UTCTIME_print), t.printed);
-      EXPECT_EQ(PrintStringToBIO(utc.get(), &ASN1_TIME_print), t.printed);
-    } else {
-      EXPECT_FALSE(utc);
-    }
-
-    bssl::UniquePtr<ASN1_GENERALIZEDTIME> generalized(
-        ASN1_GENERALIZEDTIME_set(nullptr, t.time));
-    if (t.generalized) {
-      ASSERT_TRUE(generalized);
-      EXPECT_EQ(V_ASN1_GENERALIZEDTIME, ASN1_STRING_type(generalized.get()));
-      EXPECT_EQ(t.generalized, ASN1StringToStringView(generalized.get()));
-      EXPECT_TRUE(ASN1Time_check_posix(generalized.get(), t.time));
-      EXPECT_EQ(ASN1_TIME_to_posix(generalized.get(), &tt), 1);
-      EXPECT_EQ(tt, t.time);
-      EXPECT_EQ(
-          PrintStringToBIO(generalized.get(), &ASN1_GENERALIZEDTIME_print),
-          t.printed);
-      EXPECT_EQ(PrintStringToBIO(generalized.get(), &ASN1_TIME_print),
-                t.printed);
-    } else {
-      EXPECT_FALSE(generalized);
-    }
-
-    bssl::UniquePtr<ASN1_TIME> choice(ASN1_TIME_set_posix(nullptr, t.time));
-    if (t.generalized) {
-      ASSERT_TRUE(choice);
-      if (t.utc) {
-        EXPECT_EQ(V_ASN1_UTCTIME, ASN1_STRING_type(choice.get()));
-        EXPECT_EQ(t.utc, ASN1StringToStringView(choice.get()));
-      } else {
-        EXPECT_EQ(V_ASN1_GENERALIZEDTIME, ASN1_STRING_type(choice.get()));
-        EXPECT_EQ(t.generalized, ASN1StringToStringView(choice.get()));
-      }
-      EXPECT_TRUE(ASN1Time_check_posix(choice.get(), t.time));
-      EXPECT_EQ(ASN1_TIME_to_posix(choice.get(), &tt), 1);
-      EXPECT_EQ(tt, t.time);
-    } else {
-      EXPECT_FALSE(choice);
-    }
-  }
-}
-
-TEST(ASN1Test, TimeSetString) {
-  bssl::UniquePtr<ASN1_STRING> s(ASN1_STRING_new());
-  ASSERT_TRUE(s);
-
-  ASSERT_TRUE(ASN1_UTCTIME_set_string(s.get(), "700101000000Z"));
-  EXPECT_EQ(V_ASN1_UTCTIME, ASN1_STRING_type(s.get()));
-  EXPECT_EQ("700101000000Z", ASN1StringToStringView(s.get()));
-
-  ASSERT_TRUE(ASN1_GENERALIZEDTIME_set_string(s.get(), "19700101000000Z"));
-  EXPECT_EQ(V_ASN1_GENERALIZEDTIME, ASN1_STRING_type(s.get()));
-  EXPECT_EQ("19700101000000Z", ASN1StringToStringView(s.get()));
-
-  // |ASN1_TIME_set_string| accepts either format. It relies on there being no
-  // overlap between the two.
-  ASSERT_TRUE(ASN1_TIME_set_string(s.get(), "700101000000Z"));
-  EXPECT_EQ(V_ASN1_UTCTIME, ASN1_STRING_type(s.get()));
-  EXPECT_EQ("700101000000Z", ASN1StringToStringView(s.get()));
-
-  ASSERT_TRUE(ASN1_TIME_set_string(s.get(), "19700101000000Z"));
-  EXPECT_EQ(V_ASN1_GENERALIZEDTIME, ASN1_STRING_type(s.get()));
-  EXPECT_EQ("19700101000000Z", ASN1StringToStringView(s.get()));
-
-  // |ASN1_TIME_set_string_X509| behaves similarly except it additionally
-  // converts GeneralizedTime to UTCTime if it fits.
-  ASSERT_TRUE(ASN1_TIME_set_string_X509(s.get(), "700101000000Z"));
-  EXPECT_EQ(V_ASN1_UTCTIME, ASN1_STRING_type(s.get()));
-  EXPECT_EQ("700101000000Z", ASN1StringToStringView(s.get()));
-
-  ASSERT_TRUE(ASN1_TIME_set_string_X509(s.get(), "19700101000000Z"));
-  EXPECT_EQ(V_ASN1_UTCTIME, ASN1_STRING_type(s.get()));
-  EXPECT_EQ("700101000000Z", ASN1StringToStringView(s.get()));
-
-  ASSERT_TRUE(ASN1_TIME_set_string_X509(s.get(), "19500101000000Z"));
-  EXPECT_EQ(V_ASN1_UTCTIME, ASN1_STRING_type(s.get()));
-  EXPECT_EQ("500101000000Z", ASN1StringToStringView(s.get()));
-
-  ASSERT_TRUE(ASN1_TIME_set_string_X509(s.get(), "19491231235959Z"));
-  EXPECT_EQ(V_ASN1_GENERALIZEDTIME, ASN1_STRING_type(s.get()));
-  EXPECT_EQ("19491231235959Z", ASN1StringToStringView(s.get()));
-
-  ASSERT_TRUE(ASN1_TIME_set_string_X509(s.get(), "20491231235959Z"));
-  EXPECT_EQ(V_ASN1_UTCTIME, ASN1_STRING_type(s.get()));
-  EXPECT_EQ("491231235959Z", ASN1StringToStringView(s.get()));
-
-  ASSERT_TRUE(ASN1_TIME_set_string_X509(s.get(), "20500101000000Z"));
-  EXPECT_EQ(V_ASN1_GENERALIZEDTIME, ASN1_STRING_type(s.get()));
-  EXPECT_EQ("20500101000000Z", ASN1StringToStringView(s.get()));
-
-  // Invalid inputs are rejected.
-  EXPECT_FALSE(ASN1_UTCTIME_set_string(s.get(), "nope"));
-  EXPECT_FALSE(ASN1_UTCTIME_set_string(s.get(), "19700101000000Z"));
-  EXPECT_FALSE(ASN1_GENERALIZEDTIME_set_string(s.get(), "nope"));
-  EXPECT_FALSE(ASN1_GENERALIZEDTIME_set_string(s.get(), "700101000000Z"));
-  EXPECT_FALSE(ASN1_TIME_set_string(s.get(), "nope"));
-
-  // If passed a null object, the functions validate the input without writing
-  // to anything.
-  EXPECT_TRUE(ASN1_UTCTIME_set_string(nullptr, "700101000000Z"));
-  EXPECT_TRUE(ASN1_TIME_set_string(nullptr, "700101000000Z"));
-  EXPECT_TRUE(ASN1_TIME_set_string_X509(nullptr, "700101000000Z"));
-  EXPECT_TRUE(ASN1_GENERALIZEDTIME_set_string(nullptr, "19700101000000Z"));
-  EXPECT_TRUE(ASN1_TIME_set_string(nullptr, "19700101000000Z"));
-  EXPECT_TRUE(ASN1_TIME_set_string_X509(nullptr, "19700101000000Z"));
-  // Test an input |ASN1_TIME_set_string_X509| won't convert to UTCTime.
-  EXPECT_TRUE(ASN1_GENERALIZEDTIME_set_string(nullptr, "20500101000000Z"));
-  EXPECT_TRUE(ASN1_TIME_set_string(nullptr, "20500101000000Z"));
-  EXPECT_TRUE(ASN1_TIME_set_string_X509(nullptr, "20500101000000Z"));
-  EXPECT_FALSE(ASN1_UTCTIME_set_string(nullptr, "nope"));
-  EXPECT_FALSE(ASN1_GENERALIZEDTIME_set_string(nullptr, "nope"));
-  EXPECT_FALSE(ASN1_TIME_set_string(nullptr, "nope"));
-  EXPECT_FALSE(ASN1_TIME_set_string_X509(nullptr, "nope"));
-
-  // Timezone offsets are not allowed by DER.
-  EXPECT_FALSE(ASN1_UTCTIME_set_string(nullptr, "700101000000-0400"));
-  EXPECT_FALSE(ASN1_TIME_set_string(nullptr, "700101000000-0400"));
-  EXPECT_FALSE(ASN1_TIME_set_string_X509(nullptr, "700101000000-0400"));
-  EXPECT_FALSE(ASN1_GENERALIZEDTIME_set_string(nullptr, "19700101000000-0400"));
-  EXPECT_FALSE(ASN1_TIME_set_string(nullptr, "19700101000000-0400"));
-  EXPECT_FALSE(ASN1_TIME_set_string_X509(nullptr, "19700101000000-0400"));
-}
-
-TEST(ASN1Test, UTCTimeZoneOffsets) {
-  bssl::UniquePtr<ASN1_STRING> s(ASN1_STRING_new());
-  ASSERT_TRUE(s);
-
-  ASSERT_TRUE(ASN1_UTCTIME_set_string(s.get(), "700101000000Z"));
-  EXPECT_EQ(V_ASN1_UTCTIME, ASN1_STRING_type(s.get()));
-  EXPECT_EQ("700101000000Z", ASN1StringToStringView(s.get()));
-
-  // UTCTIME_set_string should not allow a timezone offset
-  EXPECT_FALSE(ASN1_UTCTIME_set_string(s.get(), "700101000000-0400"));
-
-  // Forcibly construct a utc time with a timezone offset.
-  ASSERT_TRUE(ASN1_STRING_set(s.get(), "700101000000-0400",
-                              strlen("700101000000-0400")));
-  EXPECT_EQ(V_ASN1_UTCTIME, ASN1_STRING_type(s.get()));
-  EXPECT_EQ("700101000000-0400", ASN1StringToStringView(s.get()));
-
-  // check is expected to be valid with timezone offsets
-  ASSERT_TRUE(ASN1_UTCTIME_check(s.get()));
-
-  int64_t posix_time;
-  EXPECT_FALSE(ASN1_TIME_to_posix(s.get(), &posix_time));
-  ASSERT_TRUE(ASN1_TIME_to_posix_nonstandard(s.get(), &posix_time));
-  EXPECT_EQ(posix_time, (4 * 60 * 60 * -1));
-
-  // Conscrypt expects a utc time with an arbitrary offset to be
-  // accepted by ASN1_TIME_to_generalizedtime.
-  bssl::UniquePtr<ASN1_STRING> g(
-      ASN1_TIME_to_generalizedtime(s.get(), nullptr));
-  ASSERT_TRUE(g);
-  EXPECT_EQ(V_ASN1_GENERALIZEDTIME, ASN1_STRING_type(g.get()));
-  // crbug.com/389147378
-  // This should be the correct value
-  // EXPECT_EQ("19691231200000Z", ASN1StringToStringView(g.get()));
-  // But this function currently generates invalid times.
-  EXPECT_EQ("19700101000000-0400", ASN1StringToStringView(g.get()));
-  // Force this to be a generalized time the same as our utc time
-  EXPECT_TRUE(ASN1_GENERALIZEDTIME_set_string(g.get(), "19691231200000Z"));
-
-  // ASN1_TIME_diff is expected to accept timezone offsets
-  int days, secs;
-  EXPECT_TRUE(ASN1_TIME_diff(&days, &secs, s.get(), g.get()));
-  EXPECT_EQ(days, 0);
-  EXPECT_EQ(secs, 0);
-}
-
-TEST(ASN1Test, AdjTime) {
-  struct tm tm1, tm2;
-  int days, secs;
-
-  EXPECT_TRUE(OPENSSL_posix_to_tm(0, &tm1));
-  EXPECT_TRUE(OPENSSL_posix_to_tm(0, &tm2));
-  // Test values that are too large and should be rejected.
-  EXPECT_FALSE(OPENSSL_gmtime_adj(&tm1, INT_MIN, INT_MIN));
-  EXPECT_FALSE(OPENSSL_gmtime_adj(&tm1, INT_MAX, INT_MAX));
-  // Basic functionality.
-  EXPECT_TRUE(OPENSSL_gmtime_adj(&tm2, 1, 1));
-  EXPECT_TRUE(OPENSSL_gmtime_diff(&days, &secs, &tm1, &tm2));
-  EXPECT_EQ(days, 1);
-  EXPECT_EQ(secs, 1);
-  EXPECT_TRUE(OPENSSL_gmtime_diff(&days, &secs, &tm2, &tm1));
-  EXPECT_EQ(days, -1);
-  EXPECT_EQ(secs, -1);
-  // Test a value of days that is very large, but valid.
-  EXPECT_TRUE(OPENSSL_gmtime_adj(&tm2, 2932800, 0));
-  EXPECT_TRUE(OPENSSL_gmtime_diff(&days, &secs, &tm1, &tm2));
-  EXPECT_EQ(days, 2932801);
-  EXPECT_EQ(secs, 1);
-  EXPECT_TRUE(OPENSSL_gmtime_diff(&days, &secs, &tm2, &tm1));
-  EXPECT_EQ(days, -2932801);
-  EXPECT_EQ(secs, -1);
-}
-static std::vector<uint8_t> StringToVector(const std::string &str) {
-  return std::vector<uint8_t>(str.begin(), str.end());
-}
-
-TEST(ASN1Test, StringPrintEx) {
-  const struct {
-    int type;
-    std::vector<uint8_t> data;
-    int str_flags;
-    unsigned long flags;
-    std::string expected;
-  } kTests[] = {
-      // A string like "hello" is never escaped or quoted.
-      // |ASN1_STRFLGS_ESC_QUOTE| only introduces quotes when needed. Note
-      // OpenSSL interprets T61String as Latin-1.
-      {V_ASN1_T61STRING, StringToVector("hello"), 0, 0, "hello"},
-      {V_ASN1_T61STRING, StringToVector("hello"), 0,
-       ASN1_STRFLGS_ESC_2253 | ASN1_STRFLGS_ESC_CTRL | ASN1_STRFLGS_ESC_MSB,
-       "hello"},
-      {V_ASN1_T61STRING, StringToVector("hello"), 0,
-       ASN1_STRFLGS_ESC_2253 | ASN1_STRFLGS_ESC_CTRL | ASN1_STRFLGS_ESC_MSB |
-           ASN1_STRFLGS_ESC_QUOTE,
-       "hello"},
-
-      // By default, 8-bit characters are printed without escaping.
-      {V_ASN1_T61STRING,
-       {0, '\n', 0x80, 0xff, ',', '+', '"', '\\', '<', '>', ';'},
-       0,
-       0,
-       std::string(1, '\0') + "\n\x80\xff,+\"\\<>;"},
-
-      // Flags control different escapes. Note that any escape flag will cause
-      // blackslashes to be escaped.
-      {V_ASN1_T61STRING,
-       {0, '\n', 0x80, 0xff, ',', '+', '"', '\\', '<', '>', ';'},
-       0,
-       ASN1_STRFLGS_ESC_2253,
-       std::string(1, '\0') + "\n\x80\xff\\,\\+\\\"\\\\\\<\\>\\;"},
-      {V_ASN1_T61STRING,
-       {0, '\n', 0x80, 0xff, ',', '+', '"', '\\', '<', '>', ';'},
-       0,
-       ASN1_STRFLGS_ESC_CTRL,
-       "\\00\\0A\x80\xff,+\"\\\\<>;"},
-      {V_ASN1_T61STRING,
-       {0, '\n', 0x80, 0xff, ',', '+', '"', '\\', '<', '>', ';'},
-       0,
-       ASN1_STRFLGS_ESC_MSB,
-       std::string(1, '\0') + "\n\\80\\FF,+\"\\\\<>;"},
-      {V_ASN1_T61STRING,
-       {0, '\n', 0x80, 0xff, ',', '+', '"', '\\', '<', '>', ';'},
-       0,
-       ASN1_STRFLGS_ESC_2253 | ASN1_STRFLGS_ESC_CTRL | ASN1_STRFLGS_ESC_MSB,
-       "\\00\\0A\\80\\FF\\,\\+\\\"\\\\\\<\\>\\;"},
-
-      // When quoted, fewer characters need to be escaped in RFC 2253.
-      {V_ASN1_T61STRING,
-       {0, '\n', 0x80, 0xff, ',', '+', '"', '\\', '<', '>', ';'},
-       0,
-       ASN1_STRFLGS_ESC_2253 | ASN1_STRFLGS_ESC_CTRL | ASN1_STRFLGS_ESC_MSB |
-           ASN1_STRFLGS_ESC_QUOTE,
-       "\"\\00\\0A\\80\\FF,+\\\"\\\\<>;\""},
-
-      // If no characters benefit from quotes, no quotes are added.
-      {V_ASN1_T61STRING,
-       {0, '\n', 0x80, 0xff, '"', '\\'},
-       0,
-       ASN1_STRFLGS_ESC_2253 | ASN1_STRFLGS_ESC_CTRL | ASN1_STRFLGS_ESC_MSB |
-           ASN1_STRFLGS_ESC_QUOTE,
-       "\\00\\0A\\80\\FF\\\"\\\\"},
-
-      // RFC 2253 only escapes spaces at the start and end of a string.
-      {V_ASN1_T61STRING, StringToVector("   "), 0, ASN1_STRFLGS_ESC_2253,
-       "\\  \\ "},
-      {V_ASN1_T61STRING, StringToVector("   "), 0,
-       ASN1_STRFLGS_ESC_2253 | ASN1_STRFLGS_UTF8_CONVERT, "\\  \\ "},
-      {V_ASN1_T61STRING, StringToVector("   "), 0,
-       ASN1_STRFLGS_ESC_2253 | ASN1_STRFLGS_ESC_QUOTE, "\"   \""},
-
-      // RFC 2253 only escapes # at the start of a string.
-      {V_ASN1_T61STRING, StringToVector("###"), 0, ASN1_STRFLGS_ESC_2253,
-       "\\###"},
-      {V_ASN1_T61STRING, StringToVector("###"), 0,
-       ASN1_STRFLGS_ESC_2253 | ASN1_STRFLGS_ESC_QUOTE, "\"###\""},
-
-      // By default, strings are decoded and Unicode code points are
-      // individually escaped.
-      {V_ASN1_UTF8STRING, StringToVector("a\xc2\x80\xc4\x80\xf0\x90\x80\x80"),
-       0, ASN1_STRFLGS_ESC_MSB, "a\\80\\U0100\\W00010000"},
-      {V_ASN1_BMPSTRING,
-       {0x00, 'a', 0x00, 0x80, 0x01, 0x00},
-       0,
-       ASN1_STRFLGS_ESC_MSB,
-       "a\\80\\U0100"},
-      {V_ASN1_UNIVERSALSTRING,
-       {0x00, 0x00, 0x00, 'a',   //
-        0x00, 0x00, 0x00, 0x80,  //
-        0x00, 0x00, 0x01, 0x00,  //
-        0x00, 0x01, 0x00, 0x00},
-       0,
-       ASN1_STRFLGS_ESC_MSB,
-       "a\\80\\U0100\\W00010000"},
-
-      // |ASN1_STRFLGS_UTF8_CONVERT| normalizes everything to UTF-8 and then
-      // escapes individual bytes.
-      {V_ASN1_IA5STRING, StringToVector("a\x80"), 0,
-       ASN1_STRFLGS_ESC_MSB | ASN1_STRFLGS_UTF8_CONVERT, "a\\C2\\80"},
-      {V_ASN1_T61STRING, StringToVector("a\x80"), 0,
-       ASN1_STRFLGS_ESC_MSB | ASN1_STRFLGS_UTF8_CONVERT, "a\\C2\\80"},
-      {V_ASN1_UTF8STRING, StringToVector("a\xc2\x80\xc4\x80\xf0\x90\x80\x80"),
-       0, ASN1_STRFLGS_ESC_MSB | ASN1_STRFLGS_UTF8_CONVERT,
-       "a\\C2\\80\\C4\\80\\F0\\90\\80\\80"},
-      {V_ASN1_BMPSTRING,
-       {0x00, 'a', 0x00, 0x80, 0x01, 0x00},
-       0,
-       ASN1_STRFLGS_ESC_MSB | ASN1_STRFLGS_UTF8_CONVERT,
-       "a\\C2\\80\\C4\\80"},
-      {V_ASN1_UNIVERSALSTRING,
-       {0x00, 0x00, 0x00, 'a',   //
-        0x00, 0x00, 0x00, 0x80,  //
-        0x00, 0x00, 0x01, 0x00,  //
-        0x00, 0x01, 0x00, 0x00},
-       0,
-       ASN1_STRFLGS_ESC_MSB | ASN1_STRFLGS_UTF8_CONVERT,
-       "a\\C2\\80\\C4\\80\\F0\\90\\80\\80"},
-
-      // The same as above, but without escaping the UTF-8 encoding.
-      {V_ASN1_IA5STRING, StringToVector("a\x80"), 0, ASN1_STRFLGS_UTF8_CONVERT,
-       "a\xc2\x80"},
-      {V_ASN1_T61STRING, StringToVector("a\x80"), 0, ASN1_STRFLGS_UTF8_CONVERT,
-       "a\xc2\x80"},
-      {V_ASN1_UTF8STRING, StringToVector("a\xc2\x80\xc4\x80\xf0\x90\x80\x80"),
-       0, ASN1_STRFLGS_UTF8_CONVERT, "a\xc2\x80\xc4\x80\xf0\x90\x80\x80"},
-      {V_ASN1_BMPSTRING,
-       {0x00, 'a', 0x00, 0x80, 0x01, 0x00},
-       0,
-       ASN1_STRFLGS_UTF8_CONVERT,
-       "a\xc2\x80\xc4\x80"},
-      {V_ASN1_UNIVERSALSTRING,
-       {0x00, 0x00, 0x00, 'a',   //
-        0x00, 0x00, 0x00, 0x80,  //
-        0x00, 0x00, 0x01, 0x00,  //
-        0x00, 0x01, 0x00, 0x00},
-       0,
-       ASN1_STRFLGS_UTF8_CONVERT,
-       "a\xc2\x80\xc4\x80\xf0\x90\x80\x80"},
-
-      // Types that cannot be decoded are, by default, treated as a byte string.
-      {V_ASN1_OCTET_STRING, {0xff}, 0, 0, "\xff"},
-      {-1, {0xff}, 0, 0, "\xff"},
-      {100, {0xff}, 0, 0, "\xff"},
-
-      // |ASN1_STRFLGS_UTF8_CONVERT| still converts these bytes to UTF-8.
-      //
-      // TODO(davidben): This seems like a bug. Although it's unclear because
-      // the non-RFC-2253 options aren't especially sound. Can we just remove
-      // them?
-      {V_ASN1_OCTET_STRING, {0xff}, 0, ASN1_STRFLGS_UTF8_CONVERT, "\xc3\xbf"},
-      {-1, {0xff}, 0, ASN1_STRFLGS_UTF8_CONVERT, "\xc3\xbf"},
-      {100, {0xff}, 0, ASN1_STRFLGS_UTF8_CONVERT, "\xc3\xbf"},
-
-      // |ASN1_STRFLGS_IGNORE_TYPE| causes the string type to be ignored, so it
-      // is always treated as a byte string, even if it is not a valid encoding.
-      {V_ASN1_UTF8STRING, {0xff}, 0, ASN1_STRFLGS_IGNORE_TYPE, "\xff"},
-      {V_ASN1_BMPSTRING, {0xff}, 0, ASN1_STRFLGS_IGNORE_TYPE, "\xff"},
-      {V_ASN1_UNIVERSALSTRING, {0xff}, 0, ASN1_STRFLGS_IGNORE_TYPE, "\xff"},
-
-      // |ASN1_STRFLGS_SHOW_TYPE| prepends the type name.
-      {V_ASN1_UTF8STRING, {'a'}, 0, ASN1_STRFLGS_SHOW_TYPE, "UTF8STRING:a"},
-      {-1, {'a'}, 0, ASN1_STRFLGS_SHOW_TYPE, "(unknown):a"},
-      {100, {'a'}, 0, ASN1_STRFLGS_SHOW_TYPE, "(unknown):a"},
-
-      // |ASN1_STRFLGS_DUMP_ALL| and |ASN1_STRFLGS_DUMP_UNKNOWN| cause
-      // non-string types to be printed in hex, though without the DER wrapper
-      // by default.
-      {V_ASN1_UTF8STRING, StringToVector("\xe2\x98\x83"), 0,
-       ASN1_STRFLGS_DUMP_UNKNOWN, "\\U2603"},
-      {V_ASN1_UTF8STRING, StringToVector("\xe2\x98\x83"), 0,
-       ASN1_STRFLGS_DUMP_ALL, "#E29883"},
-      {V_ASN1_OCTET_STRING, StringToVector("\xe2\x98\x83"), 0,
-       ASN1_STRFLGS_DUMP_UNKNOWN, "#E29883"},
-      {V_ASN1_OCTET_STRING, StringToVector("\xe2\x98\x83"), 0,
-       ASN1_STRFLGS_DUMP_ALL, "#E29883"},
-
-      // |ASN1_STRFLGS_DUMP_DER| includes the entire element.
-      {V_ASN1_UTF8STRING, StringToVector("\xe2\x98\x83"), 0,
-       ASN1_STRFLGS_DUMP_ALL | ASN1_STRFLGS_DUMP_DER, "#0C03E29883"},
-      {V_ASN1_OCTET_STRING, StringToVector("\xe2\x98\x83"), 0,
-       ASN1_STRFLGS_DUMP_ALL | ASN1_STRFLGS_DUMP_DER, "#0403E29883"},
-      {V_ASN1_BIT_STRING,
-       {0x80},
-       ASN1_STRING_FLAG_BITS_LEFT | 4,
-       ASN1_STRFLGS_DUMP_ALL | ASN1_STRFLGS_DUMP_DER,
-       "#03020480"},
-      // INTEGER { 1 }
-      {V_ASN1_INTEGER,
-       {0x01},
-       0,
-       ASN1_STRFLGS_DUMP_ALL | ASN1_STRFLGS_DUMP_DER,
-       "#020101"},
-      // INTEGER { -1 }
-      {V_ASN1_NEG_INTEGER,
-       {0x01},
-       0,
-       ASN1_STRFLGS_DUMP_ALL | ASN1_STRFLGS_DUMP_DER,
-       "#0201FF"},
-      // ENUMERATED { 1 }
-      {V_ASN1_ENUMERATED,
-       {0x01},
-       0,
-       ASN1_STRFLGS_DUMP_ALL | ASN1_STRFLGS_DUMP_DER,
-       "#0A0101"},
-      // ENUMERATED { -1 }
-      {V_ASN1_NEG_ENUMERATED,
-       {0x01},
-       0,
-       ASN1_STRFLGS_DUMP_ALL | ASN1_STRFLGS_DUMP_DER,
-       "#0A01FF"},
-  };
-  for (const auto &t : kTests) {
-    SCOPED_TRACE(t.type);
-    SCOPED_TRACE(Bytes(t.data));
-    SCOPED_TRACE(t.str_flags);
-    SCOPED_TRACE(t.flags);
-
-    bssl::UniquePtr<ASN1_STRING> str(ASN1_STRING_type_new(t.type));
-    ASSERT_TRUE(str);
-    ASSERT_TRUE(ASN1_STRING_set(str.get(), t.data.data(), t.data.size()));
-    str->flags = t.str_flags;
-
-    // If the |BIO| is null, it should measure the size.
-    int len = ASN1_STRING_print_ex(nullptr, str.get(), t.flags);
-    EXPECT_EQ(len, static_cast<int>(t.expected.size()));
-
-    // Measuring the size should also work for the |FILE| version
-    len = ASN1_STRING_print_ex_fp(nullptr, str.get(), t.flags);
-    EXPECT_EQ(len, static_cast<int>(t.expected.size()));
-
-    // Actually print the string.
-    bssl::UniquePtr<BIO> bio(BIO_new(BIO_s_mem()));
-    ASSERT_TRUE(bio);
-    len = ASN1_STRING_print_ex(bio.get(), str.get(), t.flags);
-    EXPECT_EQ(len, static_cast<int>(t.expected.size()));
-
-    const uint8_t *bio_contents;
-    size_t bio_len;
-    ASSERT_TRUE(BIO_mem_contents(bio.get(), &bio_contents, &bio_len));
-    EXPECT_EQ(t.expected, std::string(bio_contents, bio_contents + bio_len));
-  }
-
-  const struct {
-    int type;
-    std::vector<uint8_t> data;
-    int str_flags;
-    unsigned long flags;
-  } kUnprintableTests[] = {
-      // It is an error if the string cannot be decoded.
-      {V_ASN1_UTF8STRING, {0xff}, 0, ASN1_STRFLGS_ESC_MSB},
-      {V_ASN1_BMPSTRING, {0xff}, 0, ASN1_STRFLGS_ESC_MSB},
-      {V_ASN1_BMPSTRING, {0xff}, 0, ASN1_STRFLGS_ESC_MSB},
-      {V_ASN1_UNIVERSALSTRING, {0xff}, 0, ASN1_STRFLGS_ESC_MSB},
-      // Invalid codepoints are errors.
-      {V_ASN1_UTF8STRING, {0xed, 0xa0, 0x80}, 0, ASN1_STRFLGS_ESC_MSB},
-      {V_ASN1_BMPSTRING, {0xd8, 0x00}, 0, ASN1_STRFLGS_ESC_MSB},
-      {V_ASN1_UNIVERSALSTRING,
-       {0x00, 0x00, 0xd8, 0x00},
-       0,
-       ASN1_STRFLGS_ESC_MSB},
-      // Even when re-encoding UTF-8 back into UTF-8, we should check validity.
-      {V_ASN1_UTF8STRING,
-       {0xff},
-       0,
-       ASN1_STRFLGS_ESC_MSB | ASN1_STRFLGS_UTF8_CONVERT},
-  };
-  for (const auto &t : kUnprintableTests) {
-    SCOPED_TRACE(t.type);
-    SCOPED_TRACE(Bytes(t.data));
-    SCOPED_TRACE(t.str_flags);
-    SCOPED_TRACE(t.flags);
-
-    bssl::UniquePtr<ASN1_STRING> str(ASN1_STRING_type_new(t.type));
-    ASSERT_TRUE(str);
-    ASSERT_TRUE(ASN1_STRING_set(str.get(), t.data.data(), t.data.size()));
-    str->flags = t.str_flags;
-
-    // If the |BIO| is null, it should measure the size.
-    int len = ASN1_STRING_print_ex(nullptr, str.get(), t.flags);
-    EXPECT_EQ(len, -1);
-    ERR_clear_error();
-
-    // Measuring the size should also work for the |FILE| version
-    len = ASN1_STRING_print_ex_fp(nullptr, str.get(), t.flags);
-    EXPECT_EQ(len, -1);
-    ERR_clear_error();
-
-    // Actually print the string.
-    bssl::UniquePtr<BIO> bio(BIO_new(BIO_s_mem()));
-    ASSERT_TRUE(bio);
-    len = ASN1_STRING_print_ex(bio.get(), str.get(), t.flags);
-    EXPECT_EQ(len, -1);
-    ERR_clear_error();
-  }
-}
-
-TEST(ASN1Test, MBString) {
-  const unsigned long kAll = B_ASN1_PRINTABLESTRING | B_ASN1_IA5STRING |
-                             B_ASN1_T61STRING | B_ASN1_BMPSTRING |
-                             B_ASN1_UNIVERSALSTRING | B_ASN1_UTF8STRING;
-
-  const struct {
-    int format;
-    std::vector<uint8_t> in;
-    unsigned long mask;
-    int expected_type;
-    std::vector<uint8_t> expected_data;
-    int num_codepoints;
-  } kTests[] = {
-      // Given a choice of formats, we pick the smallest that fits.
-      {MBSTRING_UTF8, {}, kAll, V_ASN1_PRINTABLESTRING, {}, 0},
-      {MBSTRING_UTF8, {'a'}, kAll, V_ASN1_PRINTABLESTRING, {'a'}, 1},
-      {MBSTRING_UTF8,
-       {'a', 'A', '0', '\'', '(', ')', '+', ',', '-', '.', '/', ':', '=', '?'},
-       kAll,
-       V_ASN1_PRINTABLESTRING,
-       {'a', 'A', '0', '\'', '(', ')', '+', ',', '-', '.', '/', ':', '=', '?'},
-       14},
-      {MBSTRING_UTF8, {'*'}, kAll, V_ASN1_IA5STRING, {'*'}, 1},
-      {MBSTRING_UTF8, {'\n'}, kAll, V_ASN1_IA5STRING, {'\n'}, 1},
-      {MBSTRING_UTF8,
-       {0xc2, 0x80 /* U+0080 */},
-       kAll,
-       V_ASN1_T61STRING,
-       {0x80},
-       1},
-      {MBSTRING_UTF8,
-       {0xc4, 0x80 /* U+0100 */},
-       kAll,
-       V_ASN1_BMPSTRING,
-       {0x01, 0x00},
-       1},
-      {MBSTRING_UTF8,
-       {0xf0, 0x90, 0x80, 0x80 /* U+10000 */},
-       kAll,
-       V_ASN1_UNIVERSALSTRING,
-       {0x00, 0x01, 0x00, 0x00},
-       1},
-      {MBSTRING_UTF8,
-       {0xf0, 0x90, 0x80, 0x80 /* U+10000 */},
-       kAll & ~B_ASN1_UNIVERSALSTRING,
-       V_ASN1_UTF8STRING,
-       {0xf0, 0x90, 0x80, 0x80},
-       1},
-
-      // NUL is not printable. It should also not terminate iteration.
-      {MBSTRING_UTF8, {0}, kAll, V_ASN1_IA5STRING, {0}, 1},
-      {MBSTRING_UTF8, {0, 'a'}, kAll, V_ASN1_IA5STRING, {0, 'a'}, 2},
-
-      // When a particular format is specified, we use it.
-      {MBSTRING_UTF8,
-       {'a'},
-       B_ASN1_PRINTABLESTRING,
-       V_ASN1_PRINTABLESTRING,
-       {'a'},
-       1},
-      {MBSTRING_UTF8, {'a'}, B_ASN1_IA5STRING, V_ASN1_IA5STRING, {'a'}, 1},
-      {MBSTRING_UTF8, {'a'}, B_ASN1_T61STRING, V_ASN1_T61STRING, {'a'}, 1},
-      {MBSTRING_UTF8, {'a'}, B_ASN1_UTF8STRING, V_ASN1_UTF8STRING, {'a'}, 1},
-      {MBSTRING_UTF8,
-       {'a'},
-       B_ASN1_BMPSTRING,
-       V_ASN1_BMPSTRING,
-       {0x00, 'a'},
-       1},
-      {MBSTRING_UTF8,
-       {'a'},
-       B_ASN1_UNIVERSALSTRING,
-       V_ASN1_UNIVERSALSTRING,
-       {0x00, 0x00, 0x00, 'a'},
-       1},
-
-      // A long string with characters of many widths, to test sizes are
-      // measured in code points.
-      {MBSTRING_UTF8,
-       {
-           'a',                     //
-           0xc2, 0x80,              // U+0080
-           0xc4, 0x80,              // U+0100
-           0xf0, 0x90, 0x80, 0x80,  // U+10000
-       },
-       B_ASN1_UNIVERSALSTRING,
-       V_ASN1_UNIVERSALSTRING,
-       {
-           0x00, 0x00, 0x00, 'a',   //
-           0x00, 0x00, 0x00, 0x80,  //
-           0x00, 0x00, 0x01, 0x00,  //
-           0x00, 0x01, 0x00, 0x00,  //
-       },
-       4},
-  };
-  for (const auto &t : kTests) {
-    SCOPED_TRACE(t.format);
-    SCOPED_TRACE(Bytes(t.in));
-    SCOPED_TRACE(t.mask);
-
-    // Passing in nullptr should do a dry run.
-    EXPECT_EQ(t.expected_type,
-              ASN1_mbstring_copy(nullptr, t.in.data(), t.in.size(), t.format,
-                                 t.mask));
-
-    // Test allocating a new object.
-    ASN1_STRING *str = nullptr;
-    EXPECT_EQ(
-        t.expected_type,
-        ASN1_mbstring_copy(&str, t.in.data(), t.in.size(), t.format, t.mask));
-    ASSERT_TRUE(str);
-    EXPECT_EQ(t.expected_type, ASN1_STRING_type(str));
-    EXPECT_EQ(Bytes(t.expected_data),
-              Bytes(ASN1_STRING_get0_data(str), ASN1_STRING_length(str)));
-
-    // Test writing into an existing object.
-    ASN1_STRING_free(str);
-    str = ASN1_STRING_new();
-    ASSERT_TRUE(str);
-    ASN1_STRING *old_str = str;
-    EXPECT_EQ(
-        t.expected_type,
-        ASN1_mbstring_copy(&str, t.in.data(), t.in.size(), t.format, t.mask));
-    ASSERT_EQ(old_str, str);
-    EXPECT_EQ(t.expected_type, ASN1_STRING_type(str));
-    EXPECT_EQ(Bytes(t.expected_data),
-              Bytes(ASN1_STRING_get0_data(str), ASN1_STRING_length(str)));
-    ASN1_STRING_free(str);
-    str = nullptr;
-
-    // minsize and maxsize should be enforced, even in a dry run.
-    EXPECT_EQ(t.expected_type,
-              ASN1_mbstring_ncopy(nullptr, t.in.data(), t.in.size(), t.format,
-                                  t.mask, /*minsize=*/t.num_codepoints,
-                                  /*maxsize=*/t.num_codepoints));
-
-    EXPECT_EQ(t.expected_type,
-              ASN1_mbstring_ncopy(&str, t.in.data(), t.in.size(), t.format,
-                                  t.mask, /*minsize=*/t.num_codepoints,
-                                  /*maxsize=*/t.num_codepoints));
-    ASSERT_TRUE(str);
-    EXPECT_EQ(t.expected_type, ASN1_STRING_type(str));
-    EXPECT_EQ(Bytes(t.expected_data),
-              Bytes(ASN1_STRING_get0_data(str), ASN1_STRING_length(str)));
-    ASN1_STRING_free(str);
-    str = nullptr;
-
-    EXPECT_EQ(-1, ASN1_mbstring_ncopy(
-                      nullptr, t.in.data(), t.in.size(), t.format, t.mask,
-                      /*minsize=*/t.num_codepoints + 1, /*maxsize=*/0));
-    ERR_clear_error();
-    EXPECT_EQ(-1, ASN1_mbstring_ncopy(
-                      &str, t.in.data(), t.in.size(), t.format, t.mask,
-                      /*minsize=*/t.num_codepoints + 1, /*maxsize=*/0));
-    EXPECT_FALSE(str);
-    ERR_clear_error();
-    if (t.num_codepoints > 1) {
-      EXPECT_EQ(-1, ASN1_mbstring_ncopy(
-                        nullptr, t.in.data(), t.in.size(), t.format, t.mask,
-                        /*minsize=*/0, /*maxsize=*/t.num_codepoints - 1));
-      ERR_clear_error();
-      EXPECT_EQ(-1, ASN1_mbstring_ncopy(
-                        &str, t.in.data(), t.in.size(), t.format, t.mask,
-                        /*minsize=*/0, /*maxsize=*/t.num_codepoints - 1));
-      EXPECT_FALSE(str);
-      ERR_clear_error();
-    }
-  }
-
-  const struct {
-    int format;
-    std::vector<uint8_t> in;
-    unsigned long mask;
-  } kInvalidTests[] = {
-      // Invalid encodings are rejected.
-      {MBSTRING_UTF8, {0xff}, B_ASN1_UTF8STRING},
-      {MBSTRING_BMP, {0xff}, B_ASN1_UTF8STRING},
-      {MBSTRING_UNIV, {0xff}, B_ASN1_UTF8STRING},
-
-      // Lone surrogates are not code points.
-      {MBSTRING_UTF8, {0xed, 0xa0, 0x80}, B_ASN1_UTF8STRING},
-      {MBSTRING_BMP, {0xd8, 0x00}, B_ASN1_UTF8STRING},
-      {MBSTRING_UNIV, {0x00, 0x00, 0xd8, 0x00}, B_ASN1_UTF8STRING},
-
-      // The input does not fit in the allowed output types.
-      {MBSTRING_UTF8, {'\n'}, B_ASN1_PRINTABLESTRING},
-      {MBSTRING_UTF8,
-       {0xc2, 0x80 /* U+0080 */},
-       B_ASN1_PRINTABLESTRING | B_ASN1_IA5STRING},
-      {MBSTRING_UTF8,
-       {0xc4, 0x80 /* U+0100 */},
-       B_ASN1_PRINTABLESTRING | B_ASN1_IA5STRING | B_ASN1_T61STRING},
-      {MBSTRING_UTF8,
-       {0xf0, 0x90, 0x80, 0x80 /* U+10000 */},
-       B_ASN1_PRINTABLESTRING | B_ASN1_IA5STRING | B_ASN1_T61STRING |
-           B_ASN1_BMPSTRING},
-
-      // Unrecognized bits are ignored.
-      {MBSTRING_UTF8, {'\n'}, B_ASN1_PRINTABLESTRING | B_ASN1_SEQUENCE},
-  };
-  for (const auto &t : kInvalidTests) {
-    SCOPED_TRACE(t.format);
-    SCOPED_TRACE(Bytes(t.in));
-    SCOPED_TRACE(t.mask);
-
-    EXPECT_EQ(-1, ASN1_mbstring_copy(nullptr, t.in.data(), t.in.size(),
-                                     t.format, t.mask));
-    ERR_clear_error();
-
-    ASN1_STRING *str = nullptr;
-    EXPECT_EQ(-1, ASN1_mbstring_copy(&str, t.in.data(), t.in.size(), t.format,
-                                     t.mask));
-    ERR_clear_error();
-    EXPECT_EQ(nullptr, str);
-  }
-}
-
-TEST(ASN1Test, StringByNID) {
-  // |ASN1_mbstring_*| tests above test most of the interactions with |inform|,
-  // so all tests below use UTF-8.
-  const struct {
-    int nid;
-    std::string in;
-    int expected_type;
-    std::string expected;
-  } kTests[] = {
-      // Although DirectoryString and PKCS9String allow many types of strings,
-      // we prefer UTF8String.
-      {NID_commonName, "abc", V_ASN1_UTF8STRING, "abc"},
-      {NID_commonName, "\xe2\x98\x83", V_ASN1_UTF8STRING, "\xe2\x98\x83"},
-      {NID_localityName, "abc", V_ASN1_UTF8STRING, "abc"},
-      {NID_stateOrProvinceName, "abc", V_ASN1_UTF8STRING, "abc"},
-      {NID_organizationName, "abc", V_ASN1_UTF8STRING, "abc"},
-      {NID_organizationalUnitName, "abc", V_ASN1_UTF8STRING, "abc"},
-      {NID_pkcs9_unstructuredName, "abc", V_ASN1_UTF8STRING, "abc"},
-      {NID_pkcs9_challengePassword, "abc", V_ASN1_UTF8STRING, "abc"},
-      {NID_pkcs9_unstructuredAddress, "abc", V_ASN1_UTF8STRING, "abc"},
-      {NID_givenName, "abc", V_ASN1_UTF8STRING, "abc"},
-      {NID_givenName, "abc", V_ASN1_UTF8STRING, "abc"},
-      {NID_givenName, "abc", V_ASN1_UTF8STRING, "abc"},
-      {NID_surname, "abc", V_ASN1_UTF8STRING, "abc"},
-      {NID_initials, "abc", V_ASN1_UTF8STRING, "abc"},
-      {NID_name, "abc", V_ASN1_UTF8STRING, "abc"},
-
-      // Some attribute types use a particular string type.
-      {NID_countryName, "US", V_ASN1_PRINTABLESTRING, "US"},
-      {NID_pkcs9_emailAddress, "example@example.com", V_ASN1_IA5STRING,
-       "example@example.com"},
-      {NID_serialNumber, "1234", V_ASN1_PRINTABLESTRING, "1234"},
-      {NID_friendlyName, "abc", V_ASN1_BMPSTRING,
-       std::string({'\0', 'a', '\0', 'b', '\0', 'c'})},
-      {NID_dnQualifier, "US", V_ASN1_PRINTABLESTRING, "US"},
-      {NID_domainComponent, "com", V_ASN1_IA5STRING, "com"},
-      {NID_ms_csp_name, "abc", V_ASN1_BMPSTRING,
-       std::string({'\0', 'a', '\0', 'b', '\0', 'c'})},
-
-      // Unknown NIDs default to UTF8String.
-      {NID_rsaEncryption, "abc", V_ASN1_UTF8STRING, "abc"},
-  };
-  for (const auto &t : kTests) {
-    SCOPED_TRACE(t.nid);
-    SCOPED_TRACE(t.in);
-
-    // Test allocating a new object.
-    bssl::UniquePtr<ASN1_STRING> str(ASN1_STRING_set_by_NID(
-        nullptr, reinterpret_cast<const uint8_t *>(t.in.data()), t.in.size(),
-        MBSTRING_UTF8, t.nid));
-    ASSERT_TRUE(str);
-    EXPECT_EQ(t.expected_type, ASN1_STRING_type(str.get()));
-    EXPECT_EQ(Bytes(t.expected), Bytes(ASN1_STRING_get0_data(str.get()),
-                                       ASN1_STRING_length(str.get())));
-
-    // Test writing into an existing object.
-    str.reset(ASN1_STRING_new());
-    ASSERT_TRUE(str);
-    ASN1_STRING *old_str = str.get();
-    ASSERT_TRUE(ASN1_STRING_set_by_NID(
-        &old_str, reinterpret_cast<const uint8_t *>(t.in.data()), t.in.size(),
-        MBSTRING_UTF8, t.nid));
-    ASSERT_EQ(old_str, str.get());
-    EXPECT_EQ(t.expected_type, ASN1_STRING_type(str.get()));
-    EXPECT_EQ(Bytes(t.expected), Bytes(ASN1_STRING_get0_data(str.get()),
-                                       ASN1_STRING_length(str.get())));
-  }
-
-  const struct {
-    int nid;
-    std::string in;
-  } kInvalidTests[] = {
-      // DirectoryString forbids empty inputs.
-      {NID_commonName, ""},
-      {NID_localityName, ""},
-      {NID_stateOrProvinceName, ""},
-      {NID_organizationName, ""},
-      {NID_organizationalUnitName, ""},
-      {NID_pkcs9_unstructuredName, ""},
-      {NID_pkcs9_challengePassword, ""},
-      {NID_pkcs9_unstructuredAddress, ""},
-      {NID_givenName, ""},
-      {NID_givenName, ""},
-      {NID_givenName, ""},
-      {NID_surname, ""},
-      {NID_initials, ""},
-      {NID_name, ""},
-
-      // Test upper bounds from RFC 5280.
-      {NID_name, std::string(32769, 'a')},
-      {NID_commonName, std::string(65, 'a')},
-      {NID_localityName, std::string(129, 'a')},
-      {NID_stateOrProvinceName, std::string(129, 'a')},
-      {NID_organizationName, std::string(65, 'a')},
-      {NID_organizationalUnitName, std::string(65, 'a')},
-      {NID_pkcs9_emailAddress, std::string(256, 'a')},
-      {NID_serialNumber, std::string(65, 'a')},
-
-      // X520countryName must be exactly two characters.
-      {NID_countryName, "A"},
-      {NID_countryName, "AAA"},
-
-      // Some string types cannot represent all codepoints.
-      {NID_countryName, "\xe2\x98\x83"},
-      {NID_pkcs9_emailAddress, "\xe2\x98\x83"},
-      {NID_serialNumber, "\xe2\x98\x83"},
-      {NID_dnQualifier, "\xe2\x98\x83"},
-      {NID_domainComponent, "\xe2\x98\x83"},
-  };
-  for (const auto &t : kInvalidTests) {
-    SCOPED_TRACE(t.nid);
-    SCOPED_TRACE(t.in);
-    bssl::UniquePtr<ASN1_STRING> str(ASN1_STRING_set_by_NID(
-        nullptr, reinterpret_cast<const uint8_t *>(t.in.data()), t.in.size(),
-        MBSTRING_UTF8, t.nid));
-    EXPECT_FALSE(str);
-    ERR_clear_error();
-  }
-}
-
-TEST(ASN1Test, StringByCustomNID) {
-  // This test affects library-global state. We rely on nothing else in the test
-  // suite using these OIDs.
-  int nid1 = OBJ_create("1.2.840.113554.4.1.72585.1000", "custom OID 1000",
-                        "custom OID 1000");
-  ASSERT_NE(NID_undef, nid1);
-  int nid2 = OBJ_create("1.2.840.113554.4.1.72585.1001", "custom OID 1001",
-                        "custom OID 1001");
-  ASSERT_NE(NID_undef, nid2);
-
-  // Values registered in the string table should be picked up.
-  ASSERT_TRUE(ASN1_STRING_TABLE_add(nid1, 5, 10, V_ASN1_PRINTABLESTRING,
-                                    STABLE_NO_MASK));
-  bssl::UniquePtr<ASN1_STRING> str(ASN1_STRING_set_by_NID(
-      nullptr, reinterpret_cast<const uint8_t *>("12345"), 5, MBSTRING_UTF8,
-      nid1));
-  ASSERT_TRUE(str);
-  EXPECT_EQ(V_ASN1_PRINTABLESTRING, ASN1_STRING_type(str.get()));
-  EXPECT_EQ(Bytes("12345"), Bytes(ASN1_STRING_get0_data(str.get()),
-                                  ASN1_STRING_length(str.get())));
-
-  // Minimum and maximum lengths are enforced.
-  str.reset(ASN1_STRING_set_by_NID(nullptr,
-                                   reinterpret_cast<const uint8_t *>("1234"), 4,
-                                   MBSTRING_UTF8, nid1));
-  EXPECT_FALSE(str);
-  ERR_clear_error();
-  str.reset(ASN1_STRING_set_by_NID(
-      nullptr, reinterpret_cast<const uint8_t *>("12345678901"), 11,
-      MBSTRING_UTF8, nid1));
-  EXPECT_FALSE(str);
-  ERR_clear_error();
-
-  // Without |STABLE_NO_MASK|, we always pick UTF8String. -1 means there is no
-  // length limit.
-  ASSERT_TRUE(ASN1_STRING_TABLE_add(nid2, -1, -1, DIRSTRING_TYPE, 0));
-  str.reset(ASN1_STRING_set_by_NID(nullptr,
-                                   reinterpret_cast<const uint8_t *>("12345"),
-                                   5, MBSTRING_UTF8, nid2));
-  ASSERT_TRUE(str);
-  EXPECT_EQ(V_ASN1_UTF8STRING, ASN1_STRING_type(str.get()));
-  EXPECT_EQ(Bytes("12345"), Bytes(ASN1_STRING_get0_data(str.get()),
-                                  ASN1_STRING_length(str.get())));
-
-  // Overriding existing entries, built-in or custom, is an error.
-  EXPECT_FALSE(
-      ASN1_STRING_TABLE_add(NID_countryName, -1, -1, DIRSTRING_TYPE, 0));
-  EXPECT_FALSE(ASN1_STRING_TABLE_add(nid1, -1, -1, DIRSTRING_TYPE, 0));
-}
-
-#if defined(OPENSSL_THREADS)
-TEST(ASN1Test, StringByCustomNIDThreads) {
-  // This test affects library-global state. We rely on nothing else in the test
-  // suite using these OIDs.
-  int nid1 = OBJ_create("1.2.840.113554.4.1.72585.1002", "custom OID 1002",
-                        "custom OID 1002");
-  ASSERT_NE(NID_undef, nid1);
-  int nid2 = OBJ_create("1.2.840.113554.4.1.72585.1003", "custom OID 1003",
-                        "custom OID 1003");
-  ASSERT_NE(NID_undef, nid2);
-
-  std::vector<std::thread> threads;
-  threads.emplace_back([&] {
-    ASSERT_TRUE(ASN1_STRING_TABLE_add(nid1, 5, 10, V_ASN1_PRINTABLESTRING,
-                                      STABLE_NO_MASK));
-    bssl::UniquePtr<ASN1_STRING> str(ASN1_STRING_set_by_NID(
-        nullptr, reinterpret_cast<const uint8_t *>("12345"), 5, MBSTRING_UTF8,
-        nid1));
-    ASSERT_TRUE(str);
-    EXPECT_EQ(V_ASN1_PRINTABLESTRING, ASN1_STRING_type(str.get()));
-    EXPECT_EQ(Bytes("12345"), Bytes(ASN1_STRING_get0_data(str.get()),
-                                    ASN1_STRING_length(str.get())));
-  });
-  threads.emplace_back([&] {
-    ASSERT_TRUE(ASN1_STRING_TABLE_add(nid2, 5, 10, V_ASN1_PRINTABLESTRING,
-                                      STABLE_NO_MASK));
-    bssl::UniquePtr<ASN1_STRING> str(ASN1_STRING_set_by_NID(
-        nullptr, reinterpret_cast<const uint8_t *>("12345"), 5, MBSTRING_UTF8,
-        nid2));
-    ASSERT_TRUE(str);
-    EXPECT_EQ(V_ASN1_PRINTABLESTRING, ASN1_STRING_type(str.get()));
-    EXPECT_EQ(Bytes("12345"), Bytes(ASN1_STRING_get0_data(str.get()),
-                                    ASN1_STRING_length(str.get())));
-  });
-  for (auto &thread : threads) {
-    thread.join();
-  }
-}
-#endif  // OPENSSL_THREADS
-
-// Encoding a CHOICE type with an invalid selector should fail.
-TEST(ASN1Test, InvalidChoice) {
-  bssl::UniquePtr<GENERAL_NAME> name(GENERAL_NAME_new());
-  ASSERT_TRUE(name);
-  // CHOICE types are initialized with an invalid selector.
-  EXPECT_EQ(-1, name->type);
-  // |name| should fail to encode.
-  EXPECT_EQ(-1, i2d_GENERAL_NAME(name.get(), nullptr));
-
-  // The error should be propagated through types containing |name|.
-  bssl::UniquePtr<GENERAL_NAMES> names(GENERAL_NAMES_new());
-  ASSERT_TRUE(names);
-  EXPECT_TRUE(bssl::PushToStack(names.get(), std::move(name)));
-  EXPECT_EQ(-1, i2d_GENERAL_NAMES(names.get(), nullptr));
-}
-
-// Encoding NID-only |ASN1_OBJECT|s should fail.
-TEST(ASN1Test, InvalidObject) {
-  EXPECT_EQ(-1, i2d_ASN1_OBJECT(OBJ_nid2obj(NID_kx_ecdhe), nullptr));
-
-  bssl::UniquePtr<X509_ALGOR> alg(X509_ALGOR_new());
-  ASSERT_TRUE(alg);
-  ASSERT_TRUE(X509_ALGOR_set0(alg.get(), OBJ_nid2obj(NID_kx_ecdhe),
-                              V_ASN1_UNDEF, nullptr));
-  EXPECT_EQ(-1, i2d_X509_ALGOR(alg.get(), nullptr));
-}
-
-// Encoding invalid |ASN1_TYPE|s should fail. |ASN1_TYPE|s are
-// default-initialized to an invalid type.
-TEST(ASN1Test, InvalidASN1Type) {
-  bssl::UniquePtr<ASN1_TYPE> obj(ASN1_TYPE_new());
-  ASSERT_TRUE(obj);
-  EXPECT_EQ(-1, obj->type);
-  EXPECT_EQ(-1, i2d_ASN1_TYPE(obj.get(), nullptr));
-
-  // The historical in-memory representation of [UNIVERSAL 128] was for both
-  // |obj->type| and |obj->value.asn1_string->type| to be 128. This is no longer
-  // used and should be rejected by the encoder.
-  obj.reset(ASN1_TYPE_new());
-  ASSERT_TRUE(obj);
-  obj->type = 128;
-  obj->value.asn1_string = ASN1_STRING_type_new(128);
-  ASSERT_TRUE(obj->value.asn1_string);
-  EXPECT_EQ(-1, i2d_ASN1_TYPE(obj.get(), nullptr));
-}
-
-// Encoding invalid MSTRING types should fail. An MSTRING is a CHOICE of
-// string-like types. They are initialized to an invalid type.
-TEST(ASN1Test, InvalidMSTRING) {
-  bssl::UniquePtr<ASN1_STRING> obj(ASN1_TIME_new());
-  ASSERT_TRUE(obj);
-  EXPECT_EQ(-1, obj->type);
-  EXPECT_EQ(-1, i2d_ASN1_TIME(obj.get(), nullptr));
-
-  obj.reset(DIRECTORYSTRING_new());
-  ASSERT_TRUE(obj);
-  EXPECT_EQ(-1, obj->type);
-  EXPECT_EQ(-1, i2d_DIRECTORYSTRING(obj.get(), nullptr));
-}
-
-TEST(ASN1Test, StringTableSorted) {
-  const ASN1_STRING_TABLE *table;
-  size_t table_len;
-  asn1_get_string_table_for_testing(&table, &table_len);
-  for (size_t i = 1; i < table_len; i++) {
-    EXPECT_LT(table[i - 1].nid, table[i].nid);
-  }
-}
-
-TEST(ASN1Test, Null) {
-  // An |ASN1_NULL| is an opaque, non-null pointer. It is an arbitrary signaling
-  // value and does not need to be freed. (If the pointer is null, this is an
-  // omitted OPTIONAL NULL.)
-  EXPECT_NE(nullptr, ASN1_NULL_new());
-
-  // It is safe to free either the non-null pointer or the null one.
-  ASN1_NULL_free(ASN1_NULL_new());
-  ASN1_NULL_free(nullptr);
-
-  // A NULL may be decoded.
-  static const uint8_t kNull[] = {0x05, 0x00};
-  const uint8_t *ptr = kNull;
-  EXPECT_NE(nullptr, d2i_ASN1_NULL(nullptr, &ptr, sizeof(kNull)));
-  EXPECT_EQ(ptr, kNull + sizeof(kNull));
-
-  // It may also be re-encoded.
-  uint8_t *enc = nullptr;
-  int enc_len = i2d_ASN1_NULL(ASN1_NULL_new(), &enc);
-  ASSERT_GE(enc_len, 0);
-  EXPECT_EQ(Bytes(kNull), Bytes(enc, enc_len));
-  OPENSSL_free(enc);
-  enc = nullptr;
-
-  // Although the standalone representation of NULL is a non-null pointer, the
-  // |ASN1_TYPE| representation is a null pointer.
-  ptr = kNull;
-  bssl::UniquePtr<ASN1_TYPE> null_type(
-      d2i_ASN1_TYPE(nullptr, &ptr, sizeof(kNull)));
-  ASSERT_TRUE(null_type);
-  EXPECT_EQ(ptr, kNull + sizeof(kNull));
-  EXPECT_EQ(V_ASN1_NULL, ASN1_TYPE_get(null_type.get()));
-  EXPECT_EQ(nullptr, null_type->value.ptr);
-}
-
-TEST(ASN1Test, Pack) {
-  bssl::UniquePtr<BASIC_CONSTRAINTS> val(BASIC_CONSTRAINTS_new());
-  ASSERT_TRUE(val);
-  val->ca = 0;
-
-  // Test all three calling conventions.
-  static const uint8_t kExpected[] = {0x30, 0x00};
-  bssl::UniquePtr<ASN1_STRING> str(
-      ASN1_item_pack(val.get(), ASN1_ITEM_rptr(BASIC_CONSTRAINTS), nullptr));
-  ASSERT_TRUE(str);
-  EXPECT_EQ(
-      Bytes(ASN1_STRING_get0_data(str.get()), ASN1_STRING_length(str.get())),
-      Bytes(kExpected));
-
-  ASN1_STRING *raw = nullptr;
-  str.reset(ASN1_item_pack(val.get(), ASN1_ITEM_rptr(BASIC_CONSTRAINTS), &raw));
-  ASSERT_TRUE(str);
-  EXPECT_EQ(raw, str.get());
-  EXPECT_EQ(
-      Bytes(ASN1_STRING_get0_data(str.get()), ASN1_STRING_length(str.get())),
-      Bytes(kExpected));
-
-  str.reset(ASN1_STRING_new());
-  ASSERT_TRUE(str);
-  raw = str.get();
-  EXPECT_TRUE(
-      ASN1_item_pack(val.get(), ASN1_ITEM_rptr(BASIC_CONSTRAINTS), &raw));
-  EXPECT_EQ(raw, str.get());
-  EXPECT_EQ(
-      Bytes(ASN1_STRING_get0_data(str.get()), ASN1_STRING_length(str.get())),
-      Bytes(kExpected));
-}
-
-TEST(ASN1Test, Unpack) {
-  bssl::UniquePtr<ASN1_STRING> str(ASN1_STRING_new());
-  ASSERT_TRUE(str);
-
-  static const uint8_t kValid[] = {0x30, 0x00};
-  ASSERT_TRUE(ASN1_STRING_set(str.get(), kValid, sizeof(kValid)));
-  bssl::UniquePtr<BASIC_CONSTRAINTS> val(static_cast<BASIC_CONSTRAINTS *>(
-      ASN1_item_unpack(str.get(), ASN1_ITEM_rptr(BASIC_CONSTRAINTS))));
-  ASSERT_TRUE(val);
-  EXPECT_EQ(val->ca, 0);
-  EXPECT_EQ(val->pathlen, nullptr);
-
-  static const uint8_t kInvalid[] = {0x31, 0x00};
-  ASSERT_TRUE(ASN1_STRING_set(str.get(), kInvalid, sizeof(kInvalid)));
-  val.reset(static_cast<BASIC_CONSTRAINTS *>(
-      ASN1_item_unpack(str.get(), ASN1_ITEM_rptr(BASIC_CONSTRAINTS))));
-  EXPECT_FALSE(val);
-
-  static const uint8_t kTraiilingData[] = {0x30, 0x00, 0x00};
-  ASSERT_TRUE(
-      ASN1_STRING_set(str.get(), kTraiilingData, sizeof(kTraiilingData)));
-  val.reset(static_cast<BASIC_CONSTRAINTS *>(
-      ASN1_item_unpack(str.get(), ASN1_ITEM_rptr(BASIC_CONSTRAINTS))));
-  EXPECT_FALSE(val);
-}
-
-TEST(ASN1Test, StringCmp) {
-  struct Input {
-    int type;
-    std::vector<uint8_t> data;
-    int flags;
-    bool equals_previous;
-  };
-  // kInputs is a list of |ASN1_STRING| parameters, in sorted order. The input
-  // should be sorted by bit length, then data, then type.
-  const Input kInputs[] = {
-      {V_ASN1_BIT_STRING, {}, ASN1_STRING_FLAG_BITS_LEFT | 0, false},
-      {V_ASN1_BIT_STRING, {}, 0, true},
-      // When |ASN1_STRING_FLAG_BITS_LEFT| is unset, BIT STRINGs implicitly
-      // drop trailing zeros.
-      {V_ASN1_BIT_STRING, {0x00, 0x00, 0x00, 0x00}, 0, true},
-
-      {V_ASN1_OCTET_STRING, {}, 0, false},
-      {V_ASN1_UTF8STRING, {}, 0, false},
-
-      // BIT STRINGs with padding bits (i.e. not part of the actual value) are
-      // shorter and thus sort earlier:
-      // 1-bit inputs.
-      {V_ASN1_BIT_STRING, {0x00}, ASN1_STRING_FLAG_BITS_LEFT | 7, false},
-      {V_ASN1_BIT_STRING, {0x80}, ASN1_STRING_FLAG_BITS_LEFT | 7, false},
-      // 2-bit inputs.
-      {V_ASN1_BIT_STRING, {0x00}, ASN1_STRING_FLAG_BITS_LEFT | 6, false},
-      {V_ASN1_BIT_STRING, {0xc0}, ASN1_STRING_FLAG_BITS_LEFT | 6, false},
-      // 3-bit inputs.
-      {V_ASN1_BIT_STRING, {0x00}, ASN1_STRING_FLAG_BITS_LEFT | 5, false},
-      {V_ASN1_BIT_STRING, {0xe0}, ASN1_STRING_FLAG_BITS_LEFT | 5, false},
-      // 4-bit inputs.
-      {V_ASN1_BIT_STRING, {0xf0}, ASN1_STRING_FLAG_BITS_LEFT | 4, false},
-      {V_ASN1_BIT_STRING, {0xf0}, 0, true},        // 4 trailing zeros dropped.
-      {V_ASN1_BIT_STRING, {0xf0, 0x00}, 0, true},  // 12 trailing zeros dropped.
-      // 5-bit inputs.
-      {V_ASN1_BIT_STRING, {0x00}, ASN1_STRING_FLAG_BITS_LEFT | 3, false},
-      {V_ASN1_BIT_STRING, {0xf0}, ASN1_STRING_FLAG_BITS_LEFT | 3, false},
-      {V_ASN1_BIT_STRING, {0xf8}, ASN1_STRING_FLAG_BITS_LEFT | 3, false},
-      // 6-bit inputs.
-      {V_ASN1_BIT_STRING, {0x00}, ASN1_STRING_FLAG_BITS_LEFT | 2, false},
-      {V_ASN1_BIT_STRING, {0xf0}, ASN1_STRING_FLAG_BITS_LEFT | 2, false},
-      {V_ASN1_BIT_STRING, {0xfc}, ASN1_STRING_FLAG_BITS_LEFT | 2, false},
-      // 7-bit inputs.
-      {V_ASN1_BIT_STRING, {0x00}, ASN1_STRING_FLAG_BITS_LEFT | 1, false},
-      {V_ASN1_BIT_STRING, {0xf0}, ASN1_STRING_FLAG_BITS_LEFT | 1, false},
-      {V_ASN1_BIT_STRING, {0xfe}, ASN1_STRING_FLAG_BITS_LEFT | 1, false},
-
-      // 8-bit inputs.
-      {V_ASN1_BIT_STRING, {0x00}, ASN1_STRING_FLAG_BITS_LEFT | 0, false},
-      {V_ASN1_OCTET_STRING, {0x00}, 0, false},
-      {V_ASN1_UTF8STRING, {0x00}, 0, false},
-
-      {V_ASN1_BIT_STRING, {0x80}, ASN1_STRING_FLAG_BITS_LEFT | 0, false},
-      {V_ASN1_OCTET_STRING, {0x80}, 0, false},
-      {V_ASN1_UTF8STRING, {0x80}, 0, false},
-
-      {V_ASN1_BIT_STRING, {0xff}, ASN1_STRING_FLAG_BITS_LEFT | 0, false},
-      {V_ASN1_BIT_STRING, {0xff}, 0, true},  // No trailing zeros to drop.
-      {V_ASN1_OCTET_STRING, {0xff}, 0, false},
-      {V_ASN1_UTF8STRING, {0xff}, 0, false},
-
-      // Bytes are compared lexicographically.
-      {V_ASN1_BIT_STRING, {0x00, 0x00}, ASN1_STRING_FLAG_BITS_LEFT | 0, false},
-      {V_ASN1_OCTET_STRING, {0x00, 0x00}, 0, false},
-      {V_ASN1_UTF8STRING, {0x00, 0x00}, 0, false},
-
-      {V_ASN1_BIT_STRING, {0x00, 0xff}, ASN1_STRING_FLAG_BITS_LEFT | 0, false},
-      {V_ASN1_OCTET_STRING, {0x00, 0xff}, 0, false},
-      {V_ASN1_UTF8STRING, {0x00, 0xff}, 0, false},
-
-      {V_ASN1_BIT_STRING, {0xff, 0x00}, ASN1_STRING_FLAG_BITS_LEFT | 0, false},
-      {V_ASN1_OCTET_STRING, {0xff, 0x00}, 0, false},
-      {V_ASN1_UTF8STRING, {0xff, 0x00}, 0, false},
-  };
-  std::vector<bssl::UniquePtr<ASN1_STRING>> strs;
-  strs.reserve(OPENSSL_ARRAY_SIZE(kInputs));
-  for (const auto &input : kInputs) {
-    strs.emplace_back(ASN1_STRING_type_new(input.type));
-    ASSERT_TRUE(strs.back());
-    ASSERT_TRUE(ASN1_STRING_set(strs.back().get(), input.data.data(),
-                                input.data.size()));
-    strs.back()->flags = input.flags;
-  }
-
-  for (size_t i = 0; i < strs.size(); i++) {
-    SCOPED_TRACE(i);
-    bool expect_equal = true;
-    for (size_t j = i; j < strs.size(); j++) {
-      SCOPED_TRACE(j);
-      if (j > i && !kInputs[j].equals_previous) {
-        expect_equal = false;
-      }
-
-      const int cmp_i_j = ASN1_STRING_cmp(strs[i].get(), strs[j].get());
-      const int cmp_j_i = ASN1_STRING_cmp(strs[j].get(), strs[i].get());
-      if (expect_equal) {
-        EXPECT_EQ(cmp_i_j, 0);
-        EXPECT_EQ(cmp_j_i, 0);
-      } else if (i < j) {
-        EXPECT_LT(cmp_i_j, 0);
-        EXPECT_GT(cmp_j_i, 0);
-      } else {
-        EXPECT_GT(cmp_i_j, 0);
-        EXPECT_LT(cmp_j_i, 0);
-      }
-    }
-  }
-}
-
-TEST(ASN1Test, PrintASN1Object) {
-  const struct {
-    std::vector<uint8_t> in;
-    const char *expected;
-  } kDataTests[] = {
-      // Known OIDs print as the name.
-      {{0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01}, "rsaEncryption"},
-
-      // Unknown OIDs print in decimal.
-      {{0x2a, 0x86, 0x48, 0x86, 0xf7, 0x12, 0x04, 0x01, 0x84, 0xb7, 0x09, 0x00},
-       "1.2.840.113554.4.1.72585.0"},
-
-      // Inputs which cannot be parsed as OIDs print as "<INVALID>".
-      {{0xff}, "<INVALID>"},
-
-      // The function has an internal 80-byte buffer. Test inputs at that
-      // boundary. First, 78 characters.
-      {{0x2a, 0x86, 0x48, 0x86, 0xf7, 0x12, 0x04, 0x01, 0x84, 0xb7,
-        0x09, 0x00, 0x00, 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},
-       "1.2.840.113554.4.1.72585.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.1"},
-      // 79 characters.
-      {{0x2a, 0x86, 0x48, 0x86, 0xf7, 0x12, 0x04, 0x01, 0x84, 0xb7,
-        0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a},
-       "1.2.840.113554.4.1.72585.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.10"},
-      // 80 characters.
-      {{0x2a, 0x86, 0x48, 0x86, 0xf7, 0x12, 0x04, 0x01, 0x84, 0xb7,
-        0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64},
-       "1.2.840.113554.4.1.72585.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.100"},
-      // 81 characters.
-      {{0x2a, 0x86, 0x48, 0x86, 0xf7, 0x12, 0x04, 0x01, 0x84, 0xb7,
-        0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x68},
-       "1.2.840.113554.4.1.72585.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.1000"},
-      // 82 characters.
-      {{0x2a, 0x86, 0x48, 0x86, 0xf7, 0x12, 0x04, 0x01, 0x84, 0xb7,
-        0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xce, 0x10},
-       "1.2.840.113554.4.1.72585.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.10000"},
-  };
-  for (const auto &t : kDataTests) {
-    SCOPED_TRACE(Bytes(t.in));
-    bssl::UniquePtr<ASN1_OBJECT> obj(ASN1_OBJECT_create(
-        NID_undef, t.in.data(), t.in.size(), /*sn=*/nullptr, /*ln=*/nullptr));
-    ASSERT_TRUE(obj);
-    bssl::UniquePtr<BIO> bio(BIO_new(BIO_s_mem()));
-    ASSERT_TRUE(bio);
-
-    int len = i2a_ASN1_OBJECT(bio.get(), obj.get());
-    EXPECT_EQ(len, static_cast<int>(strlen(t.expected)));
-
-    const uint8_t *bio_data;
-    size_t bio_len;
-    BIO_mem_contents(bio.get(), &bio_data, &bio_len);
-    EXPECT_EQ(t.expected,
-              std::string(reinterpret_cast<const char *>(bio_data), bio_len));
-  }
-
-  // Test writing NULL.
-  bssl::UniquePtr<BIO> bio(BIO_new(BIO_s_mem()));
-  ASSERT_TRUE(bio);
-  int len = i2a_ASN1_OBJECT(bio.get(), nullptr);
-  EXPECT_EQ(len, 4);
-  const uint8_t *bio_data;
-  size_t bio_len;
-  BIO_mem_contents(bio.get(), &bio_data, &bio_len);
-  EXPECT_EQ("NULL",
-            std::string(reinterpret_cast<const char *>(bio_data), bio_len));
-}
-
-TEST(ASN1Test, GetObject) {
-  // The header is valid, but there are not enough bytes for the length.
-  static const uint8_t kTruncated[] = {0x30, 0x01};
-  const uint8_t *ptr = kTruncated;
-  long length;
-  int tag;
-  int tag_class;
-  EXPECT_EQ(0x80, ASN1_get_object(&ptr, &length, &tag, &tag_class,
-                                  sizeof(kTruncated)));
-
-  // Indefinite-length encoding is not allowed in DER.
-  static const uint8_t kIndefinite[] = {0x30, 0x80, 0x00, 0x00};
-  ptr = kIndefinite;
-  EXPECT_EQ(0x80, ASN1_get_object(&ptr, &length, &tag, &tag_class,
-                                  sizeof(kIndefinite)));
-
-  // DER requires lengths be minimally-encoded. This should be {0x30, 0x00}.
-  static const uint8_t kNonMinimal[] = {0x30, 0x81, 0x00};
-  ptr = kNonMinimal;
-  EXPECT_EQ(0x80, ASN1_get_object(&ptr, &length, &tag, &tag_class,
-                                  sizeof(kNonMinimal)));
-
-  // This should be {0x04, 0x81, 0x80, ...}.
-  std::vector<uint8_t> non_minimal = {0x04, 0x82, 0x00, 0x80};
-  non_minimal.resize(non_minimal.size() + 0x80);
-  ptr = non_minimal.data();
-  EXPECT_EQ(0x80, ASN1_get_object(&ptr, &length, &tag, &tag_class,
-                                  non_minimal.size()));
-}
-
-template <typename T>
-void ExpectNoParse(T *(*d2i)(T **, const uint8_t **, long),
-                   const std::vector<uint8_t> &in) {
-  SCOPED_TRACE(Bytes(in));
-  const uint8_t *ptr = in.data();
-  bssl::UniquePtr<T> obj(d2i(nullptr, &ptr, in.size()));
-  EXPECT_FALSE(obj);
-}
-
-// The zero tag, constructed or primitive, is reserved and should rejected by
-// the parser.
-TEST(ASN1Test, ZeroTag) {
-  ExpectNoParse(d2i_ASN1_TYPE, {0x00, 0x00});
-  ExpectNoParse(d2i_ASN1_TYPE, {0x00, 0x10, 0x00});
-  ExpectNoParse(d2i_ASN1_TYPE, {0x20, 0x00});
-  ExpectNoParse(d2i_ASN1_TYPE, {0x20, 0x00});
-  ExpectNoParse(d2i_ASN1_SEQUENCE_ANY, {0x30, 0x02, 0x00, 0x00});
-  ExpectNoParse(d2i_ASN1_SET_ANY, {0x31, 0x02, 0x00, 0x00});
-  // SEQUENCE {
-  //   OBJECT_IDENTIFIER { 1.2.840.113554.4.1.72585.1 }
-  //   [UNIVERSAL 0 PRIMITIVE] {}
-  // }
-  ExpectNoParse(d2i_X509_ALGOR,
-                {0x30, 0x10, 0x06, 0x0c, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x12,
-                 0x04, 0x01, 0x84, 0xb7, 0x09, 0x01, 0x00, 0x00});
-  // SEQUENCE {
-  //   OBJECT_IDENTIFIER { 1.2.840.113554.4.1.72585.1 }
-  //   [UNIVERSAL 0 CONSTRUCTED] {}
-  // }
-  ExpectNoParse(d2i_X509_ALGOR,
-                {0x30, 0x10, 0x06, 0x0c, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x12,
-                 0x04, 0x01, 0x84, 0xb7, 0x09, 0x01, 0x20, 0x00});
-  // SEQUENCE {
-  //   OBJECT_IDENTIFIER { 1.2.840.113554.4.1.72585.1 }
-  //   [UNIVERSAL 0 PRIMITIVE] { "a" }
-  // }
-  ExpectNoParse(d2i_X509_ALGOR,
-                {0x30, 0x11, 0x06, 0x0c, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x12,
-                 0x04, 0x01, 0x84, 0xb7, 0x09, 0x01, 0x00, 0x01, 0x61});
-}
-
-TEST(ASN1Test, StringEncoding) {
-  const struct {
-    ASN1_STRING *(*d2i)(ASN1_STRING **out, const uint8_t **inp, long len);
-    std::vector<uint8_t> in;
-    bool valid;
-  } kTests[] = {
-      // All OCTET STRINGs are valid.
-      {d2i_ASN1_OCTET_STRING, {0x04, 0x00}, true},
-      {d2i_ASN1_OCTET_STRING, {0x04, 0x01, 0x00}, true},
-
-      // UTF8String must be valid UTF-8.
-      {d2i_ASN1_UTF8STRING, {0x0c, 0x00}, true},
-      {d2i_ASN1_UTF8STRING, {0x0c, 0x01, 'a'}, true},
-      {d2i_ASN1_UTF8STRING, {0x0c, 0x03, 0xe2, 0x98, 0x83}, true},
-      // Non-minimal, two-byte UTF-8.
-      {d2i_ASN1_UTF8STRING, {0x0c, 0x02, 0xc0, 0x81}, false},
-      // Truncated, four-byte UTF-8.
-      {d2i_ASN1_UTF8STRING, {0x0c, 0x03, 0xf0, 0x80, 0x80}, false},
-      // Low-surrogate value.
-      {d2i_ASN1_UTF8STRING, {0x0c, 0x03, 0xed, 0xa0, 0x80}, false},
-      // High-surrogate value.
-      {d2i_ASN1_UTF8STRING, {0x0c, 0x03, 0xed, 0xb0, 0x81}, false},
-
-      // BMPString must be valid UCS-2.
-      {d2i_ASN1_BMPSTRING, {0x1e, 0x00}, true},
-      {d2i_ASN1_BMPSTRING, {0x1e, 0x02, 0x00, 'a'}, true},
-      // Truncated code unit.
-      {d2i_ASN1_BMPSTRING, {0x1e, 0x01, 'a'}, false},
-      // Lone surrogate.
-      {d2i_ASN1_BMPSTRING, {0x1e, 0x02, 0xd8, 0}, false},
-      // BMPString is UCS-2, not UTF-16, so surrogate pairs are also invalid.
-      {d2i_ASN1_BMPSTRING, {0x1e, 0x04, 0xd8, 0, 0xdc, 1}, false},
-
-      // UniversalString must be valid UTF-32.
-      {d2i_ASN1_UNIVERSALSTRING, {0x1c, 0x00}, true},
-      {d2i_ASN1_UNIVERSALSTRING, {0x1c, 0x04, 0x00, 0x00, 0x00, 'a'}, true},
-      // Maximum code point.
-      {d2i_ASN1_UNIVERSALSTRING, {0x1c, 0x04, 0x00, 0x10, 0xff, 0xfd}, true},
-      // Reserved.
-      {d2i_ASN1_UNIVERSALSTRING, {0x1c, 0x04, 0x00, 0x10, 0xff, 0xfe}, false},
-      {d2i_ASN1_UNIVERSALSTRING, {0x1c, 0x04, 0x00, 0x10, 0xff, 0xff}, false},
-      // Too high.
-      {d2i_ASN1_UNIVERSALSTRING, {0x1c, 0x04, 0x00, 0x11, 0x00, 0x00}, false},
-      // Surrogates are not characters.
-      {d2i_ASN1_UNIVERSALSTRING, {0x1c, 0x04, 0x00, 0x00, 0xd8, 0}, false},
-      // Truncated codepoint.
-      {d2i_ASN1_UNIVERSALSTRING, {0x1c, 0x03, 0x00, 0x00, 0x00}, false},
-
-      // We interpret T61String as Latin-1, so all inputs are valid.
-      {d2i_ASN1_T61STRING, {0x14, 0x00}, true},
-      {d2i_ASN1_T61STRING, {0x14, 0x01, 0x00}, true},
-  };
-  for (const auto &t : kTests) {
-    SCOPED_TRACE(Bytes(t.in));
-    const uint8_t *inp;
-
-    if (t.d2i != nullptr) {
-      inp = t.in.data();
-      bssl::UniquePtr<ASN1_STRING> str(t.d2i(nullptr, &inp, t.in.size()));
-      EXPECT_EQ(t.valid, str != nullptr);
-    }
-
-    // Also test with the ANY parser.
-    inp = t.in.data();
-    bssl::UniquePtr<ASN1_TYPE> any(d2i_ASN1_TYPE(nullptr, &inp, t.in.size()));
-    EXPECT_EQ(t.valid, any != nullptr);
-  }
-}
-
-// Exhaustively test POSIX time conversions for every day across the millenium.
-TEST(ASN1Test, POSIXTime) {
-  const int kDaysInMonth[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
-
-  // Test the epoch explicitly, to confirm our baseline is correct.
-  struct tm civil_time;
-  ASSERT_TRUE(OPENSSL_posix_to_tm(0, &civil_time));
-  ASSERT_EQ(civil_time.tm_year + 1900, 1970);
-  ASSERT_EQ(civil_time.tm_mon + 1, 1);
-  ASSERT_EQ(civil_time.tm_mday, 1);
-  ASSERT_EQ(civil_time.tm_hour, 0);
-  ASSERT_EQ(civil_time.tm_min, 0);
-  ASSERT_EQ(civil_time.tm_sec, 0);
-
-  int64_t posix_time = -11676096000;  // Sat, 01 Jan 1600 00:00:00 +0000
-  for (int year = 1600; year < 3000; year++) {
-    SCOPED_TRACE(year);
-    bool is_leap_year = (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
-    for (int month = 1; month <= 12; month++) {
-      SCOPED_TRACE(month);
-      int days = kDaysInMonth[month - 1];
-      if (month == 2 && is_leap_year) {
-        days++;
-      }
-      for (int day = 1; day <= days; day++) {
-        SCOPED_TRACE(day);
-        SCOPED_TRACE(posix_time);
-
-        ASSERT_TRUE(OPENSSL_posix_to_tm(posix_time, &civil_time));
-        ASSERT_EQ(civil_time.tm_year + 1900, year);
-        ASSERT_EQ(civil_time.tm_mon + 1, month);
-        ASSERT_EQ(civil_time.tm_mday, day);
-        ASSERT_EQ(civil_time.tm_hour, 0);
-        ASSERT_EQ(civil_time.tm_min, 0);
-        ASSERT_EQ(civil_time.tm_sec, 0);
-
-        int64_t posix_time_computed;
-        ASSERT_TRUE(OPENSSL_tm_to_posix(&civil_time, &posix_time_computed));
-        ASSERT_EQ(posix_time_computed, posix_time);
-
-        // Advance to the next day.
-        posix_time += 24 * 60 * 60;
-      }
-    }
-  }
-}
-
-TEST(ASN1Test, LargeString) {
-  bssl::UniquePtr<ASN1_STRING> str(ASN1_STRING_type_new(V_ASN1_OCTET_STRING));
-  ASSERT_TRUE(str);
-  // Very large strings should be rejected by |ASN1_STRING_set|. Strictly
-  // speaking, this is an invalid call because the buffer does not have that
-  // much size available. |ASN1_STRING_set| should cleanly fail before it
-  // crashes, and actually allocating 512 MiB in a test is likely to break.
-  char b = 0;
-  EXPECT_FALSE(ASN1_STRING_set(str.get(), &b, INT_MAX / 4));
-
-#if defined(OPENSSL_64_BIT)
-  // |ASN1_STRING_set| should tolerate lengths that exceed |int| without
-  // overflow.
-  EXPECT_FALSE(ASN1_STRING_set(str.get(), &b, 1 + (ossl_ssize_t{1} << 48)));
-#endif
-}
-
-static auto TimeToTuple(const tm &t) {
-  return std::make_tuple(t.tm_year, t.tm_mon, t.tm_mday, t.tm_hour, t.tm_min,
-                         t.tm_sec);
-}
-
-TEST(ASN1Test, TimeOverflow) {
-  // Input time is out of range and may overflow internal calculations to shift
-  // |tm_year| and |tm_mon| to a more normal value.
-  tm overflow_year = {};
-  overflow_year.tm_year = INT_MAX - 1899;
-  overflow_year.tm_mday = 1;
-  tm overflow_month = {};
-  overflow_month.tm_mon = INT_MAX;
-  overflow_month.tm_mday = 1;
-  int64_t posix_u64;
-  EXPECT_FALSE(OPENSSL_tm_to_posix(&overflow_year, &posix_u64));
-  EXPECT_FALSE(OPENSSL_tm_to_posix(&overflow_month, &posix_u64));
-  time_t posix;
-  EXPECT_FALSE(OPENSSL_timegm(&overflow_year, &posix));
-  EXPECT_FALSE(OPENSSL_timegm(&overflow_month, &posix));
-  EXPECT_FALSE(
-      OPENSSL_gmtime_adj(&overflow_year, /*offset_day=*/0, /*offset_sec=*/0));
-  EXPECT_FALSE(
-      OPENSSL_gmtime_adj(&overflow_month, /*offset_day=*/0, /*offset_sec=*/0));
-  int days, secs;
-  EXPECT_FALSE(
-      OPENSSL_gmtime_diff(&days, &secs, &overflow_year, &overflow_year));
-  EXPECT_FALSE(
-      OPENSSL_gmtime_diff(&days, &secs, &overflow_month, &overflow_month));
-
-  // Input time is in range, but even adding one second puts it out of range.
-  tm max_time = {};
-  max_time.tm_year = 9999 - 1900;
-  max_time.tm_mon = 12 - 1;
-  max_time.tm_mday = 31;
-  max_time.tm_hour = 23;
-  max_time.tm_min = 59;
-  max_time.tm_sec = 59;
-  tm copy = max_time;
-  EXPECT_TRUE(OPENSSL_gmtime_adj(&copy, /*offset_day=*/0, /*offset_sec=*/0));
-  EXPECT_EQ(TimeToTuple(copy), TimeToTuple(max_time));
-  EXPECT_FALSE(OPENSSL_gmtime_adj(&copy, /*offset_day=*/0, /*offset_sec=*/1));
-
-  // Likewise for the earliest representable time.
-  tm min_time = {};
-  min_time.tm_year = 0 - 1900;
-  min_time.tm_mon = 1 - 1;
-  min_time.tm_mday = 1;
-  min_time.tm_hour = 0;
-  min_time.tm_min = 0;
-  min_time.tm_sec = 0;
-  copy = min_time;
-  EXPECT_TRUE(OPENSSL_gmtime_adj(&copy, /*offset_day=*/0, /*offset_sec=*/0));
-  EXPECT_EQ(TimeToTuple(copy), TimeToTuple(min_time));
-  EXPECT_FALSE(OPENSSL_gmtime_adj(&copy, /*offset_day=*/0, /*offset_sec=*/-1));
-
-  // Test we can offset between the minimum and maximum times.
-  const int64_t kValidTimeRange = 315569519999;
-  copy = min_time;
-  EXPECT_TRUE(OPENSSL_gmtime_adj(&copy, /*offset_day=*/0, kValidTimeRange));
-  EXPECT_EQ(TimeToTuple(copy), TimeToTuple(max_time));
-  EXPECT_TRUE(OPENSSL_gmtime_adj(&copy, /*offset_day=*/0, -kValidTimeRange));
-  EXPECT_EQ(TimeToTuple(copy), TimeToTuple(min_time));
-
-  // The second offset may even exceed kValidTimeRange if it is canceled out by
-  // offset_day.
-  EXPECT_TRUE(OPENSSL_gmtime_adj(&copy, /*offset_day=*/-1,
-                                 kValidTimeRange + 24 * 3600));
-  EXPECT_EQ(TimeToTuple(copy), TimeToTuple(max_time));
-  EXPECT_TRUE(OPENSSL_gmtime_adj(&copy, /*offset_day=*/1,
-                                 -kValidTimeRange - 24 * 3600));
-  EXPECT_EQ(TimeToTuple(copy), TimeToTuple(min_time));
-
-  // Make sure the internal calculations for |OPENSSL_gmtime_adj| stay in
-  // bounds.
-  copy = max_time;
-  EXPECT_FALSE(OPENSSL_gmtime_adj(&copy, INT_MAX, LONG_MAX));
-  copy = min_time;
-  EXPECT_FALSE(OPENSSL_gmtime_adj(&copy, INT_MIN, LONG_MIN));
-}
-
-// The ASN.1 macros do not work on Windows shared library builds, where usage of
-// |OPENSSL_EXPORT| is a bit stricter.
-#if !defined(OPENSSL_WINDOWS) || !defined(BORINGSSL_SHARED_LIBRARY)
-
-typedef struct asn1_linked_list_st {
-  struct asn1_linked_list_st *next;
-} ASN1_LINKED_LIST;
-
-DECLARE_ASN1_ITEM(ASN1_LINKED_LIST)
-DECLARE_ASN1_FUNCTIONS(ASN1_LINKED_LIST)
-
-ASN1_SEQUENCE(ASN1_LINKED_LIST) = {
-    ASN1_OPT(ASN1_LINKED_LIST, next, ASN1_LINKED_LIST),
-} ASN1_SEQUENCE_END(ASN1_LINKED_LIST)
-
-IMPLEMENT_ASN1_FUNCTIONS(ASN1_LINKED_LIST)
-
-static bool MakeLinkedList(bssl::UniquePtr<uint8_t> *out, size_t *out_len,
-                           size_t count) {
-  bssl::ScopedCBB cbb;
-  std::vector<CBB> cbbs(count);
-  if (!CBB_init(cbb.get(), 2 * count) ||
-      !CBB_add_asn1(cbb.get(), &cbbs[0], CBS_ASN1_SEQUENCE)) {
-    return false;
-  }
-  for (size_t i = 1; i < count; i++) {
-    if (!CBB_add_asn1(&cbbs[i - 1], &cbbs[i], CBS_ASN1_SEQUENCE)) {
-      return false;
-    }
-  }
-  uint8_t *ptr;
-  if (!CBB_finish(cbb.get(), &ptr, out_len)) {
-    return false;
-  }
-  out->reset(ptr);
-  return true;
-}
-
-TEST(ASN1Test, Recursive) {
-  bssl::UniquePtr<uint8_t> data;
-  size_t len;
-
-  // Sanity-check that MakeLinkedList can be parsed.
-  ASSERT_TRUE(MakeLinkedList(&data, &len, 5));
-  const uint8_t *ptr = data.get();
-  ASN1_LINKED_LIST *list = d2i_ASN1_LINKED_LIST(nullptr, &ptr, len);
-  EXPECT_TRUE(list);
-  ASN1_LINKED_LIST_free(list);
-
-  // Excessively deep structures are rejected.
-  ASSERT_TRUE(MakeLinkedList(&data, &len, 100));
-  ptr = data.get();
-  list = d2i_ASN1_LINKED_LIST(nullptr, &ptr, len);
-  EXPECT_FALSE(list);
-  // Note checking the error queue here does not work. The error "stack trace"
-  // is too deep, so the |ASN1_R_NESTED_TOO_DEEP| entry drops off the queue.
-  ASN1_LINKED_LIST_free(list);
-}
-
-struct IMPLICIT_CHOICE {
-  ASN1_STRING *string;
-};
-
-DECLARE_ASN1_FUNCTIONS(IMPLICIT_CHOICE)
-
-ASN1_SEQUENCE(IMPLICIT_CHOICE) = {
-    ASN1_IMP(IMPLICIT_CHOICE, string, DIRECTORYSTRING, 0),
-} ASN1_SEQUENCE_END(IMPLICIT_CHOICE)
-
-IMPLEMENT_ASN1_FUNCTIONS(IMPLICIT_CHOICE)
-
-// Test that the ASN.1 templates reject types with implicitly-tagged CHOICE
-// types.
-TEST(ASN1Test, ImplicitChoice) {
-  // Serializing a type with an implicitly tagged CHOICE should fail.
-  std::unique_ptr<IMPLICIT_CHOICE, decltype(&IMPLICIT_CHOICE_free)> obj(
-      IMPLICIT_CHOICE_new(), IMPLICIT_CHOICE_free);
-  EXPECT_EQ(-1, i2d_IMPLICIT_CHOICE(obj.get(), nullptr));
-
-  // An implicitly-tagged CHOICE is an error. Depending on the implementation,
-  // it may be misinterpreted as without the tag, or as clobbering the CHOICE
-  // tag. Test both inputs and ensure they fail.
-
-  // SEQUENCE { UTF8String {} }
-  static const uint8_t kInput1[] = {0x30, 0x02, 0x0c, 0x00};
-  const uint8_t *ptr = kInput1;
-  EXPECT_EQ(nullptr, d2i_IMPLICIT_CHOICE(nullptr, &ptr, sizeof(kInput1)));
-
-  // SEQUENCE { [0 PRIMITIVE] {} }
-  static const uint8_t kInput2[] = {0x30, 0x02, 0x80, 0x00};
-  ptr = kInput2;
-  EXPECT_EQ(nullptr, d2i_IMPLICIT_CHOICE(nullptr, &ptr, sizeof(kInput2)));
-}
-
-struct REQUIRED_FIELD {
-  ASN1_INTEGER *value;
-  ASN1_INTEGER *value_imp;
-  ASN1_INTEGER *value_exp;
-  STACK_OF(ASN1_INTEGER) *seq;
-  STACK_OF(ASN1_INTEGER) *seq_imp;
-  STACK_OF(ASN1_INTEGER) *seq_exp;
-  ASN1_NULL *null;
-  ASN1_NULL *null_imp;
-  ASN1_NULL *null_exp;
-};
-
-DECLARE_ASN1_FUNCTIONS(REQUIRED_FIELD)
-ASN1_SEQUENCE(REQUIRED_FIELD) = {
-    ASN1_SIMPLE(REQUIRED_FIELD, value, ASN1_INTEGER),
-    ASN1_IMP(REQUIRED_FIELD, value_imp, ASN1_INTEGER, 0),
-    ASN1_EXP(REQUIRED_FIELD, value_exp, ASN1_INTEGER, 1),
-    ASN1_SEQUENCE_OF(REQUIRED_FIELD, seq, ASN1_INTEGER),
-    ASN1_IMP_SEQUENCE_OF(REQUIRED_FIELD, seq_imp, ASN1_INTEGER, 2),
-    ASN1_EXP_SEQUENCE_OF(REQUIRED_FIELD, seq_exp, ASN1_INTEGER, 3),
-    ASN1_SIMPLE(REQUIRED_FIELD, null, ASN1_NULL),
-    ASN1_IMP(REQUIRED_FIELD, null_imp, ASN1_NULL, 4),
-    ASN1_EXP(REQUIRED_FIELD, null_exp, ASN1_NULL, 5),
-} ASN1_SEQUENCE_END(REQUIRED_FIELD)
-IMPLEMENT_ASN1_FUNCTIONS(REQUIRED_FIELD)
-
-// Test that structures with missing required fields cannot be serialized. Test
-// the full combination of tagging and SEQUENCE OF.
-TEST(ASN1Test, MissingRequiredField) {
-  EXPECT_EQ(-1, i2d_REQUIRED_FIELD(nullptr, nullptr));
-
-  std::unique_ptr<REQUIRED_FIELD, decltype(&REQUIRED_FIELD_free)> obj(
-      nullptr, REQUIRED_FIELD_free);
-  for (auto field : {&REQUIRED_FIELD::value, &REQUIRED_FIELD::value_imp,
-                     &REQUIRED_FIELD::value_exp}) {
-    obj.reset(REQUIRED_FIELD_new());
-    ASSERT_TRUE(obj);
-    ASN1_INTEGER_free((*obj).*field);
-    (*obj).*field = nullptr;
-    EXPECT_EQ(-1, i2d_REQUIRED_FIELD(obj.get(), nullptr));
-  }
-
-  for (auto field : {&REQUIRED_FIELD::seq, &REQUIRED_FIELD::seq_imp,
-                     &REQUIRED_FIELD::seq_exp}) {
-    obj.reset(REQUIRED_FIELD_new());
-    ASSERT_TRUE(obj);
-    sk_ASN1_INTEGER_pop_free((*obj).*field, ASN1_INTEGER_free);
-    (*obj).*field = nullptr;
-    EXPECT_EQ(-1, i2d_REQUIRED_FIELD(obj.get(), nullptr));
-  }
-
-  for (auto field : {&REQUIRED_FIELD::null, &REQUIRED_FIELD::null_imp,
-                     &REQUIRED_FIELD::null_exp}) {
-    obj.reset(REQUIRED_FIELD_new());
-    ASSERT_TRUE(obj);
-    (*obj).*field = nullptr;
-    EXPECT_EQ(-1, i2d_REQUIRED_FIELD(obj.get(), nullptr));
-  }
-}
-
-struct BOOLEANS {
-  ASN1_BOOLEAN required;
-  ASN1_BOOLEAN optional;
-  ASN1_BOOLEAN default_true;
-  ASN1_BOOLEAN default_false;
-};
-
-DECLARE_ASN1_FUNCTIONS(BOOLEANS)
-ASN1_SEQUENCE(BOOLEANS) = {
-    ASN1_SIMPLE(BOOLEANS, required, ASN1_BOOLEAN),
-    ASN1_IMP_OPT(BOOLEANS, optional, ASN1_BOOLEAN, 1),
-    // Although not actually optional, |ASN1_TBOOLEAN| and |ASN1_FBOOLEAN| need
-    // to be marked optional in the template.
-    ASN1_IMP_OPT(BOOLEANS, default_true, ASN1_TBOOLEAN, 2),
-    ASN1_IMP_OPT(BOOLEANS, default_false, ASN1_FBOOLEAN, 3),
-} ASN1_SEQUENCE_END(BOOLEANS)
-IMPLEMENT_ASN1_FUNCTIONS(BOOLEANS)
-
-TEST(ASN1Test, OptionalAndDefaultBooleans) {
-  std::unique_ptr<BOOLEANS, decltype(&BOOLEANS_free)> obj(nullptr,
-                                                          BOOLEANS_free);
-
-  // A default-constructed object should use, respectively, omitted, omitted,
-  // TRUE, FALSE.
-  //
-  // TODO(davidben): Is the first one a bug? It seems more consistent for a
-  // required BOOLEAN default to FALSE. |FOO_new| typically default-initializes
-  // fields valid states. (Though there are exceptions. CHOICE, ANY, and OBJECT
-  // IDENTIFIER are default-initialized to something invalid.)
-  obj.reset(BOOLEANS_new());
-  ASSERT_TRUE(obj);
-  EXPECT_EQ(obj->required, ASN1_BOOLEAN_NONE);
-  EXPECT_EQ(obj->optional, ASN1_BOOLEAN_NONE);
-  EXPECT_EQ(obj->default_true, ASN1_BOOLEAN_TRUE);
-  EXPECT_EQ(obj->default_false, ASN1_BOOLEAN_FALSE);
-
-  // Trying to serialize this should fail, because |obj->required| is omitted.
-  EXPECT_EQ(-1, i2d_BOOLEANS(obj.get(), nullptr));
-
-  // Otherwise, this object is serializable. Most fields are omitted, due to
-  // them being optional or defaulted.
-  static const uint8_t kFieldsOmitted[] = {0x30, 0x03, 0x01, 0x01, 0x00};
-  obj->required = 0;
-  TestSerialize(obj.get(), i2d_BOOLEANS, kFieldsOmitted);
-
-  const uint8_t *der = kFieldsOmitted;
-  obj.reset(d2i_BOOLEANS(nullptr, &der, sizeof(kFieldsOmitted)));
-  ASSERT_TRUE(obj);
-  EXPECT_EQ(obj->required, ASN1_BOOLEAN_FALSE);
-  EXPECT_EQ(obj->optional, ASN1_BOOLEAN_NONE);
-  EXPECT_EQ(obj->default_true, ASN1_BOOLEAN_TRUE);
-  EXPECT_EQ(obj->default_false, ASN1_BOOLEAN_FALSE);
-
-  // Include the optinonal fields instead.
-  static const uint8_t kFieldsIncluded[] = {0x30, 0x0c, 0x01, 0x01, 0xff,
-                                            0x81, 0x01, 0x00, 0x82, 0x01,
-                                            0x00, 0x83, 0x01, 0xff};
-  obj->required = ASN1_BOOLEAN_TRUE;
-  obj->optional = ASN1_BOOLEAN_FALSE;
-  obj->default_true = ASN1_BOOLEAN_FALSE;
-  obj->default_false = ASN1_BOOLEAN_TRUE;
-  TestSerialize(obj.get(), i2d_BOOLEANS, kFieldsIncluded);
-
-  der = kFieldsIncluded;
-  obj.reset(d2i_BOOLEANS(nullptr, &der, sizeof(kFieldsIncluded)));
-  ASSERT_TRUE(obj);
-  EXPECT_EQ(obj->required, ASN1_BOOLEAN_TRUE);
-  EXPECT_EQ(obj->optional, ASN1_BOOLEAN_FALSE);
-  EXPECT_EQ(obj->default_true, ASN1_BOOLEAN_FALSE);
-  EXPECT_EQ(obj->default_false, ASN1_BOOLEAN_TRUE);
-
-  // TODO(https://crbug.com/boringssl/354): Reject explicit DEFAULTs.
-}
-
-// EXPLICIT_BOOLEAN is a [1] EXPLICIT BOOLEAN.
-ASN1_ITEM_TEMPLATE(EXPLICIT_BOOLEAN) = ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_EXPLICIT,
-                                                             1,
-                                                             EXPLICIT_BOOLEAN,
-                                                             ASN1_BOOLEAN)
-ASN1_ITEM_TEMPLATE_END(EXPLICIT_BOOLEAN)
-
-// EXPLICIT_OCTET_STRING is a [2] EXPLICIT OCTET STRING.
-ASN1_ITEM_TEMPLATE(EXPLICIT_OCTET_STRING) = ASN1_EX_TEMPLATE_TYPE(
-    ASN1_TFLG_EXPLICIT, 2, EXPLICIT_OCTET_STRING, ASN1_OCTET_STRING)
-ASN1_ITEM_TEMPLATE_END(EXPLICIT_OCTET_STRING)
-
-// DOUBLY_TAGGED is
-//   SEQUENCE {
-//     b   [3] EXPLICIT [1] EXPLICIT BOOLEAN OPTIONAL,
-//     oct [4] EXPLICIT [2] EXPLICIT OCTET STRING OPTIONAL }
-// with explicit tagging.
-struct DOUBLY_TAGGED {
-  ASN1_BOOLEAN b;
-  ASN1_OCTET_STRING *oct;
-};
-
-DECLARE_ASN1_FUNCTIONS(DOUBLY_TAGGED)
-ASN1_SEQUENCE(DOUBLY_TAGGED) = {
-    ASN1_EXP_OPT(DOUBLY_TAGGED, b, EXPLICIT_BOOLEAN, 3),
-    ASN1_EXP_OPT(DOUBLY_TAGGED, oct, EXPLICIT_OCTET_STRING, 4),
-} ASN1_SEQUENCE_END(DOUBLY_TAGGED)
-IMPLEMENT_ASN1_FUNCTIONS(DOUBLY_TAGGED)
-
-// Test that optional fields with two layers of explicit tagging are correctly
-// handled.
-TEST(ASN1Test, DoublyTagged) {
-  std::unique_ptr<DOUBLY_TAGGED, decltype(&DOUBLY_TAGGED_free)> obj(
-      nullptr, DOUBLY_TAGGED_free);
-
-  // Both fields missing.
-  static const uint8_t kOmitted[] = {0x30, 0x00};
-  const uint8_t *inp = kOmitted;
-  obj.reset(d2i_DOUBLY_TAGGED(nullptr, &inp, sizeof(kOmitted)));
-  ASSERT_TRUE(obj);
-  EXPECT_EQ(obj->b, -1);
-  EXPECT_FALSE(obj->oct);
-  TestSerialize(obj.get(), i2d_DOUBLY_TAGGED, kOmitted);
-
-  // Both fields present, true and the empty string.
-  static const uint8_t kTrueEmpty[] = {0x30, 0x0d, 0xa3, 0x05, 0xa1,
-                                       0x03, 0x01, 0x01, 0xff, 0xa4,
-                                       0x04, 0xa2, 0x02, 0x04, 0x00};
-  inp = kTrueEmpty;
-  obj.reset(d2i_DOUBLY_TAGGED(nullptr, &inp, sizeof(kTrueEmpty)));
-  ASSERT_TRUE(obj);
-  EXPECT_EQ(obj->b, 0xff);
-  ASSERT_TRUE(obj->oct);
-  EXPECT_EQ(ASN1_STRING_length(obj->oct), 0);
-  TestSerialize(obj.get(), i2d_DOUBLY_TAGGED, kTrueEmpty);
-}
-
-#define CHOICE_TYPE_OCT 0
-#define CHOICE_TYPE_BOOL 1
-
-struct CHOICE_TYPE {
-  int type;
-  union {
-    ASN1_OCTET_STRING *oct;
-    ASN1_BOOLEAN b;
-  } value;
-};
-
-DECLARE_ASN1_FUNCTIONS(CHOICE_TYPE)
-ASN1_CHOICE(CHOICE_TYPE) = {
-    ASN1_SIMPLE(CHOICE_TYPE, value.oct, ASN1_OCTET_STRING),
-    ASN1_SIMPLE(CHOICE_TYPE, value.b, ASN1_BOOLEAN),
-} ASN1_CHOICE_END(CHOICE_TYPE)
-IMPLEMENT_ASN1_FUNCTIONS(CHOICE_TYPE)
-
-struct OPTIONAL_CHOICE {
-  CHOICE_TYPE *choice;
-};
-
-DECLARE_ASN1_FUNCTIONS(OPTIONAL_CHOICE)
-ASN1_SEQUENCE(OPTIONAL_CHOICE) = {
-    ASN1_OPT(OPTIONAL_CHOICE, choice, CHOICE_TYPE),
-} ASN1_SEQUENCE_END(OPTIONAL_CHOICE)
-IMPLEMENT_ASN1_FUNCTIONS(OPTIONAL_CHOICE)
-
-TEST(ASN1Test, OptionalChoice) {
-  std::unique_ptr<OPTIONAL_CHOICE, decltype(&OPTIONAL_CHOICE_free)> obj(
-      nullptr, OPTIONAL_CHOICE_free);
-
-  // Value omitted.
-  static const uint8_t kOmitted[] = {0x30, 0x00};
-  const uint8_t *inp = kOmitted;
-  obj.reset(d2i_OPTIONAL_CHOICE(nullptr, &inp, sizeof(kOmitted)));
-  ASSERT_TRUE(obj);
-  EXPECT_FALSE(obj->choice);
-  TestSerialize(obj.get(), i2d_OPTIONAL_CHOICE, kOmitted);
-
-  // Value is present as an OCTET STRING.
-  static const uint8_t kOct[] = {0x30, 0x02, 0x04, 0x00};
-  inp = kOct;
-  obj.reset(d2i_OPTIONAL_CHOICE(nullptr, &inp, sizeof(kOct)));
-  ASSERT_TRUE(obj);
-  ASSERT_TRUE(obj->choice);
-  ASSERT_EQ(obj->choice->type, CHOICE_TYPE_OCT);
-  ASSERT_TRUE(obj->choice->value.oct);
-  EXPECT_EQ(ASN1_STRING_length(obj->choice->value.oct), 0);
-  TestSerialize(obj.get(), i2d_OPTIONAL_CHOICE, kOct);
-
-  // Value is present as TRUE.
-  static const uint8_t kTrue[] = {0x30, 0x03, 0x01, 0x01, 0xff};
-  inp = kTrue;
-  obj.reset(d2i_OPTIONAL_CHOICE(nullptr, &inp, sizeof(kTrue)));
-  ASSERT_TRUE(obj);
-  ASSERT_TRUE(obj->choice);
-  ASSERT_EQ(obj->choice->type, CHOICE_TYPE_BOOL);
-  EXPECT_EQ(obj->choice->value.b, ASN1_BOOLEAN_TRUE);
-  TestSerialize(obj.get(), i2d_OPTIONAL_CHOICE, kTrue);
-}
-
-struct EMBED_X509_ALGOR {
-  X509_ALGOR *simple;
-  X509_ALGOR *opt;
-  STACK_OF(X509_ALGOR) *seq;
-};
-
-struct EMBED_X509_EXTENSION {
-  X509_EXTENSION *simple;
-  X509_EXTENSION *opt;
-  STACK_OF(X509_EXTENSION) *seq;
-};
-
-struct EMBED_X509_NAME {
-  X509_NAME *simple;
-  X509_NAME *opt;
-  STACK_OF(X509_NAME) *seq;
-};
-
-struct EMBED_X509 {
-  X509 *simple;
-  X509 *opt;
-  STACK_OF(X509) *seq;
-};
-
-DECLARE_ASN1_FUNCTIONS(EMBED_X509_ALGOR)
-ASN1_SEQUENCE(EMBED_X509_ALGOR) = {
-    ASN1_SIMPLE(EMBED_X509_ALGOR, simple, X509_ALGOR),
-    ASN1_EXP_OPT(EMBED_X509_ALGOR, opt, X509_ALGOR, 0),
-    ASN1_IMP_SEQUENCE_OF_OPT(EMBED_X509_ALGOR, seq, X509_ALGOR, 1),
-} ASN1_SEQUENCE_END(EMBED_X509_ALGOR)
-IMPLEMENT_ASN1_FUNCTIONS(EMBED_X509_ALGOR)
-
-DECLARE_ASN1_FUNCTIONS(EMBED_X509_NAME)
-ASN1_SEQUENCE(EMBED_X509_NAME) = {
-    ASN1_SIMPLE(EMBED_X509_NAME, simple, X509_NAME),
-    ASN1_EXP_OPT(EMBED_X509_NAME, opt, X509_NAME, 0),
-    ASN1_IMP_SEQUENCE_OF_OPT(EMBED_X509_NAME, seq, X509_NAME, 1),
-} ASN1_SEQUENCE_END(EMBED_X509_NAME)
-IMPLEMENT_ASN1_FUNCTIONS(EMBED_X509_NAME)
-
-DECLARE_ASN1_FUNCTIONS(EMBED_X509_EXTENSION)
-ASN1_SEQUENCE(EMBED_X509_EXTENSION) = {
-    ASN1_SIMPLE(EMBED_X509_EXTENSION, simple, X509_EXTENSION),
-    ASN1_EXP_OPT(EMBED_X509_EXTENSION, opt, X509_EXTENSION, 0),
-    ASN1_IMP_SEQUENCE_OF_OPT(EMBED_X509_EXTENSION, seq, X509_EXTENSION, 1),
-} ASN1_SEQUENCE_END(EMBED_X509_EXTENSION)
-IMPLEMENT_ASN1_FUNCTIONS(EMBED_X509_EXTENSION)
-
-DECLARE_ASN1_FUNCTIONS(EMBED_X509)
-ASN1_SEQUENCE(EMBED_X509) = {
-    ASN1_SIMPLE(EMBED_X509, simple, X509),
-    ASN1_EXP_OPT(EMBED_X509, opt, X509, 0),
-    ASN1_IMP_SEQUENCE_OF_OPT(EMBED_X509, seq, X509, 1),
-} ASN1_SEQUENCE_END(EMBED_X509)
-IMPLEMENT_ASN1_FUNCTIONS(EMBED_X509)
-
-template <typename EmbedT, typename T, typename MaybeConstT, typename StackT>
-void TestEmbedType(bssl::Span<const uint8_t> inp,
-                   int (*i2d)(MaybeConstT *, uint8_t **),
-                   EmbedT *(*embed_new)(), void (*embed_free)(EmbedT *),
-                   EmbedT *(*d2i_embed)(EmbedT **, const uint8_t **, long),
-                   int (*i2d_embed)(EmbedT *, uint8_t **),
-                   size_t (*sk_num)(const StackT *),
-                   T *(*sk_value)(const StackT *, size_t)) {
-  std::unique_ptr<EmbedT, decltype(embed_free)> obj(nullptr, embed_free);
-
-  // Test only the first field present.
-  bssl::ScopedCBB cbb;
-  ASSERT_TRUE(CBB_init(cbb.get(), 64));
-  ASSERT_TRUE(CBB_add_asn1_element(cbb.get(), CBS_ASN1_SEQUENCE, inp.data(),
-                                   inp.size()));
-  ASSERT_TRUE(CBB_flush(cbb.get()));
-  const uint8_t *ptr = CBB_data(cbb.get());
-  obj.reset(d2i_embed(nullptr, &ptr, CBB_len(cbb.get())));
-  ASSERT_TRUE(obj);
-  ASSERT_TRUE(obj->simple);
-  // Test the field was parsed correctly by reserializing it.
-  TestSerialize(obj->simple, i2d, inp);
-  EXPECT_FALSE(obj->opt);
-  EXPECT_FALSE(obj->seq);
-  TestSerialize(obj.get(), i2d_embed,
-                {CBB_data(cbb.get()), CBB_len(cbb.get())});
-
-  // Test all fields present.
-  cbb.Reset();
-  ASSERT_TRUE(CBB_init(cbb.get(), 64));
-  CBB seq;
-  ASSERT_TRUE(CBB_add_asn1(cbb.get(), &seq, CBS_ASN1_SEQUENCE));
-  ASSERT_TRUE(CBB_add_bytes(&seq, inp.data(), inp.size()));
-  CBB child;
-  ASSERT_TRUE(CBB_add_asn1(
-      &seq, &child, CBS_ASN1_CONTEXT_SPECIFIC | CBS_ASN1_CONSTRUCTED | 0));
-  ASSERT_TRUE(CBB_add_bytes(&child, inp.data(), inp.size()));
-  ASSERT_TRUE(CBB_add_asn1(
-      &seq, &child, CBS_ASN1_CONTEXT_SPECIFIC | CBS_ASN1_CONSTRUCTED | 1));
-  ASSERT_TRUE(CBB_add_bytes(&child, inp.data(), inp.size()));
-  ASSERT_TRUE(CBB_add_bytes(&child, inp.data(), inp.size()));
-  ASSERT_TRUE(CBB_flush(cbb.get()));
-  ptr = CBB_data(cbb.get());
-  obj.reset(d2i_embed(nullptr, &ptr, CBB_len(cbb.get())));
-  ASSERT_TRUE(obj);
-  ASSERT_TRUE(obj->simple);
-  TestSerialize(obj->simple, i2d, inp);
-  ASSERT_TRUE(obj->opt);
-  TestSerialize(obj->opt, i2d, inp);
-  ASSERT_EQ(sk_num(obj->seq), 2u);
-  TestSerialize(sk_value(obj->seq, 0), i2d, inp);
-  TestSerialize(sk_value(obj->seq, 1), i2d, inp);
-  TestSerialize(obj.get(), i2d_embed,
-                {CBB_data(cbb.get()), CBB_len(cbb.get())});
-}
-
-// Test that X.509 types defined in this library can be embedded into other
-// types, as we rewrite them away from the templating system.
-TEST(ASN1Test, EmbedTypes) {
-  static const uint8_t kTestAlg[] = {0x30, 0x09, 0x06, 0x07, 0x2a, 0x86,
-                                     0x48, 0xce, 0x3d, 0x04, 0x01};
-  TestEmbedType(kTestAlg, i2d_X509_ALGOR, EMBED_X509_ALGOR_new,
-                EMBED_X509_ALGOR_free, d2i_EMBED_X509_ALGOR,
-                i2d_EMBED_X509_ALGOR, sk_X509_ALGOR_num, sk_X509_ALGOR_value);
-
-  static const uint8_t kTestName[] = {
-      0x30, 0x45, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13,
-      0x02, 0x41, 0x55, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08,
-      0x0c, 0x0a, 0x53, 0x6f, 0x6d, 0x65, 0x2d, 0x53, 0x74, 0x61, 0x74, 0x65,
-      0x31, 0x21, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x18, 0x49,
-      0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x20, 0x57, 0x69, 0x64, 0x67,
-      0x69, 0x74, 0x73, 0x20, 0x50, 0x74, 0x79, 0x20, 0x4c, 0x74, 0x64};
-  TestEmbedType(kTestName, i2d_X509_NAME, EMBED_X509_NAME_new,
-                EMBED_X509_NAME_free, d2i_EMBED_X509_NAME, i2d_EMBED_X509_NAME,
-                sk_X509_NAME_num, sk_X509_NAME_value);
-
-  static const uint8_t kTestExtension[] = {0x30, 0x0c, 0x06, 0x03, 0x55,
-                                           0x1d, 0x13, 0x04, 0x05, 0x30,
-                                           0x03, 0x01, 0x01, 0xf};
-  TestEmbedType(kTestExtension, i2d_X509_EXTENSION, EMBED_X509_EXTENSION_new,
-                EMBED_X509_EXTENSION_free, d2i_EMBED_X509_EXTENSION,
-                i2d_EMBED_X509_EXTENSION, sk_X509_EXTENSION_num,
-                sk_X509_EXTENSION_value);
-
-  static const uint8_t kTestCert[] = {
-      0x30, 0x82, 0x01, 0xcf, 0x30, 0x82, 0x01, 0x76, 0xa0, 0x03, 0x02, 0x01,
-      0x02, 0x02, 0x09, 0x00, 0xd9, 0x4c, 0x04, 0xda, 0x49, 0x7d, 0xbf, 0xeb,
-      0x30, 0x09, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x01, 0x30,
-      0x45, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02,
-      0x41, 0x55, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0c,
-      0x0a, 0x53, 0x6f, 0x6d, 0x65, 0x2d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x31,
-      0x21, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x18, 0x49, 0x6e,
-      0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x20, 0x57, 0x69, 0x64, 0x67, 0x69,
-      0x74, 0x73, 0x20, 0x50, 0x74, 0x79, 0x20, 0x4c, 0x74, 0x64, 0x30, 0x1e,
-      0x17, 0x0d, 0x31, 0x34, 0x30, 0x34, 0x32, 0x33, 0x32, 0x33, 0x32, 0x31,
-      0x35, 0x37, 0x5a, 0x17, 0x0d, 0x31, 0x34, 0x30, 0x35, 0x32, 0x33, 0x32,
-      0x33, 0x32, 0x31, 0x35, 0x37, 0x5a, 0x30, 0x45, 0x31, 0x0b, 0x30, 0x09,
-      0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x41, 0x55, 0x31, 0x13, 0x30,
-      0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0c, 0x0a, 0x53, 0x6f, 0x6d, 0x65,
-      0x2d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x31, 0x21, 0x30, 0x1f, 0x06, 0x03,
-      0x55, 0x04, 0x0a, 0x0c, 0x18, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65,
-      0x74, 0x20, 0x57, 0x69, 0x64, 0x67, 0x69, 0x74, 0x73, 0x20, 0x50, 0x74,
-      0x79, 0x20, 0x4c, 0x74, 0x64, 0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2a,
-      0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce,
-      0x3d, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, 0x04, 0xe6, 0x2b, 0x69, 0xe2,
-      0xbf, 0x65, 0x9f, 0x97, 0xbe, 0x2f, 0x1e, 0x0d, 0x94, 0x8a, 0x4c, 0xd5,
-      0x97, 0x6b, 0xb7, 0xa9, 0x1e, 0x0d, 0x46, 0xfb, 0xdd, 0xa9, 0xa9, 0x1e,
-      0x9d, 0xdc, 0xba, 0x5a, 0x01, 0xe7, 0xd6, 0x97, 0xa8, 0x0a, 0x18, 0xf9,
-      0xc3, 0xc4, 0xa3, 0x1e, 0x56, 0xe2, 0x7c, 0x83, 0x48, 0xdb, 0x16, 0x1a,
-      0x1c, 0xf5, 0x1d, 0x7e, 0xf1, 0x94, 0x2d, 0x4b, 0xcf, 0x72, 0x22, 0xc1,
-      0xa3, 0x50, 0x30, 0x4e, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04,
-      0x16, 0x04, 0x14, 0xab, 0x84, 0xd2, 0xac, 0xab, 0x95, 0xf0, 0x82, 0x4e,
-      0x16, 0x78, 0x07, 0x55, 0x57, 0x5f, 0xe4, 0x26, 0x8d, 0x82, 0xd1, 0x30,
-      0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14,
-      0xab, 0x84, 0xd2, 0xac, 0xab, 0x95, 0xf0, 0x82, 0x4e, 0x16, 0x78, 0x07,
-      0x55, 0x57, 0x5f, 0xe4, 0x26, 0x8d, 0x82, 0xd1, 0x30, 0x0c, 0x06, 0x03,
-      0x55, 0x1d, 0x13, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x09,
-      0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x01, 0x03, 0x48, 0x00,
-      0x30, 0x45, 0x02, 0x21, 0x00, 0xf2, 0xa0, 0x35, 0x5e, 0x51, 0x3a, 0x36,
-      0xc3, 0x82, 0x79, 0x9b, 0xee, 0x27, 0x50, 0x85, 0x8e, 0x70, 0x06, 0x74,
-      0x95, 0x57, 0xd2, 0x29, 0x74, 0x00, 0xf4, 0xbe, 0x15, 0x87, 0x5d, 0xc4,
-      0x07, 0x02, 0x20, 0x7c, 0x1e, 0x79, 0x14, 0x6a, 0x21, 0x83, 0xf0, 0x7a,
-      0x74, 0x68, 0x79, 0x5f, 0x14, 0x99, 0x9a, 0x68, 0xb4, 0xf1, 0xcb, 0x9e,
-      0x15, 0x5e, 0xe6, 0x1f, 0x32, 0x52, 0x61, 0x5e, 0x75, 0xc9, 0x14};
-  TestEmbedType(kTestCert, i2d_X509, EMBED_X509_new, EMBED_X509_free,
-                d2i_EMBED_X509, i2d_EMBED_X509, sk_X509_num, sk_X509_value);
-}
-
-#endif  // !WINDOWS || !SHARED_LIBRARY
diff --git a/src/crypto/asn1/asn_pack.cc b/src/crypto/asn1/asn_pack.cc
deleted file mode 100644
index 2d66061..0000000
--- a/src/crypto/asn1/asn_pack.cc
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved.
-//
-// 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
-//
-//     https://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 <openssl/asn1.h>
-
-#include <openssl/err.h>
-#include <openssl/mem.h>
-
-
-ASN1_STRING *ASN1_item_pack(void *obj, const ASN1_ITEM *it, ASN1_STRING **out) {
-  uint8_t *new_data = NULL;
-  int len = ASN1_item_i2d(reinterpret_cast<ASN1_VALUE *>(obj), &new_data, it);
-  if (len <= 0) {
-    OPENSSL_PUT_ERROR(ASN1, ASN1_R_ENCODE_ERROR);
-    return NULL;
-  }
-
-  ASN1_STRING *ret = NULL;
-  if (out == NULL || *out == NULL) {
-    ret = ASN1_STRING_new();
-    if (ret == NULL) {
-      OPENSSL_free(new_data);
-      return NULL;
-    }
-  } else {
-    ret = *out;
-  }
-
-  ASN1_STRING_set0(ret, new_data, len);
-  if (out != NULL) {
-    *out = ret;
-  }
-  return ret;
-}
-
-void *ASN1_item_unpack(const ASN1_STRING *oct, const ASN1_ITEM *it) {
-  const unsigned char *p = oct->data;
-  void *ret = ASN1_item_d2i(NULL, &p, oct->length, it);
-  if (ret == NULL || p != oct->data + oct->length) {
-    OPENSSL_PUT_ERROR(ASN1, ASN1_R_DECODE_ERROR);
-    ASN1_item_free(reinterpret_cast<ASN1_VALUE *>(ret), it);
-    return NULL;
-  }
-  return ret;
-}
diff --git a/src/crypto/asn1/f_int.cc b/src/crypto/asn1/f_int.cc
deleted file mode 100644
index e842e79..0000000
--- a/src/crypto/asn1/f_int.cc
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
-//
-// 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
-//
-//     https://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 <openssl/asn1.h>
-
-#include <openssl/bio.h>
-
-int i2a_ASN1_INTEGER(BIO *bp, const ASN1_INTEGER *a) {
-  int i, n = 0;
-  static const char *h = "0123456789ABCDEF";
-  char buf[2];
-
-  if (a == NULL) {
-    return 0;
-  }
-
-  if (a->type & V_ASN1_NEG) {
-    if (BIO_write(bp, "-", 1) != 1) {
-      goto err;
-    }
-    n = 1;
-  }
-
-  if (a->length == 0) {
-    if (BIO_write(bp, "00", 2) != 2) {
-      goto err;
-    }
-    n += 2;
-  } else {
-    for (i = 0; i < a->length; i++) {
-      if ((i != 0) && (i % 35 == 0)) {
-        if (BIO_write(bp, "\\\n", 2) != 2) {
-          goto err;
-        }
-        n += 2;
-      }
-      buf[0] = h[((unsigned char)a->data[i] >> 4) & 0x0f];
-      buf[1] = h[((unsigned char)a->data[i]) & 0x0f];
-      if (BIO_write(bp, buf, 2) != 2) {
-        goto err;
-      }
-      n += 2;
-    }
-  }
-  return n;
-err:
-  return -1;
-}
-
-int i2a_ASN1_ENUMERATED(BIO *bp, const ASN1_ENUMERATED *a) {
-  return i2a_ASN1_INTEGER(bp, a);
-}
diff --git a/src/crypto/asn1/f_string.cc b/src/crypto/asn1/f_string.cc
deleted file mode 100644
index 04cf751..0000000
--- a/src/crypto/asn1/f_string.cc
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
-//
-// 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
-//
-//     https://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 <openssl/asn1.h>
-
-#include <openssl/bio.h>
-
-int i2a_ASN1_STRING(BIO *bp, const ASN1_STRING *a, int type) {
-  int i, n = 0;
-  static const char *h = "0123456789ABCDEF";
-  char buf[2];
-
-  if (a == NULL) {
-    return 0;
-  }
-
-  if (a->length == 0) {
-    if (BIO_write(bp, "0", 1) != 1) {
-      goto err;
-    }
-    n = 1;
-  } else {
-    for (i = 0; i < a->length; i++) {
-      if ((i != 0) && (i % 35 == 0)) {
-        if (BIO_write(bp, "\\\n", 2) != 2) {
-          goto err;
-        }
-        n += 2;
-      }
-      buf[0] = h[((unsigned char)a->data[i] >> 4) & 0x0f];
-      buf[1] = h[((unsigned char)a->data[i]) & 0x0f];
-      if (BIO_write(bp, buf, 2) != 2) {
-        goto err;
-      }
-      n += 2;
-    }
-  }
-  return n;
-err:
-  return -1;
-}
diff --git a/src/crypto/asn1/internal.h b/src/crypto/asn1/internal.h
deleted file mode 100644
index 2baeb12..0000000
--- a/src/crypto/asn1/internal.h
+++ /dev/null
@@ -1,238 +0,0 @@
-// Copyright 2005-2016 The OpenSSL Project Authors. All Rights Reserved.
-//
-// 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
-//
-//     https://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 OPENSSL_HEADER_CRYPTO_ASN1_INTERNAL_H
-#define OPENSSL_HEADER_CRYPTO_ASN1_INTERNAL_H
-
-#include <time.h>
-
-#include <openssl/asn1.h>
-#include <openssl/asn1t.h>
-
-#if defined(__cplusplus)
-extern "C" {
-#endif
-
-
-// Wrapper functions for time functions.
-
-// OPENSSL_gmtime converts a time_t value in |time| which must be in the range
-// of year 0000 to 9999 to a broken out time value in |tm|. On success |tm| is
-// returned. On failure NULL is returned.
-OPENSSL_EXPORT struct tm *OPENSSL_gmtime(const time_t *time, struct tm *result);
-
-// OPENSSL_gmtime_adj returns one on success, and updates |tm| by adding
-// |offset_day| days and |offset_sec| seconds. It returns zero on failure. |tm|
-// must be in the range of year 0000 to 9999 both before and after the update or
-// a failure will be returned.
-OPENSSL_EXPORT int OPENSSL_gmtime_adj(struct tm *tm, int offset_day,
-                                      int64_t offset_sec);
-
-// OPENSSL_gmtime_diff calculates the difference between |from| and |to|. It
-// returns one, and outputs the difference as a number of days and seconds in
-// |*out_days| and |*out_secs| on success. It returns zero on failure.  Both
-// |from| and |to| must be in the range of year 0000 to 9999 or a failure will
-// be returned.
-OPENSSL_EXPORT int OPENSSL_gmtime_diff(int *out_days, int *out_secs,
-                                       const struct tm *from,
-                                       const struct tm *to);
-
-// Internal ASN1 structures and functions: not for application use
-
-// These are used internally in the ASN1_OBJECT to keep track of
-// whether the names and data need to be free()ed
-#define ASN1_OBJECT_FLAG_DYNAMIC 0x01          // internal use
-#define ASN1_OBJECT_FLAG_DYNAMIC_STRINGS 0x04  // internal use
-#define ASN1_OBJECT_FLAG_DYNAMIC_DATA 0x08     // internal use
-
-// An asn1_object_st (aka |ASN1_OBJECT|) represents an ASN.1 OBJECT IDENTIFIER.
-// Note: Mutating an |ASN1_OBJECT| is only permitted when initializing it. The
-// library maintains a table of static |ASN1_OBJECT|s, which may be referenced
-// by non-const |ASN1_OBJECT| pointers. Code which receives an |ASN1_OBJECT|
-// pointer externally must assume it is immutable, even if the pointer is not
-// const.
-struct asn1_object_st {
-  const char *sn, *ln;
-  int nid;
-  int length;
-  const unsigned char *data;  // data remains const after init
-  int flags;                  // Should we free this one
-};
-
-ASN1_OBJECT *ASN1_OBJECT_new(void);
-
-// ASN1_ENCODING is used to save the received encoding of an ASN.1 type. This
-// avoids problems with invalid encodings that break signatures.
-typedef struct ASN1_ENCODING_st {
-  // enc is the saved DER encoding. Its ownership is determined by |buf|.
-  uint8_t *enc;
-  // len is the length of |enc|. If zero, there is no saved encoding.
-  size_t len;
-  // buf, if non-NULL, is the |CRYPTO_BUFFER| that |enc| points into. If NULL,
-  // |enc| must be released with |OPENSSL_free|.
-  CRYPTO_BUFFER *buf;
-} ASN1_ENCODING;
-
-OPENSSL_EXPORT int asn1_utctime_to_tm(struct tm *tm, const ASN1_UTCTIME *d,
-                                      int allow_timezone_offset);
-OPENSSL_EXPORT int asn1_generalizedtime_to_tm(struct tm *tm,
-                                              const ASN1_GENERALIZEDTIME *d);
-
-int ASN1_item_ex_new(ASN1_VALUE **pval, const ASN1_ITEM *it);
-void ASN1_item_ex_free(ASN1_VALUE **pval, const ASN1_ITEM *it);
-
-void ASN1_template_free(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt);
-
-// ASN1_item_ex_d2i parses |len| bytes from |*in| as a structure of type |it|
-// and writes the result to |*pval|. If |tag| is non-negative, |it| is
-// implicitly tagged with the tag specified by |tag| and |aclass|. If |opt| is
-// non-zero, the value is optional. If |buf| is non-NULL, |*in| must point into
-// |buf|.
-//
-// This function returns one and advances |*in| if an object was successfully
-// parsed, -1 if an optional value was successfully skipped, and zero on error.
-int ASN1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len,
-                     const ASN1_ITEM *it, int tag, int aclass, char opt,
-                     CRYPTO_BUFFER *buf);
-
-// ASN1_item_ex_i2d encodes |*pval| as a value of type |it| to |out| under the
-// i2d output convention. It returns a non-zero length on success and -1 on
-// error. If |tag| is -1. the tag and class come from |it|. Otherwise, the tag
-// number is |tag| and the class is |aclass|. This is used for implicit tagging.
-// This function treats a missing value as an error, not an optional field.
-int ASN1_item_ex_i2d(ASN1_VALUE **pval, unsigned char **out,
-                     const ASN1_ITEM *it, int tag, int aclass);
-
-void ASN1_primitive_free(ASN1_VALUE **pval, const ASN1_ITEM *it);
-
-// asn1_get_choice_selector returns the CHOICE selector value for |*pval|, which
-// must of type |it|.
-int asn1_get_choice_selector(ASN1_VALUE **pval, const ASN1_ITEM *it);
-
-int asn1_set_choice_selector(ASN1_VALUE **pval, int value, const ASN1_ITEM *it);
-
-// asn1_get_field_ptr returns a pointer to the field in |*pval| corresponding to
-// |tt|.
-ASN1_VALUE **asn1_get_field_ptr(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt);
-
-// asn1_do_adb returns the |ASN1_TEMPLATE| for the ANY DEFINED BY field |tt|,
-// based on the selector INTEGER or OID in |*pval|. If |tt| is not an ADB field,
-// it returns |tt|. If the selector does not match any value, it returns NULL.
-// If |nullerr| is non-zero, it will additionally push an error to the error
-// queue when there is no match.
-const ASN1_TEMPLATE *asn1_do_adb(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt,
-                                 int nullerr);
-
-void asn1_refcount_set_one(ASN1_VALUE **pval, const ASN1_ITEM *it);
-int asn1_refcount_dec_and_test_zero(ASN1_VALUE **pval, const ASN1_ITEM *it);
-
-void asn1_enc_init(ASN1_VALUE **pval, const ASN1_ITEM *it);
-void asn1_enc_free(ASN1_VALUE **pval, const ASN1_ITEM *it);
-
-// asn1_enc_restore, if |*pval| has a saved encoding, writes it to |out| under
-// the i2d output convention, sets |*len| to the length, and returns one. If it
-// has no saved encoding, it returns zero.
-int asn1_enc_restore(int *len, unsigned char **out, ASN1_VALUE **pval,
-                     const ASN1_ITEM *it);
-
-// asn1_enc_save saves |inlen| bytes from |in| as |*pval|'s saved encoding. It
-// returns one on success and zero on error. If |buf| is non-NULL, |in| must
-// point into |buf|.
-int asn1_enc_save(ASN1_VALUE **pval, const uint8_t *in, size_t inlen,
-                  const ASN1_ITEM *it, CRYPTO_BUFFER *buf);
-
-// asn1_encoding_clear clears the cached encoding in |enc|.
-void asn1_encoding_clear(ASN1_ENCODING *enc);
-
-// asn1_type_value_as_pointer returns |a|'s value in pointer form. This is
-// usually the value object but, for BOOLEAN values, is 0 or 0xff cast to
-// a pointer.
-const void *asn1_type_value_as_pointer(const ASN1_TYPE *a);
-
-// asn1_type_set0_string sets |a|'s value to the object represented by |str| and
-// takes ownership of |str|.
-void asn1_type_set0_string(ASN1_TYPE *a, ASN1_STRING *str);
-
-// asn1_type_cleanup releases memory associated with |a|'s value, without
-// freeing |a| itself.
-void asn1_type_cleanup(ASN1_TYPE *a);
-
-// asn1_is_printable returns one if |value| is a valid Unicode codepoint for an
-// ASN.1 PrintableString, and zero otherwise.
-int asn1_is_printable(uint32_t value);
-
-// asn1_bit_string_length returns the number of bytes in |str| and sets
-// |*out_padding_bits| to the number of padding bits.
-//
-// This function should be used instead of |ASN1_STRING_length| to correctly
-// handle the non-|ASN1_STRING_FLAG_BITS_LEFT| case.
-int asn1_bit_string_length(const ASN1_BIT_STRING *str,
-                           uint8_t *out_padding_bits);
-
-// asn1_marshal_bit_string marshals |in| as a DER-encoded, ASN.1 BIT STRING and
-// writes the result to |out|. It returns one on success and zero on error. If
-// |tag| is non-zero, the tag is replaced with |tag|.
-int asn1_marshal_bit_string(CBB *out, const ASN1_BIT_STRING *in,
-                            CBS_ASN1_TAG tag);
-
-// asn1_marshal_integer marshals |in| as a DER-encoded, ASN.1 INTEGER and writes
-// the result to |out|. It returns one on success and zero on error. If |tag| is
-// non-zero, the tag is replaced with |tag|.
-int asn1_marshal_integer(CBB *out, const ASN1_INTEGER *in, CBS_ASN1_TAG tag);
-
-typedef struct {
-  int nid;
-  long minsize;
-  long maxsize;
-  unsigned long mask;
-  unsigned long flags;
-} ASN1_STRING_TABLE;
-
-// asn1_get_string_table_for_testing sets |*out_ptr| and |*out_len| to the table
-// of built-in |ASN1_STRING_TABLE| values. It is exported for testing.
-OPENSSL_EXPORT void asn1_get_string_table_for_testing(
-    const ASN1_STRING_TABLE **out_ptr, size_t *out_len);
-
-typedef ASN1_VALUE *ASN1_new_func(void);
-typedef void ASN1_free_func(ASN1_VALUE *a);
-typedef ASN1_VALUE *ASN1_d2i_func(ASN1_VALUE **a, const unsigned char **in,
-                                  long length);
-typedef int ASN1_i2d_func(ASN1_VALUE *a, unsigned char **in);
-
-typedef int ASN1_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len,
-                        const ASN1_ITEM *it, int opt, ASN1_TLC *ctx);
-
-typedef int ASN1_ex_i2d(ASN1_VALUE **pval, unsigned char **out,
-                        const ASN1_ITEM *it);
-typedef int ASN1_ex_new_func(ASN1_VALUE **pval, const ASN1_ITEM *it);
-typedef void ASN1_ex_free_func(ASN1_VALUE **pval, const ASN1_ITEM *it);
-
-typedef struct ASN1_EXTERN_FUNCS_st {
-  ASN1_ex_new_func *asn1_ex_new;
-  ASN1_ex_free_func *asn1_ex_free;
-  ASN1_ex_d2i *asn1_ex_d2i;
-  ASN1_ex_i2d *asn1_ex_i2d;
-} ASN1_EXTERN_FUNCS;
-
-// ASN1_ANY_AS_STRING is an |ASN1_ITEM| with ASN.1 type ANY and C type
-// |ASN1_STRING*|. Types which are not represented with |ASN1_STRING|, such as
-// |ASN1_OBJECT|, are represented with type |V_ASN1_OTHER|.
-DECLARE_ASN1_ITEM(ASN1_ANY_AS_STRING)
-
-
-#if defined(__cplusplus)
-}  // extern C
-#endif
-
-#endif  // OPENSSL_HEADER_CRYPTO_ASN1_INTERNAL_H
diff --git a/src/crypto/asn1/posix_time.cc b/src/crypto/asn1/posix_time.cc
deleted file mode 100644
index 1dd2ee4..0000000
--- a/src/crypto/asn1/posix_time.cc
+++ /dev/null
@@ -1,241 +0,0 @@
-// Copyright 2022 The BoringSSL Authors
-//
-// 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
-//
-//     https://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.
-
-// Time conversion to/from POSIX time_t and struct tm, with no support
-// for time zones other than UTC
-
-#include <openssl/posix_time.h>
-
-#include <assert.h>
-#include <inttypes.h>
-#include <limits.h>
-#include <string.h>
-#include <time.h>
-
-#include "internal.h"
-
-#define SECS_PER_HOUR (60 * 60)
-#define SECS_PER_DAY (INT64_C(24) * SECS_PER_HOUR)
-
-
-// Is a year/month/day combination valid, in the range from year 0000
-// to 9999?
-static int is_valid_date(int64_t year, int64_t month, int64_t day) {
-  if (day < 1 || month < 1 || year < 0 || year > 9999) {
-    return 0;
-  }
-  switch (month) {
-    case 1:
-    case 3:
-    case 5:
-    case 7:
-    case 8:
-    case 10:
-    case 12:
-      return day > 0 && day <= 31;
-    case 4:
-    case 6:
-    case 9:
-    case 11:
-      return day > 0 && day <= 30;
-    case 2:
-      if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
-        return day > 0 && day <= 29;
-      } else {
-        return day > 0 && day <= 28;
-      }
-    default:
-      return 0;
-  }
-}
-
-// Is a time valid? Leap seconds of 60 are not considered valid, as
-// the POSIX time in seconds does not include them.
-static int is_valid_time(int64_t hours, int64_t minutes, int64_t seconds) {
-  if (hours < 0 || minutes < 0 || seconds < 0 || hours > 23 || minutes > 59 ||
-      seconds > 59) {
-    return 0;
-  }
-  return 1;
-}
-
-// 0000-01-01 00:00:00 UTC
-#define MIN_POSIX_TIME INT64_C(-62167219200)
-// 9999-12-31 23:59:59 UTC
-#define MAX_POSIX_TIME INT64_C(253402300799)
-
-// Is an int64 time within our expected range?
-static int is_valid_posix_time(int64_t time) {
-  return MIN_POSIX_TIME <= time && time <= MAX_POSIX_TIME;
-}
-
-// Inspired by algorithms presented in
-// https://howardhinnant.github.io/date_algorithms.html
-// (Public Domain)
-static int posix_time_from_utc(int64_t year, int64_t month, int64_t day,
-                               int64_t hours, int64_t minutes, int64_t seconds,
-                               int64_t *out_time) {
-  if (!is_valid_date(year, month, day) ||
-      !is_valid_time(hours, minutes, seconds)) {
-    return 0;
-  }
-  if (month <= 2) {
-    year--;  // Start years on Mar 1, so leap days always finish a year.
-  }
-  // At this point year will be in the range -1 and 9999.
-  assert(-1 <= year && year <= 9999);
-  int64_t era = (year >= 0 ? year : year - 399) / 400;
-  int64_t year_of_era = year - era * 400;
-  int64_t day_of_year =
-      (153 * (month > 2 ? month - 3 : month + 9) + 2) / 5 + day - 1;
-  int64_t day_of_era =
-      year_of_era * 365 + year_of_era / 4 - year_of_era / 100 + day_of_year;
-  int64_t posix_days = era * 146097 + day_of_era - 719468;
-  *out_time = posix_days * SECS_PER_DAY + hours * SECS_PER_HOUR + minutes * 60 +
-              seconds;
-  return 1;
-}
-
-// Inspired by algorithms presented in
-// https://howardhinnant.github.io/date_algorithms.html
-// (Public Domain)
-static int utc_from_posix_time(int64_t time, int *out_year, int *out_month,
-                               int *out_day, int *out_hours, int *out_minutes,
-                               int *out_seconds) {
-  if (!is_valid_posix_time(time)) {
-    return 0;
-  }
-  int64_t days = time / SECS_PER_DAY;
-  int64_t leftover_seconds = time % SECS_PER_DAY;
-  if (leftover_seconds < 0) {
-    days--;
-    leftover_seconds += SECS_PER_DAY;
-  }
-  days += 719468;  // Shift to starting epoch of Mar 1 0000.
-  // At this point, days will be in the range -61 and 3652364.
-  assert(-61 <= days && days <= 3652364);
-  int64_t era = (days > 0 ? days : days - 146096) / 146097;
-  int64_t day_of_era = days - era * 146097;
-  int64_t year_of_era = (day_of_era - day_of_era / 1460 + day_of_era / 36524 -
-                         day_of_era / 146096) /
-                        365;
-  *out_year = (int)(year_of_era + era * 400);  // Year starting on Mar 1.
-  int64_t day_of_year =
-      day_of_era - (365 * year_of_era + year_of_era / 4 - year_of_era / 100);
-  int64_t month_of_year = (5 * day_of_year + 2) / 153;
-  *out_month =
-      (int)(month_of_year < 10 ? month_of_year + 3 : month_of_year - 9);
-  if (*out_month <= 2) {
-    (*out_year)++;  // Adjust year back to Jan 1 start of year.
-  }
-  *out_day = (int)(day_of_year - (153 * month_of_year + 2) / 5 + 1);
-  *out_hours = (int)(leftover_seconds / SECS_PER_HOUR);
-  leftover_seconds %= SECS_PER_HOUR;
-  *out_minutes = (int)(leftover_seconds / 60);
-  *out_seconds = (int)(leftover_seconds % 60);
-  return 1;
-}
-
-int OPENSSL_tm_to_posix(const struct tm *tm, int64_t *out) {
-  return posix_time_from_utc(tm->tm_year + INT64_C(1900),
-                             tm->tm_mon + INT64_C(1), tm->tm_mday, tm->tm_hour,
-                             tm->tm_min, tm->tm_sec, out);
-}
-
-int OPENSSL_posix_to_tm(int64_t time, struct tm *out_tm) {
-  struct tm tmp_tm = {};
-  if (!utc_from_posix_time(time, &tmp_tm.tm_year, &tmp_tm.tm_mon,
-                           &tmp_tm.tm_mday, &tmp_tm.tm_hour, &tmp_tm.tm_min,
-                           &tmp_tm.tm_sec)) {
-    return 0;
-  }
-  tmp_tm.tm_year -= 1900;
-  tmp_tm.tm_mon -= 1;
-  *out_tm = tmp_tm;
-
-  return 1;
-}
-
-int OPENSSL_timegm(const struct tm *tm, time_t *out) {
-  static_assert(
-      sizeof(time_t) == sizeof(int32_t) || sizeof(time_t) == sizeof(int64_t),
-      "time_t is broken");
-  int64_t posix_time;
-  if (!OPENSSL_tm_to_posix(tm, &posix_time)) {
-    return 0;
-  }
-  if (sizeof(time_t) == sizeof(int32_t) &&
-      (posix_time > INT32_MAX || posix_time < INT32_MIN)) {
-    return 0;
-  }
-  *out = (time_t)posix_time;
-  return 1;
-}
-
-struct tm *OPENSSL_gmtime(const time_t *time, struct tm *out_tm) {
-  static_assert(
-      sizeof(time_t) == sizeof(int32_t) || sizeof(time_t) == sizeof(int64_t),
-      "time_t is broken");
-  int64_t posix_time = *time;
-  if (!OPENSSL_posix_to_tm(posix_time, out_tm)) {
-    return NULL;
-  }
-  return out_tm;
-}
-
-int OPENSSL_gmtime_adj(struct tm *tm, int offset_day, int64_t offset_sec) {
-  int64_t posix_time;
-  if (!OPENSSL_tm_to_posix(tm, &posix_time)) {
-    return 0;
-  }
-  static_assert(INT_MAX <= INT64_MAX / SECS_PER_DAY,
-                "day offset in seconds cannot overflow");
-  static_assert(MAX_POSIX_TIME <= INT64_MAX - INT_MAX * SECS_PER_DAY,
-                "addition cannot overflow");
-  static_assert(MIN_POSIX_TIME >= INT64_MIN - INT_MIN * SECS_PER_DAY,
-                "addition cannot underflow");
-  posix_time += offset_day * SECS_PER_DAY;
-  if (posix_time > 0 && offset_sec > INT64_MAX - posix_time) {
-    return 0;
-  }
-  if (posix_time < 0 && offset_sec < INT64_MIN - posix_time) {
-    return 0;
-  }
-  posix_time += offset_sec;
-
-  if (!OPENSSL_posix_to_tm(posix_time, tm)) {
-    return 0;
-  }
-
-  return 1;
-}
-
-int OPENSSL_gmtime_diff(int *out_days, int *out_secs, const struct tm *from,
-                        const struct tm *to) {
-  int64_t time_to, time_from;
-  if (!OPENSSL_tm_to_posix(to, &time_to) ||
-      !OPENSSL_tm_to_posix(from, &time_from)) {
-    return 0;
-  }
-  // Times are in range, so these calculations can not overflow.
-  static_assert(SECS_PER_DAY <= INT_MAX, "seconds per day does not fit in int");
-  static_assert((MAX_POSIX_TIME - MIN_POSIX_TIME) / SECS_PER_DAY <= INT_MAX,
-                "range of valid POSIX times, in days, does not fit in int");
-  int64_t timediff = time_to - time_from;
-  int64_t daydiff = timediff / SECS_PER_DAY;
-  timediff %= SECS_PER_DAY;
-  *out_secs = (int)timediff;
-  *out_days = (int)daydiff;
-  return 1;
-}
diff --git a/src/crypto/asn1/tasn_dec.cc b/src/crypto/asn1/tasn_dec.cc
deleted file mode 100644
index 627c135..0000000
--- a/src/crypto/asn1/tasn_dec.cc
+++ /dev/null
@@ -1,963 +0,0 @@
-// Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved.
-//
-// 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
-//
-//     https://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 <openssl/asn1.h>
-#include <openssl/asn1t.h>
-#include <openssl/bytestring.h>
-#include <openssl/err.h>
-#include <openssl/mem.h>
-#include <openssl/pool.h>
-
-#include <assert.h>
-#include <limits.h>
-#include <string.h>
-
-#include "../bytestring/internal.h"
-#include "../internal.h"
-#include "internal.h"
-
-// Constructed types with a recursive definition (such as can be found in PKCS7)
-// could eventually exceed the stack given malicious input with excessive
-// recursion. Therefore we limit the stack depth. This is the maximum number of
-// recursive invocations of asn1_item_embed_d2i().
-#define ASN1_MAX_CONSTRUCTED_NEST 30
-
-static int asn1_check_tlen(long *olen, int *otag, unsigned char *oclass,
-                           char *cst, const unsigned char **in, long len,
-                           int exptag, int expclass, char opt);
-
-static int asn1_template_ex_d2i(ASN1_VALUE **pval, const unsigned char **in,
-                                long len, const ASN1_TEMPLATE *tt, char opt,
-                                CRYPTO_BUFFER *buf, int depth);
-static int asn1_template_noexp_d2i(ASN1_VALUE **val, const unsigned char **in,
-                                   long len, const ASN1_TEMPLATE *tt, char opt,
-                                   CRYPTO_BUFFER *buf, int depth);
-static int asn1_ex_c2i(ASN1_VALUE **pval, const unsigned char *cont, long len,
-                       int utype, const ASN1_ITEM *it);
-static int asn1_d2i_ex_primitive(ASN1_VALUE **pval, const unsigned char **in,
-                                 long len, const ASN1_ITEM *it, int tag,
-                                 int aclass, char opt);
-static int asn1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in,
-                            long len, const ASN1_ITEM *it, int tag, int aclass,
-                            char opt, CRYPTO_BUFFER *buf, int depth);
-
-unsigned long ASN1_tag2bit(int tag) {
-  switch (tag) {
-    case V_ASN1_BIT_STRING:
-      return B_ASN1_BIT_STRING;
-    case V_ASN1_OCTET_STRING:
-      return B_ASN1_OCTET_STRING;
-    case V_ASN1_UTF8STRING:
-      return B_ASN1_UTF8STRING;
-    case V_ASN1_SEQUENCE:
-      return B_ASN1_SEQUENCE;
-    case V_ASN1_NUMERICSTRING:
-      return B_ASN1_NUMERICSTRING;
-    case V_ASN1_PRINTABLESTRING:
-      return B_ASN1_PRINTABLESTRING;
-    case V_ASN1_T61STRING:
-      return B_ASN1_T61STRING;
-    case V_ASN1_VIDEOTEXSTRING:
-      return B_ASN1_VIDEOTEXSTRING;
-    case V_ASN1_IA5STRING:
-      return B_ASN1_IA5STRING;
-    case V_ASN1_UTCTIME:
-      return B_ASN1_UTCTIME;
-    case V_ASN1_GENERALIZEDTIME:
-      return B_ASN1_GENERALIZEDTIME;
-    case V_ASN1_GRAPHICSTRING:
-      return B_ASN1_GRAPHICSTRING;
-    case V_ASN1_ISO64STRING:
-      return B_ASN1_ISO64STRING;
-    case V_ASN1_GENERALSTRING:
-      return B_ASN1_GENERALSTRING;
-    case V_ASN1_UNIVERSALSTRING:
-      return B_ASN1_UNIVERSALSTRING;
-    case V_ASN1_BMPSTRING:
-      return B_ASN1_BMPSTRING;
-    default:
-      return 0;
-  }
-}
-
-static int is_supported_universal_type(int tag, int aclass) {
-  if (aclass != V_ASN1_UNIVERSAL) {
-    return 0;
-  }
-  return tag == V_ASN1_OBJECT || tag == V_ASN1_NULL || tag == V_ASN1_BOOLEAN ||
-         tag == V_ASN1_BIT_STRING || tag == V_ASN1_INTEGER ||
-         tag == V_ASN1_ENUMERATED || tag == V_ASN1_OCTET_STRING ||
-         tag == V_ASN1_NUMERICSTRING || tag == V_ASN1_PRINTABLESTRING ||
-         tag == V_ASN1_T61STRING || tag == V_ASN1_VIDEOTEXSTRING ||
-         tag == V_ASN1_IA5STRING || tag == V_ASN1_UTCTIME ||
-         tag == V_ASN1_GENERALIZEDTIME || tag == V_ASN1_GRAPHICSTRING ||
-         tag == V_ASN1_VISIBLESTRING || tag == V_ASN1_GENERALSTRING ||
-         tag == V_ASN1_UNIVERSALSTRING || tag == V_ASN1_BMPSTRING ||
-         tag == V_ASN1_UTF8STRING || tag == V_ASN1_SET ||
-         tag == V_ASN1_SEQUENCE;
-}
-
-// Macro to initialize and invalidate the cache
-
-// Decode an ASN1 item, this currently behaves just like a standard 'd2i'
-// function. 'in' points to a buffer to read the data from, in future we
-// will have more advanced versions that can input data a piece at a time and
-// this will simply be a special case.
-
-ASN1_VALUE *ASN1_item_d2i(ASN1_VALUE **pval, const unsigned char **in, long len,
-                          const ASN1_ITEM *it) {
-  ASN1_VALUE *ret = NULL;
-  if (asn1_item_ex_d2i(&ret, in, len, it, /*tag=*/-1, /*aclass=*/0, /*opt=*/0,
-                       /*buf=*/NULL, /*depth=*/0) <= 0) {
-    // Clean up, in case the caller left a partial object.
-    //
-    // TODO(davidben): I don't think it can leave one, but the codepaths below
-    // are a bit inconsistent. Revisit this when rewriting this function.
-    ASN1_item_ex_free(&ret, it);
-  }
-
-  // If the caller supplied an output pointer, free the old one and replace it
-  // with |ret|. This differs from OpenSSL slightly in that we don't support
-  // object reuse. We run this on both success and failure. On failure, even
-  // with object reuse, OpenSSL destroys the previous object.
-  if (pval != NULL) {
-    ASN1_item_ex_free(pval, it);
-    *pval = ret;
-  }
-  return ret;
-}
-
-// Decode an item, taking care of IMPLICIT tagging, if any. If 'opt' set and
-// tag mismatch return -1 to handle OPTIONAL
-//
-// TODO(davidben): Historically, all functions in this file had to account for
-// |*pval| containing an arbitrary existing value. This is no longer the case
-// because |ASN1_item_d2i| now always starts from NULL. As part of rewriting
-// this function, take the simplified assumptions into account. Though we must
-// still account for the internal calls to |ASN1_item_ex_new|.
-
-static int asn1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in,
-                            long len, const ASN1_ITEM *it, int tag, int aclass,
-                            char opt, CRYPTO_BUFFER *buf, int depth) {
-  const ASN1_TEMPLATE *tt, *errtt = NULL;
-  const unsigned char *p = NULL, *q;
-  unsigned char oclass;
-  char cst, isopt;
-  int i;
-  int otag;
-  int ret = 0;
-  ASN1_VALUE **pchptr;
-  if (!pval) {
-    return 0;
-  }
-
-  if (buf != NULL) {
-    assert(CRYPTO_BUFFER_data(buf) <= *in &&
-           *in + len <= CRYPTO_BUFFER_data(buf) + CRYPTO_BUFFER_len(buf));
-  }
-
-  // Bound |len| to comfortably fit in an int. Lengths in this module often
-  // switch between int and long without overflow checks.
-  if (len > INT_MAX / 2) {
-    len = INT_MAX / 2;
-  }
-
-  if (++depth > ASN1_MAX_CONSTRUCTED_NEST) {
-    OPENSSL_PUT_ERROR(ASN1, ASN1_R_NESTED_TOO_DEEP);
-    goto err;
-  }
-
-  switch (it->itype) {
-    case ASN1_ITYPE_PRIMITIVE:
-      if (it->templates) {
-        // tagging or OPTIONAL is currently illegal on an item template
-        // because the flags can't get passed down. In practice this
-        // isn't a problem: we include the relevant flags from the item
-        // template in the template itself.
-        if ((tag != -1) || opt) {
-          OPENSSL_PUT_ERROR(ASN1, ASN1_R_ILLEGAL_OPTIONS_ON_ITEM_TEMPLATE);
-          goto err;
-        }
-        return asn1_template_ex_d2i(pval, in, len, it->templates, opt, buf,
-                                    depth);
-      }
-      return asn1_d2i_ex_primitive(pval, in, len, it, tag, aclass, opt);
-      break;
-
-    case ASN1_ITYPE_MSTRING:
-      // It never makes sense for multi-strings to have implicit tagging, so
-      // if tag != -1, then this looks like an error in the template.
-      if (tag != -1) {
-        OPENSSL_PUT_ERROR(ASN1, ASN1_R_BAD_TEMPLATE);
-        goto err;
-      }
-
-      p = *in;
-      // Just read in tag and class
-      ret = asn1_check_tlen(NULL, &otag, &oclass, NULL, &p, len, -1, 0, 1);
-      if (!ret) {
-        OPENSSL_PUT_ERROR(ASN1, ASN1_R_NESTED_ASN1_ERROR);
-        goto err;
-      }
-
-      // Must be UNIVERSAL class
-      if (oclass != V_ASN1_UNIVERSAL) {
-        // If OPTIONAL, assume this is OK
-        if (opt) {
-          return -1;
-        }
-        OPENSSL_PUT_ERROR(ASN1, ASN1_R_MSTRING_NOT_UNIVERSAL);
-        goto err;
-      }
-      // Check tag matches bit map
-      if (!(ASN1_tag2bit(otag) & it->utype)) {
-        // If OPTIONAL, assume this is OK
-        if (opt) {
-          return -1;
-        }
-        OPENSSL_PUT_ERROR(ASN1, ASN1_R_MSTRING_WRONG_TAG);
-        goto err;
-      }
-      return asn1_d2i_ex_primitive(pval, in, len, it, otag, 0, 0);
-
-    case ASN1_ITYPE_EXTERN: {
-      // We don't support implicit tagging with external types.
-      if (tag != -1) {
-        OPENSSL_PUT_ERROR(ASN1, ASN1_R_BAD_TEMPLATE);
-        goto err;
-      }
-      const ASN1_EXTERN_FUNCS *ef =
-          reinterpret_cast<const ASN1_EXTERN_FUNCS *>(it->funcs);
-      return ef->asn1_ex_d2i(pval, in, len, it, opt, NULL);
-    }
-
-    case ASN1_ITYPE_CHOICE: {
-      // It never makes sense for CHOICE types to have implicit tagging, so if
-      // tag != -1, then this looks like an error in the template.
-      if (tag != -1) {
-        OPENSSL_PUT_ERROR(ASN1, ASN1_R_BAD_TEMPLATE);
-        goto err;
-      }
-
-      const ASN1_AUX *aux = reinterpret_cast<const ASN1_AUX *>(it->funcs);
-      ASN1_aux_cb *asn1_cb = aux != NULL ? aux->asn1_cb : NULL;
-      if (asn1_cb && !asn1_cb(ASN1_OP_D2I_PRE, pval, it, NULL)) {
-        goto auxerr;
-      }
-
-      if (*pval) {
-        // Free up and zero CHOICE value if initialised
-        i = asn1_get_choice_selector(pval, it);
-        if ((i >= 0) && (i < it->tcount)) {
-          tt = it->templates + i;
-          pchptr = asn1_get_field_ptr(pval, tt);
-          ASN1_template_free(pchptr, tt);
-          asn1_set_choice_selector(pval, -1, it);
-        }
-      } else if (!ASN1_item_ex_new(pval, it)) {
-        OPENSSL_PUT_ERROR(ASN1, ASN1_R_NESTED_ASN1_ERROR);
-        goto err;
-      }
-      // CHOICE type, try each possibility in turn
-      p = *in;
-      for (i = 0, tt = it->templates; i < it->tcount; i++, tt++) {
-        pchptr = asn1_get_field_ptr(pval, tt);
-        // We mark field as OPTIONAL so its absence can be recognised.
-        ret = asn1_template_ex_d2i(pchptr, &p, len, tt, 1, buf, depth);
-        // If field not present, try the next one
-        if (ret == -1) {
-          continue;
-        }
-        // If positive return, read OK, break loop
-        if (ret > 0) {
-          break;
-        }
-        // Otherwise must be an ASN1 parsing error
-        errtt = tt;
-        OPENSSL_PUT_ERROR(ASN1, ASN1_R_NESTED_ASN1_ERROR);
-        goto err;
-      }
-
-      // Did we fall off the end without reading anything?
-      if (i == it->tcount) {
-        // If OPTIONAL, this is OK
-        if (opt) {
-          // Free and zero it
-          ASN1_item_ex_free(pval, it);
-          return -1;
-        }
-        OPENSSL_PUT_ERROR(ASN1, ASN1_R_NO_MATCHING_CHOICE_TYPE);
-        goto err;
-      }
-
-      asn1_set_choice_selector(pval, i, it);
-      if (asn1_cb && !asn1_cb(ASN1_OP_D2I_POST, pval, it, NULL)) {
-        goto auxerr;
-      }
-      *in = p;
-      return 1;
-    }
-
-    case ASN1_ITYPE_SEQUENCE: {
-      p = *in;
-
-      // If no IMPLICIT tagging set to SEQUENCE, UNIVERSAL
-      if (tag == -1) {
-        tag = V_ASN1_SEQUENCE;
-        aclass = V_ASN1_UNIVERSAL;
-      }
-      // Get SEQUENCE length and update len, p
-      ret = asn1_check_tlen(&len, NULL, NULL, &cst, &p, len, tag, aclass, opt);
-      if (!ret) {
-        OPENSSL_PUT_ERROR(ASN1, ASN1_R_NESTED_ASN1_ERROR);
-        goto err;
-      } else if (ret == -1) {
-        return -1;
-      }
-      if (!cst) {
-        OPENSSL_PUT_ERROR(ASN1, ASN1_R_SEQUENCE_NOT_CONSTRUCTED);
-        goto err;
-      }
-
-      if (!*pval && !ASN1_item_ex_new(pval, it)) {
-        OPENSSL_PUT_ERROR(ASN1, ASN1_R_NESTED_ASN1_ERROR);
-        goto err;
-      }
-
-      const ASN1_AUX *aux = reinterpret_cast<const ASN1_AUX *>(it->funcs);
-      ASN1_aux_cb *asn1_cb = aux != NULL ? aux->asn1_cb : NULL;
-      if (asn1_cb && !asn1_cb(ASN1_OP_D2I_PRE, pval, it, NULL)) {
-        goto auxerr;
-      }
-
-      // Free up and zero any ADB found
-      for (i = 0, tt = it->templates; i < it->tcount; i++, tt++) {
-        if (tt->flags & ASN1_TFLG_ADB_MASK) {
-          const ASN1_TEMPLATE *seqtt;
-          ASN1_VALUE **pseqval;
-          seqtt = asn1_do_adb(pval, tt, 0);
-          if (seqtt == NULL) {
-            continue;
-          }
-          pseqval = asn1_get_field_ptr(pval, seqtt);
-          ASN1_template_free(pseqval, seqtt);
-        }
-      }
-
-      // Get each field entry
-      for (i = 0, tt = it->templates; i < it->tcount; i++, tt++) {
-        const ASN1_TEMPLATE *seqtt;
-        ASN1_VALUE **pseqval;
-        seqtt = asn1_do_adb(pval, tt, 1);
-        if (seqtt == NULL) {
-          goto err;
-        }
-        pseqval = asn1_get_field_ptr(pval, seqtt);
-        // Have we ran out of data?
-        if (!len) {
-          break;
-        }
-        q = p;
-        // This determines the OPTIONAL flag value. The field cannot be
-        // omitted if it is the last of a SEQUENCE and there is still
-        // data to be read. This isn't strictly necessary but it
-        // increases efficiency in some cases.
-        if (i == (it->tcount - 1)) {
-          isopt = 0;
-        } else {
-          isopt = (seqtt->flags & ASN1_TFLG_OPTIONAL) != 0;
-        }
-        // attempt to read in field, allowing each to be OPTIONAL
-
-        ret = asn1_template_ex_d2i(pseqval, &p, len, seqtt, isopt, buf, depth);
-        if (!ret) {
-          errtt = seqtt;
-          goto err;
-        } else if (ret == -1) {
-          // OPTIONAL component absent. Free and zero the field.
-          ASN1_template_free(pseqval, seqtt);
-          continue;
-        }
-        // Update length
-        len -= p - q;
-      }
-
-      // Check all data read
-      if (len) {
-        OPENSSL_PUT_ERROR(ASN1, ASN1_R_SEQUENCE_LENGTH_MISMATCH);
-        goto err;
-      }
-
-      // If we get here we've got no more data in the SEQUENCE, however we
-      // may not have read all fields so check all remaining are OPTIONAL
-      // and clear any that are.
-      for (; i < it->tcount; tt++, i++) {
-        const ASN1_TEMPLATE *seqtt;
-        seqtt = asn1_do_adb(pval, tt, 1);
-        if (seqtt == NULL) {
-          goto err;
-        }
-        if (seqtt->flags & ASN1_TFLG_OPTIONAL) {
-          ASN1_VALUE **pseqval;
-          pseqval = asn1_get_field_ptr(pval, seqtt);
-          ASN1_template_free(pseqval, seqtt);
-        } else {
-          errtt = seqtt;
-          OPENSSL_PUT_ERROR(ASN1, ASN1_R_FIELD_MISSING);
-          goto err;
-        }
-      }
-      // Save encoding
-      if (!asn1_enc_save(pval, *in, p - *in, it, buf)) {
-        goto auxerr;
-      }
-      if (asn1_cb && !asn1_cb(ASN1_OP_D2I_POST, pval, it, NULL)) {
-        goto auxerr;
-      }
-      *in = p;
-      return 1;
-    }
-
-    default:
-      return 0;
-  }
-auxerr:
-  OPENSSL_PUT_ERROR(ASN1, ASN1_R_AUX_ERROR);
-err:
-  ASN1_item_ex_free(pval, it);
-  if (errtt) {
-    ERR_add_error_data(4, "Field=", errtt->field_name, ", Type=", it->sname);
-  } else {
-    ERR_add_error_data(2, "Type=", it->sname);
-  }
-  return 0;
-}
-
-int ASN1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len,
-                     const ASN1_ITEM *it, int tag, int aclass, char opt,
-                     CRYPTO_BUFFER *buf) {
-  return asn1_item_ex_d2i(pval, in, len, it, tag, aclass, opt, buf,
-                          /*depth=*/0);
-}
-
-// Templates are handled with two separate functions. One handles any
-// EXPLICIT tag and the other handles the rest.
-
-static int asn1_template_ex_d2i(ASN1_VALUE **val, const unsigned char **in,
-                                long inlen, const ASN1_TEMPLATE *tt, char opt,
-                                CRYPTO_BUFFER *buf, int depth) {
-  int aclass;
-  int ret;
-  long len;
-  const unsigned char *p, *q;
-  if (!val) {
-    return 0;
-  }
-  uint32_t flags = tt->flags;
-  aclass = flags & ASN1_TFLG_TAG_CLASS;
-
-  p = *in;
-
-  // Check if EXPLICIT tag expected
-  if (flags & ASN1_TFLG_EXPTAG) {
-    char cst;
-    // Need to work out amount of data available to the inner content and
-    // where it starts: so read in EXPLICIT header to get the info.
-    ret = asn1_check_tlen(&len, NULL, NULL, &cst, &p, inlen, tt->tag, aclass,
-                          opt);
-    q = p;
-    if (!ret) {
-      OPENSSL_PUT_ERROR(ASN1, ASN1_R_NESTED_ASN1_ERROR);
-      return 0;
-    } else if (ret == -1) {
-      return -1;
-    }
-    if (!cst) {
-      OPENSSL_PUT_ERROR(ASN1, ASN1_R_EXPLICIT_TAG_NOT_CONSTRUCTED);
-      return 0;
-    }
-    // We've found the field so it can't be OPTIONAL now
-    ret = asn1_template_noexp_d2i(val, &p, len, tt, /*opt=*/0, buf, depth);
-    if (!ret) {
-      OPENSSL_PUT_ERROR(ASN1, ASN1_R_NESTED_ASN1_ERROR);
-      return 0;
-    }
-    // We read the field in OK so update length
-    len -= p - q;
-    // Check for trailing data.
-    if (len) {
-      OPENSSL_PUT_ERROR(ASN1, ASN1_R_EXPLICIT_LENGTH_MISMATCH);
-      goto err;
-    }
-  } else {
-    return asn1_template_noexp_d2i(val, in, inlen, tt, opt, buf, depth);
-  }
-
-  *in = p;
-  return 1;
-
-err:
-  ASN1_template_free(val, tt);
-  return 0;
-}
-
-static int asn1_template_noexp_d2i(ASN1_VALUE **val, const unsigned char **in,
-                                   long len, const ASN1_TEMPLATE *tt, char opt,
-                                   CRYPTO_BUFFER *buf, int depth) {
-  int aclass;
-  int ret;
-  const unsigned char *p;
-  if (!val) {
-    return 0;
-  }
-  uint32_t flags = tt->flags;
-  aclass = flags & ASN1_TFLG_TAG_CLASS;
-
-  p = *in;
-
-  if (flags & ASN1_TFLG_SK_MASK) {
-    // SET OF, SEQUENCE OF
-    int sktag, skaclass;
-    // First work out expected inner tag value
-    if (flags & ASN1_TFLG_IMPTAG) {
-      sktag = tt->tag;
-      skaclass = aclass;
-    } else {
-      skaclass = V_ASN1_UNIVERSAL;
-      if (flags & ASN1_TFLG_SET_OF) {
-        sktag = V_ASN1_SET;
-      } else {
-        sktag = V_ASN1_SEQUENCE;
-      }
-    }
-    // Get the tag
-    ret =
-        asn1_check_tlen(&len, NULL, NULL, NULL, &p, len, sktag, skaclass, opt);
-    if (!ret) {
-      OPENSSL_PUT_ERROR(ASN1, ASN1_R_NESTED_ASN1_ERROR);
-      return 0;
-    } else if (ret == -1) {
-      return -1;
-    }
-    if (!*val) {
-      *val = (ASN1_VALUE *)sk_ASN1_VALUE_new_null();
-    } else {
-      // We've got a valid STACK: free up any items present
-      STACK_OF(ASN1_VALUE) *sktmp = (STACK_OF(ASN1_VALUE) *)*val;
-      ASN1_VALUE *vtmp;
-      while (sk_ASN1_VALUE_num(sktmp) > 0) {
-        vtmp = sk_ASN1_VALUE_pop(sktmp);
-        ASN1_item_ex_free(&vtmp, ASN1_ITEM_ptr(tt->item));
-      }
-    }
-
-    if (!*val) {
-      goto err;
-    }
-
-    // Read as many items as we can
-    while (len > 0) {
-      ASN1_VALUE *skfield;
-      const unsigned char *q = p;
-      skfield = NULL;
-      if (!asn1_item_ex_d2i(&skfield, &p, len, ASN1_ITEM_ptr(tt->item),
-                            /*tag=*/-1, /*aclass=*/0, /*opt=*/0, buf, depth)) {
-        OPENSSL_PUT_ERROR(ASN1, ASN1_R_NESTED_ASN1_ERROR);
-        goto err;
-      }
-      len -= p - q;
-      if (!sk_ASN1_VALUE_push((STACK_OF(ASN1_VALUE) *)*val, skfield)) {
-        ASN1_item_ex_free(&skfield, ASN1_ITEM_ptr(tt->item));
-        goto err;
-      }
-    }
-  } else if (flags & ASN1_TFLG_IMPTAG) {
-    // IMPLICIT tagging
-    ret = asn1_item_ex_d2i(val, &p, len, ASN1_ITEM_ptr(tt->item), tt->tag,
-                           aclass, opt, buf, depth);
-    if (!ret) {
-      OPENSSL_PUT_ERROR(ASN1, ASN1_R_NESTED_ASN1_ERROR);
-      goto err;
-    } else if (ret == -1) {
-      return -1;
-    }
-  } else {
-    // Nothing special
-    ret = asn1_item_ex_d2i(val, &p, len, ASN1_ITEM_ptr(tt->item), /*tag=*/-1,
-                           /*aclass=*/0, opt, buf, depth);
-    if (!ret) {
-      OPENSSL_PUT_ERROR(ASN1, ASN1_R_NESTED_ASN1_ERROR);
-      goto err;
-    } else if (ret == -1) {
-      return -1;
-    }
-  }
-
-  *in = p;
-  return 1;
-
-err:
-  ASN1_template_free(val, tt);
-  return 0;
-}
-
-static int asn1_d2i_ex_primitive(ASN1_VALUE **pval, const unsigned char **in,
-                                 long inlen, const ASN1_ITEM *it, int tag,
-                                 int aclass, char opt) {
-  int ret = 0, utype;
-  long plen;
-  char cst;
-  const unsigned char *p;
-  const unsigned char *cont = NULL;
-  long len;
-  if (!pval) {
-    OPENSSL_PUT_ERROR(ASN1, ASN1_R_ILLEGAL_NULL);
-    return 0;  // Should never happen
-  }
-
-  assert(it->itype == ASN1_ITYPE_PRIMITIVE || it->itype == ASN1_ITYPE_MSTRING);
-  if (it->itype == ASN1_ITYPE_MSTRING) {
-    utype = tag;
-    tag = -1;
-  } else {
-    utype = it->utype;
-  }
-
-  if (utype == V_ASN1_ANY || utype == V_ASN1_ANY_AS_STRING) {
-    // If type is ANY need to figure out type from tag
-    unsigned char oclass;
-    if (tag >= 0) {
-      OPENSSL_PUT_ERROR(ASN1, ASN1_R_ILLEGAL_TAGGED_ANY);
-      return 0;
-    }
-    if (opt) {
-      OPENSSL_PUT_ERROR(ASN1, ASN1_R_ILLEGAL_OPTIONAL_ANY);
-      return 0;
-    }
-    const int is_string = utype == V_ASN1_ANY_AS_STRING;
-    p = *in;
-    ret = asn1_check_tlen(&plen, &utype, &oclass, &cst, &p, inlen, -1, 0, 0);
-    if (!ret) {
-      OPENSSL_PUT_ERROR(ASN1, ASN1_R_NESTED_ASN1_ERROR);
-      return 0;
-    }
-    if (!is_supported_universal_type(utype, oclass)) {
-      utype = V_ASN1_OTHER;
-    }
-    // These three types are not represented as |ASN1_STRING|, so they must be
-    // parsed separately and then treated as an opaque |V_ASN1_OTHER|.
-    if (is_string && (utype == V_ASN1_OBJECT || utype == V_ASN1_NULL ||
-                      utype == V_ASN1_BOOLEAN)) {
-      if (cst) {
-        OPENSSL_PUT_ERROR(ASN1, ASN1_R_TYPE_NOT_PRIMITIVE);
-        return 0;
-      }
-      CBS cbs;
-      CBS_init(&cbs, p, plen);
-      if (utype == V_ASN1_OBJECT && !CBS_is_valid_asn1_oid(&cbs)) {
-        OPENSSL_PUT_ERROR(ASN1, ASN1_R_INVALID_OBJECT_ENCODING);
-        return 0;
-      }
-      if (utype == V_ASN1_NULL && CBS_len(&cbs) != 0) {
-        OPENSSL_PUT_ERROR(ASN1, ASN1_R_NULL_IS_WRONG_LENGTH);
-        return 0;
-      }
-      if (utype == V_ASN1_BOOLEAN) {
-        if (CBS_len(&cbs) != 1) {
-          OPENSSL_PUT_ERROR(ASN1, ASN1_R_BOOLEAN_IS_WRONG_LENGTH);
-          return 0;
-        }
-        uint8_t v = CBS_data(&cbs)[0];
-        if (v != 0 && v != 0xff) {
-          OPENSSL_PUT_ERROR(ASN1, ASN1_R_DECODE_ERROR);
-          return 0;
-        }
-      }
-      utype = V_ASN1_OTHER;
-    }
-  }
-  if (tag == -1) {
-    tag = utype;
-    aclass = V_ASN1_UNIVERSAL;
-  }
-  p = *in;
-  // Check header
-  ret = asn1_check_tlen(&plen, NULL, NULL, &cst, &p, inlen, tag, aclass, opt);
-  if (!ret) {
-    OPENSSL_PUT_ERROR(ASN1, ASN1_R_NESTED_ASN1_ERROR);
-    return 0;
-  } else if (ret == -1) {
-    return -1;
-  }
-  ret = 0;
-  // SEQUENCE, SET and "OTHER" are left in encoded form
-  if ((utype == V_ASN1_SEQUENCE) || (utype == V_ASN1_SET) ||
-      (utype == V_ASN1_OTHER)) {
-    // SEQUENCE and SET must be constructed
-    if (utype != V_ASN1_OTHER && !cst) {
-      OPENSSL_PUT_ERROR(ASN1, ASN1_R_TYPE_NOT_CONSTRUCTED);
-      return 0;
-    }
-
-    cont = *in;
-    len = p - cont + plen;
-    p += plen;
-  } else if (cst) {
-    // This parser historically supported BER constructed strings. We no
-    // longer do and will gradually tighten this parser into a DER
-    // parser. BER types should use |CBS_asn1_ber_to_der|.
-    OPENSSL_PUT_ERROR(ASN1, ASN1_R_TYPE_NOT_PRIMITIVE);
-    return 0;
-  } else {
-    cont = p;
-    len = plen;
-    p += plen;
-  }
-
-  // We now have content length and type: translate into a structure
-  if (!asn1_ex_c2i(pval, cont, len, utype, it)) {
-    goto err;
-  }
-
-  *in = p;
-  ret = 1;
-err:
-  return ret;
-}
-
-// Translate ASN1 content octets into a structure
-
-static int asn1_ex_c2i(ASN1_VALUE **pval, const unsigned char *cont, long len,
-                       int utype, const ASN1_ITEM *it) {
-  ASN1_VALUE **opval = NULL;
-  ASN1_STRING *stmp;
-  ASN1_TYPE *typ = NULL;
-  int ret = 0;
-  ASN1_INTEGER **tint;
-
-  // Historically, |it->funcs| for primitive types contained an
-  // |ASN1_PRIMITIVE_FUNCS| table of callbacks.
-  assert(it->funcs == NULL);
-
-  // If ANY type clear type and set pointer to internal value
-  if (it->utype == V_ASN1_ANY) {
-    if (!*pval) {
-      typ = ASN1_TYPE_new();
-      if (typ == NULL) {
-        goto err;
-      }
-      *pval = (ASN1_VALUE *)typ;
-    } else {
-      typ = (ASN1_TYPE *)*pval;
-    }
-
-    if (utype != typ->type) {
-      ASN1_TYPE_set(typ, utype, NULL);
-    }
-    opval = pval;
-    pval = &typ->value.asn1_value;
-  }
-
-  // If implementing a type that is not represented in |ASN1_STRING|, the
-  // |V_ASN1_ANY_AS_STRING| logic must be modified to redirect it to
-  // |V_ASN1_OTHER|.
-  switch (utype) {
-    case V_ASN1_OBJECT:
-      if (!c2i_ASN1_OBJECT((ASN1_OBJECT **)pval, &cont, len)) {
-        goto err;
-      }
-      break;
-
-    case V_ASN1_NULL:
-      if (len) {
-        OPENSSL_PUT_ERROR(ASN1, ASN1_R_NULL_IS_WRONG_LENGTH);
-        goto err;
-      }
-      *pval = (ASN1_VALUE *)1;
-      break;
-
-    case V_ASN1_BOOLEAN:
-      if (len != 1) {
-        OPENSSL_PUT_ERROR(ASN1, ASN1_R_BOOLEAN_IS_WRONG_LENGTH);
-        goto err;
-      } else {
-        ASN1_BOOLEAN *tbool;
-        tbool = (ASN1_BOOLEAN *)pval;
-        *tbool = *cont;
-      }
-      break;
-
-    case V_ASN1_BIT_STRING:
-      if (!c2i_ASN1_BIT_STRING((ASN1_BIT_STRING **)pval, &cont, len)) {
-        goto err;
-      }
-      break;
-
-    case V_ASN1_INTEGER:
-    case V_ASN1_ENUMERATED:
-      tint = (ASN1_INTEGER **)pval;
-      if (!c2i_ASN1_INTEGER(tint, &cont, len)) {
-        goto err;
-      }
-      // Fixup type to match the expected form
-      (*tint)->type = utype | ((*tint)->type & V_ASN1_NEG);
-      break;
-
-    case V_ASN1_OCTET_STRING:
-    case V_ASN1_NUMERICSTRING:
-    case V_ASN1_PRINTABLESTRING:
-    case V_ASN1_T61STRING:
-    case V_ASN1_VIDEOTEXSTRING:
-    case V_ASN1_IA5STRING:
-    case V_ASN1_UTCTIME:
-    case V_ASN1_GENERALIZEDTIME:
-    case V_ASN1_GRAPHICSTRING:
-    case V_ASN1_VISIBLESTRING:
-    case V_ASN1_GENERALSTRING:
-    case V_ASN1_UNIVERSALSTRING:
-    case V_ASN1_BMPSTRING:
-    case V_ASN1_UTF8STRING:
-    case V_ASN1_OTHER:
-    case V_ASN1_SET:
-    case V_ASN1_SEQUENCE: {
-      CBS cbs;
-      CBS_init(&cbs, cont, (size_t)len);
-      if (utype == V_ASN1_BMPSTRING) {
-        while (CBS_len(&cbs) != 0) {
-          uint32_t c;
-          if (!CBS_get_ucs2_be(&cbs, &c)) {
-            OPENSSL_PUT_ERROR(ASN1, ASN1_R_INVALID_BMPSTRING);
-            goto err;
-          }
-        }
-      }
-      if (utype == V_ASN1_UNIVERSALSTRING) {
-        while (CBS_len(&cbs) != 0) {
-          uint32_t c;
-          if (!CBS_get_utf32_be(&cbs, &c)) {
-            OPENSSL_PUT_ERROR(ASN1, ASN1_R_INVALID_UNIVERSALSTRING);
-            goto err;
-          }
-        }
-      }
-      if (utype == V_ASN1_UTF8STRING) {
-        while (CBS_len(&cbs) != 0) {
-          uint32_t c;
-          if (!CBS_get_utf8(&cbs, &c)) {
-            OPENSSL_PUT_ERROR(ASN1, ASN1_R_INVALID_UTF8STRING);
-            goto err;
-          }
-        }
-      }
-      if (utype == V_ASN1_UTCTIME) {
-        if (!CBS_parse_utc_time(&cbs, NULL, /*allow_timezone_offset=*/1)) {
-          OPENSSL_PUT_ERROR(ASN1, ASN1_R_INVALID_TIME_FORMAT);
-          goto err;
-        }
-      }
-      if (utype == V_ASN1_GENERALIZEDTIME) {
-        if (!CBS_parse_generalized_time(&cbs, NULL,
-                                        /*allow_timezone_offset=*/0)) {
-          OPENSSL_PUT_ERROR(ASN1, ASN1_R_INVALID_TIME_FORMAT);
-          goto err;
-        }
-      }
-      // TODO(https://crbug.com/boringssl/427): Check other string types.
-
-      // All based on ASN1_STRING and handled the same
-      if (!*pval) {
-        stmp = ASN1_STRING_type_new(utype);
-        if (!stmp) {
-          goto err;
-        }
-        *pval = (ASN1_VALUE *)stmp;
-      } else {
-        stmp = (ASN1_STRING *)*pval;
-        stmp->type = utype;
-      }
-      if (!ASN1_STRING_set(stmp, cont, len)) {
-        ASN1_STRING_free(stmp);
-        *pval = NULL;
-        goto err;
-      }
-      break;
-    }
-
-    default:
-      OPENSSL_PUT_ERROR(ASN1, ASN1_R_BAD_TEMPLATE);
-      goto err;
-  }
-  // If ASN1_ANY and NULL type fix up value
-  if (typ && (utype == V_ASN1_NULL)) {
-    typ->value.ptr = NULL;
-  }
-
-  ret = 1;
-err:
-  if (!ret) {
-    ASN1_TYPE_free(typ);
-    if (opval) {
-      *opval = NULL;
-    }
-  }
-  return ret;
-}
-
-// Check an ASN1 tag and length: a bit like ASN1_get_object but it
-// checks the expected tag.
-
-static int asn1_check_tlen(long *olen, int *otag, unsigned char *oclass,
-                           char *cst, const unsigned char **in, long len,
-                           int exptag, int expclass, char opt) {
-  int i;
-  int ptag, pclass;
-  long plen;
-  const unsigned char *p;
-  p = *in;
-
-  i = ASN1_get_object(&p, &plen, &ptag, &pclass, len);
-  if (i & 0x80) {
-    OPENSSL_PUT_ERROR(ASN1, ASN1_R_BAD_OBJECT_HEADER);
-    return 0;
-  }
-  if (exptag >= 0) {
-    if ((exptag != ptag) || (expclass != pclass)) {
-      // If type is OPTIONAL, not an error: indicate missing type.
-      if (opt) {
-        return -1;
-      }
-      OPENSSL_PUT_ERROR(ASN1, ASN1_R_WRONG_TAG);
-      return 0;
-    }
-  }
-
-  if (cst) {
-    *cst = i & V_ASN1_CONSTRUCTED;
-  }
-
-  if (olen) {
-    *olen = plen;
-  }
-
-  if (oclass) {
-    *oclass = pclass;
-  }
-
-  if (otag) {
-    *otag = ptag;
-  }
-
-  *in = p;
-  return 1;
-}
diff --git a/src/crypto/asn1/tasn_enc.cc b/src/crypto/asn1/tasn_enc.cc
deleted file mode 100644
index 9aa2039..0000000
--- a/src/crypto/asn1/tasn_enc.cc
+++ /dev/null
@@ -1,661 +0,0 @@
-// Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved.
-//
-// 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
-//
-//     https://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 <openssl/asn1.h>
-
-#include <assert.h>
-#include <limits.h>
-#include <string.h>
-
-#include <openssl/asn1t.h>
-#include <openssl/mem.h>
-
-#include "../internal.h"
-#include "internal.h"
-
-
-static int asn1_item_ex_i2d_opt(ASN1_VALUE **pval, unsigned char **out,
-                                const ASN1_ITEM *it, int tag, int aclass,
-                                int optional);
-static int asn1_i2d_ex_primitive(ASN1_VALUE **pval, unsigned char **out,
-                                 const ASN1_ITEM *it, int tag, int aclass,
-                                 int optional);
-static int asn1_ex_i2c(ASN1_VALUE **pval, unsigned char *cont, int *out_omit,
-                       int *putype, const ASN1_ITEM *it);
-static int asn1_set_seq_out(STACK_OF(ASN1_VALUE) *sk, unsigned char **out,
-                            int skcontlen, const ASN1_ITEM *item, int do_sort);
-static int asn1_template_ex_i2d(ASN1_VALUE **pval, unsigned char **out,
-                                const ASN1_TEMPLATE *tt, int tag, int aclass,
-                                int optional);
-
-// Top level i2d equivalents
-
-int ASN1_item_i2d(ASN1_VALUE *val, unsigned char **out, const ASN1_ITEM *it) {
-  if (out && !*out) {
-    unsigned char *p, *buf;
-    int len = ASN1_item_ex_i2d(&val, NULL, it, /*tag=*/-1, /*aclass=*/0);
-    if (len <= 0) {
-      return len;
-    }
-    buf = reinterpret_cast<uint8_t *>(OPENSSL_malloc(len));
-    if (!buf) {
-      return -1;
-    }
-    p = buf;
-    int len2 = ASN1_item_ex_i2d(&val, &p, it, /*tag=*/-1, /*aclass=*/0);
-    if (len2 <= 0) {
-      OPENSSL_free(buf);
-      return len2;
-    }
-    assert(len == len2);
-    *out = buf;
-    return len;
-  }
-
-  return ASN1_item_ex_i2d(&val, out, it, /*tag=*/-1, /*aclass=*/0);
-}
-
-// Encode an item, taking care of IMPLICIT tagging (if any). This function
-// performs the normal item handling: it can be used in external types.
-
-int ASN1_item_ex_i2d(ASN1_VALUE **pval, unsigned char **out,
-                     const ASN1_ITEM *it, int tag, int aclass) {
-  int ret = asn1_item_ex_i2d_opt(pval, out, it, tag, aclass, /*optional=*/0);
-  assert(ret != 0);
-  return ret;
-}
-
-// asn1_item_ex_i2d_opt behaves like |ASN1_item_ex_i2d| but, if |optional| is
-// non-zero and |*pval| is omitted, it returns zero and writes no bytes.
-int asn1_item_ex_i2d_opt(ASN1_VALUE **pval, unsigned char **out,
-                         const ASN1_ITEM *it, int tag, int aclass,
-                         int optional) {
-  const ASN1_TEMPLATE *tt = NULL;
-  int i, seqcontlen, seqlen;
-
-  // Historically, |aclass| was repurposed to pass additional flags into the
-  // encoding process.
-  assert((aclass & ASN1_TFLG_TAG_CLASS) == aclass);
-  // If not overridding the tag, |aclass| is ignored and should be zero.
-  assert(tag != -1 || aclass == 0);
-
-  // All fields are pointers, except for boolean |ASN1_ITYPE_PRIMITIVE|s.
-  // Optional primitives are handled later.
-  if ((it->itype != ASN1_ITYPE_PRIMITIVE) && !*pval) {
-    if (optional) {
-      return 0;
-    }
-    OPENSSL_PUT_ERROR(ASN1, ASN1_R_MISSING_VALUE);
-    return -1;
-  }
-
-  switch (it->itype) {
-    case ASN1_ITYPE_PRIMITIVE:
-      if (it->templates) {
-        // This is an |ASN1_ITEM_TEMPLATE|.
-        if (it->templates->flags & ASN1_TFLG_OPTIONAL) {
-          OPENSSL_PUT_ERROR(ASN1, ASN1_R_BAD_TEMPLATE);
-          return -1;
-        }
-        return asn1_template_ex_i2d(pval, out, it->templates, tag, aclass,
-                                    optional);
-      }
-      return asn1_i2d_ex_primitive(pval, out, it, tag, aclass, optional);
-
-    case ASN1_ITYPE_MSTRING:
-      // It never makes sense for multi-strings to have implicit tagging, so
-      // if tag != -1, then this looks like an error in the template.
-      if (tag != -1) {
-        OPENSSL_PUT_ERROR(ASN1, ASN1_R_BAD_TEMPLATE);
-        return -1;
-      }
-      return asn1_i2d_ex_primitive(pval, out, it, -1, 0, optional);
-
-    case ASN1_ITYPE_CHOICE: {
-      // It never makes sense for CHOICE types to have implicit tagging, so if
-      // tag != -1, then this looks like an error in the template.
-      if (tag != -1) {
-        OPENSSL_PUT_ERROR(ASN1, ASN1_R_BAD_TEMPLATE);
-        return -1;
-      }
-      i = asn1_get_choice_selector(pval, it);
-      if (i < 0 || i >= it->tcount) {
-        OPENSSL_PUT_ERROR(ASN1, ASN1_R_NO_MATCHING_CHOICE_TYPE);
-        return -1;
-      }
-      const ASN1_TEMPLATE *chtt = it->templates + i;
-      if (chtt->flags & ASN1_TFLG_OPTIONAL) {
-        OPENSSL_PUT_ERROR(ASN1, ASN1_R_BAD_TEMPLATE);
-        return -1;
-      }
-      ASN1_VALUE **pchval = asn1_get_field_ptr(pval, chtt);
-      return asn1_template_ex_i2d(pchval, out, chtt, -1, 0, /*optional=*/0);
-    }
-
-    case ASN1_ITYPE_EXTERN: {
-      // We don't support implicit tagging with external types.
-      if (tag != -1) {
-        OPENSSL_PUT_ERROR(ASN1, ASN1_R_BAD_TEMPLATE);
-        return -1;
-      }
-      const ASN1_EXTERN_FUNCS *ef =
-          reinterpret_cast<const ASN1_EXTERN_FUNCS *>(it->funcs);
-      int ret = ef->asn1_ex_i2d(pval, out, it);
-      if (ret == 0) {
-        // |asn1_ex_i2d| should never return zero. We have already checked
-        // for optional values generically, and |ASN1_ITYPE_EXTERN| fields
-        // must be pointers.
-        OPENSSL_PUT_ERROR(ASN1, ERR_R_INTERNAL_ERROR);
-        return -1;
-      }
-      return ret;
-    }
-
-    case ASN1_ITYPE_SEQUENCE: {
-      i = asn1_enc_restore(&seqcontlen, out, pval, it);
-      // An error occurred
-      if (i < 0) {
-        return -1;
-      }
-      // We have a valid cached encoding...
-      if (i > 0) {
-        return seqcontlen;
-      }
-      // Otherwise carry on
-      seqcontlen = 0;
-      // If no IMPLICIT tagging set to SEQUENCE, UNIVERSAL
-      if (tag == -1) {
-        tag = V_ASN1_SEQUENCE;
-        aclass = V_ASN1_UNIVERSAL;
-      }
-      // First work out sequence content length
-      for (i = 0, tt = it->templates; i < it->tcount; tt++, i++) {
-        const ASN1_TEMPLATE *seqtt;
-        ASN1_VALUE **pseqval;
-        int tmplen;
-        seqtt = asn1_do_adb(pval, tt, 1);
-        if (!seqtt) {
-          return -1;
-        }
-        pseqval = asn1_get_field_ptr(pval, seqtt);
-        tmplen =
-            asn1_template_ex_i2d(pseqval, NULL, seqtt, -1, 0, /*optional=*/0);
-        if (tmplen == -1 || (tmplen > INT_MAX - seqcontlen)) {
-          return -1;
-        }
-        seqcontlen += tmplen;
-      }
-
-      seqlen = ASN1_object_size(/*constructed=*/1, seqcontlen, tag);
-      if (!out || seqlen == -1) {
-        return seqlen;
-      }
-      // Output SEQUENCE header
-      ASN1_put_object(out, /*constructed=*/1, seqcontlen, tag, aclass);
-      for (i = 0, tt = it->templates; i < it->tcount; tt++, i++) {
-        const ASN1_TEMPLATE *seqtt;
-        ASN1_VALUE **pseqval;
-        seqtt = asn1_do_adb(pval, tt, 1);
-        if (!seqtt) {
-          return -1;
-        }
-        pseqval = asn1_get_field_ptr(pval, seqtt);
-        if (asn1_template_ex_i2d(pseqval, out, seqtt, -1, 0, /*optional=*/0) <
-            0) {
-          return -1;
-        }
-      }
-      return seqlen;
-    }
-
-    default:
-      OPENSSL_PUT_ERROR(ASN1, ASN1_R_BAD_TEMPLATE);
-      return -1;
-  }
-}
-
-// asn1_template_ex_i2d behaves like |asn1_item_ex_i2d_opt| but uses an
-// |ASN1_TEMPLATE| instead of an |ASN1_ITEM|. An |ASN1_TEMPLATE| wraps an
-// |ASN1_ITEM| with modifiers such as tagging, SEQUENCE or SET, etc.
-static int asn1_template_ex_i2d(ASN1_VALUE **pval, unsigned char **out,
-                                const ASN1_TEMPLATE *tt, int tag, int iclass,
-                                int optional) {
-  int i, ret, ttag, tclass;
-  size_t j;
-  uint32_t flags = tt->flags;
-
-  // Historically, |iclass| was repurposed to pass additional flags into the
-  // encoding process.
-  assert((iclass & ASN1_TFLG_TAG_CLASS) == iclass);
-  // If not overridding the tag, |iclass| is ignored and should be zero.
-  assert(tag != -1 || iclass == 0);
-
-  // Work out tag and class to use: tagging may come either from the
-  // template or the arguments, not both because this would create
-  // ambiguity.
-  if (flags & ASN1_TFLG_TAG_MASK) {
-    // Error if argument and template tagging
-    if (tag != -1) {
-      OPENSSL_PUT_ERROR(ASN1, ASN1_R_BAD_TEMPLATE);
-      return -1;
-    }
-    // Get tagging from template
-    ttag = tt->tag;
-    tclass = flags & ASN1_TFLG_TAG_CLASS;
-  } else if (tag != -1) {
-    // No template tagging, get from arguments
-    ttag = tag;
-    tclass = iclass & ASN1_TFLG_TAG_CLASS;
-  } else {
-    ttag = -1;
-    tclass = 0;
-  }
-
-  // The template may itself by marked as optional, or this may be the template
-  // of an |ASN1_ITEM_TEMPLATE| type which was contained inside an outer
-  // optional template. (They cannot both be true because the
-  // |ASN1_ITEM_TEMPLATE| codepath rejects optional templates.)
-  assert(!optional || (flags & ASN1_TFLG_OPTIONAL) == 0);
-  optional = optional || (flags & ASN1_TFLG_OPTIONAL) != 0;
-
-  // At this point 'ttag' contains the outer tag to use, and 'tclass' is the
-  // class.
-
-  if (flags & ASN1_TFLG_SK_MASK) {
-    // SET OF, SEQUENCE OF
-    STACK_OF(ASN1_VALUE) *sk = (STACK_OF(ASN1_VALUE) *)*pval;
-    int isset, sktag, skaclass;
-    int skcontlen, sklen;
-    ASN1_VALUE *skitem;
-
-    if (!*pval) {
-      if (optional) {
-        return 0;
-      }
-      OPENSSL_PUT_ERROR(ASN1, ASN1_R_MISSING_VALUE);
-      return -1;
-    }
-
-    if (flags & ASN1_TFLG_SET_OF) {
-      isset = 1;
-      // Historically, types with both bits set were mutated when
-      // serialized to apply the sort. We no longer support this.
-      assert((flags & ASN1_TFLG_SEQUENCE_OF) == 0);
-    } else {
-      isset = 0;
-    }
-
-    // Work out inner tag value: if EXPLICIT or no tagging use underlying
-    // type.
-    if ((ttag != -1) && !(flags & ASN1_TFLG_EXPTAG)) {
-      sktag = ttag;
-      skaclass = tclass;
-    } else {
-      skaclass = V_ASN1_UNIVERSAL;
-      if (isset) {
-        sktag = V_ASN1_SET;
-      } else {
-        sktag = V_ASN1_SEQUENCE;
-      }
-    }
-
-    // Determine total length of items
-    skcontlen = 0;
-    for (j = 0; j < sk_ASN1_VALUE_num(sk); j++) {
-      int tmplen;
-      skitem = sk_ASN1_VALUE_value(sk, j);
-      tmplen = ASN1_item_ex_i2d(&skitem, NULL, ASN1_ITEM_ptr(tt->item), -1, 0);
-      if (tmplen == -1 || (skcontlen > INT_MAX - tmplen)) {
-        return -1;
-      }
-      skcontlen += tmplen;
-    }
-    sklen = ASN1_object_size(/*constructed=*/1, skcontlen, sktag);
-    if (sklen == -1) {
-      return -1;
-    }
-    // If EXPLICIT need length of surrounding tag
-    if (flags & ASN1_TFLG_EXPTAG) {
-      ret = ASN1_object_size(/*constructed=*/1, sklen, ttag);
-    } else {
-      ret = sklen;
-    }
-
-    if (!out || ret == -1) {
-      return ret;
-    }
-
-    // Now encode this lot...
-    // EXPLICIT tag
-    if (flags & ASN1_TFLG_EXPTAG) {
-      ASN1_put_object(out, /*constructed=*/1, sklen, ttag, tclass);
-    }
-    // SET or SEQUENCE and IMPLICIT tag
-    ASN1_put_object(out, /*constructed=*/1, skcontlen, sktag, skaclass);
-    // And the stuff itself
-    if (!asn1_set_seq_out(sk, out, skcontlen, ASN1_ITEM_ptr(tt->item), isset)) {
-      return -1;
-    }
-    return ret;
-  }
-
-  if (flags & ASN1_TFLG_EXPTAG) {
-    // EXPLICIT tagging
-    // Find length of tagged item
-    i = asn1_item_ex_i2d_opt(pval, NULL, ASN1_ITEM_ptr(tt->item), -1, 0,
-                             optional);
-    if (i <= 0) {
-      return i;
-    }
-    // Find length of EXPLICIT tag
-    ret = ASN1_object_size(/*constructed=*/1, i, ttag);
-    if (out && ret != -1) {
-      // Output tag and item
-      ASN1_put_object(out, /*constructed=*/1, i, ttag, tclass);
-      if (ASN1_item_ex_i2d(pval, out, ASN1_ITEM_ptr(tt->item), -1, 0) < 0) {
-        return -1;
-      }
-    }
-    return ret;
-  }
-
-  // Either normal or IMPLICIT tagging
-  return asn1_item_ex_i2d_opt(pval, out, ASN1_ITEM_ptr(tt->item), ttag, tclass,
-                              optional);
-}
-
-// Temporary structure used to hold DER encoding of items for SET OF
-
-typedef struct {
-  unsigned char *data;
-  int length;
-} DER_ENC;
-
-static int der_cmp(const void *a, const void *b) {
-  const DER_ENC *d1 = reinterpret_cast<const DER_ENC *>(a),
-                *d2 = reinterpret_cast<const DER_ENC *>(b);
-  int cmplen, i;
-  cmplen = (d1->length < d2->length) ? d1->length : d2->length;
-  i = OPENSSL_memcmp(d1->data, d2->data, cmplen);
-  if (i) {
-    return i;
-  }
-  return d1->length - d2->length;
-}
-
-// asn1_set_seq_out writes |sk| to |out| under the i2d output convention,
-// excluding the tag and length. It returns one on success and zero on error.
-// |skcontlen| must be the total encoded size. If |do_sort| is non-zero, the
-// elements are sorted for a SET OF type. Each element of |sk| has type
-// |item|.
-static int asn1_set_seq_out(STACK_OF(ASN1_VALUE) *sk, unsigned char **out,
-                            int skcontlen, const ASN1_ITEM *item, int do_sort) {
-  // No need to sort if there are fewer than two items.
-  if (!do_sort || sk_ASN1_VALUE_num(sk) < 2) {
-    for (size_t i = 0; i < sk_ASN1_VALUE_num(sk); i++) {
-      ASN1_VALUE *skitem = sk_ASN1_VALUE_value(sk, i);
-      if (ASN1_item_ex_i2d(&skitem, out, item, -1, 0) < 0) {
-        return 0;
-      }
-    }
-    return 1;
-  }
-
-  int ret = 0;
-  uint8_t *const buf = reinterpret_cast<uint8_t *>(OPENSSL_malloc(skcontlen));
-  DER_ENC *encoded = reinterpret_cast<DER_ENC *>(
-      OPENSSL_calloc(sk_ASN1_VALUE_num(sk), sizeof(*encoded)));
-  uint8_t *p = buf;
-  if (encoded == NULL || buf == NULL) {
-    goto err;
-  }
-
-  // Encode all the elements into |buf| and populate |encoded|.
-  for (size_t i = 0; i < sk_ASN1_VALUE_num(sk); i++) {
-    ASN1_VALUE *skitem = sk_ASN1_VALUE_value(sk, i);
-    encoded[i].data = p;
-    encoded[i].length = ASN1_item_ex_i2d(&skitem, &p, item, -1, 0);
-    if (encoded[i].length < 0) {
-      goto err;
-    }
-    assert(p - buf <= skcontlen);
-  }
-
-  qsort(encoded, sk_ASN1_VALUE_num(sk), sizeof(*encoded), der_cmp);
-
-  // Output the elements in sorted order.
-  p = *out;
-  for (size_t i = 0; i < sk_ASN1_VALUE_num(sk); i++) {
-    OPENSSL_memcpy(p, encoded[i].data, encoded[i].length);
-    p += encoded[i].length;
-  }
-  *out = p;
-
-  ret = 1;
-
-err:
-  OPENSSL_free(encoded);
-  OPENSSL_free(buf);
-  return ret;
-}
-
-// asn1_i2d_ex_primitive behaves like |ASN1_item_ex_i2d| but |item| must be a
-// a PRIMITIVE or MSTRING type that is not an |ASN1_ITEM_TEMPLATE|.
-static int asn1_i2d_ex_primitive(ASN1_VALUE **pval, unsigned char **out,
-                                 const ASN1_ITEM *it, int tag, int aclass,
-                                 int optional) {
-  // Get length of content octets and maybe find out the underlying type.
-  int omit;
-  int utype = it->utype;
-  int len = asn1_ex_i2c(pval, NULL, &omit, &utype, it);
-  if (len < 0) {
-    return -1;
-  }
-  if (omit) {
-    if (optional) {
-      return 0;
-    }
-    OPENSSL_PUT_ERROR(ASN1, ASN1_R_MISSING_VALUE);
-    return -1;
-  }
-
-  // If SEQUENCE, SET or OTHER then header is included in pseudo content
-  // octets so don't include tag+length. We need to check here because the
-  // call to asn1_ex_i2c() could change utype.
-  int usetag =
-      utype != V_ASN1_SEQUENCE && utype != V_ASN1_SET && utype != V_ASN1_OTHER;
-
-  // If not implicitly tagged get tag from underlying type
-  if (tag == -1) {
-    tag = utype;
-  }
-
-  // Output tag+length followed by content octets
-  if (out) {
-    if (usetag) {
-      ASN1_put_object(out, /*constructed=*/0, len, tag, aclass);
-    }
-    int len2 = asn1_ex_i2c(pval, *out, &omit, &utype, it);
-    if (len2 < 0) {
-      return -1;
-    }
-    assert(len == len2);
-    assert(!omit);
-    *out += len;
-  }
-
-  if (usetag) {
-    return ASN1_object_size(/*constructed=*/0, len, tag);
-  }
-  return len;
-}
-
-// asn1_ex_i2c writes the |*pval| to |cout| under the i2d output convention,
-// excluding the tag and length. It returns the number of bytes written,
-// possibly zero, on success or -1 on error. If |*pval| should be omitted, it
-// returns zero and sets |*out_omit| to true.
-//
-// If |it| is an MSTRING or ANY type, it gets the underlying type from |*pval|,
-// which must be an |ASN1_STRING| or |ASN1_TYPE|, respectively. It then updates
-// |*putype| with the tag number of type used, or |V_ASN1_OTHER| if it was not a
-// universal type. If |*putype| is set to |V_ASN1_SEQUENCE|, |V_ASN1_SET|, or
-// |V_ASN1_OTHER|, it additionally outputs the tag and length, so the caller
-// must not do so.
-//
-// Otherwise, |*putype| must contain |it->utype|.
-//
-// WARNING: Unlike most functions in this file, |asn1_ex_i2c| can return zero
-// without omitting the element. ASN.1 values may have empty contents.
-static int asn1_ex_i2c(ASN1_VALUE **pval, unsigned char *cout, int *out_omit,
-                       int *putype, const ASN1_ITEM *it) {
-  ASN1_BOOLEAN *tbool = NULL;
-  ASN1_STRING *strtmp;
-  ASN1_OBJECT *otmp;
-  int utype;
-  const unsigned char *cont;
-  unsigned char c;
-  int len;
-
-  assert(it->itype == ASN1_ITYPE_PRIMITIVE || it->itype == ASN1_ITYPE_MSTRING);
-  // Historically, |it->funcs| for primitive types contained an
-  // |ASN1_PRIMITIVE_FUNCS| table of callbacks.
-  assert(it->funcs == NULL);
-
-  *out_omit = 0;
-
-  // Handle omitted optional values for all but BOOLEAN, which uses a
-  // non-pointer representation.
-  if (it->itype != ASN1_ITYPE_PRIMITIVE || it->utype != V_ASN1_BOOLEAN) {
-    if (!*pval) {
-      *out_omit = 1;
-      return 0;
-    }
-  }
-
-  if (it->itype == ASN1_ITYPE_MSTRING || it->utype == V_ASN1_ANY_AS_STRING) {
-    // If MSTRING type set the underlying type
-    strtmp = (ASN1_STRING *)*pval;
-    utype = strtmp->type;
-    if (utype < 0 && utype != V_ASN1_OTHER) {
-      // MSTRINGs can have type -1 when default-constructed.
-      OPENSSL_PUT_ERROR(ASN1, ASN1_R_WRONG_TYPE);
-      return -1;
-    }
-    // Negative INTEGER and ENUMERATED values use |ASN1_STRING| type values that
-    // do not match their corresponding utype values.
-    if (utype == V_ASN1_NEG_INTEGER) {
-      utype = V_ASN1_INTEGER;
-    } else if (utype == V_ASN1_NEG_ENUMERATED) {
-      utype = V_ASN1_ENUMERATED;
-    }
-    *putype = utype;
-  } else if (it->utype == V_ASN1_ANY) {
-    // If ANY set type and pointer to value
-    ASN1_TYPE *typ;
-    typ = (ASN1_TYPE *)*pval;
-    utype = typ->type;
-    if (utype < 0 && utype != V_ASN1_OTHER) {
-      // |ASN1_TYPE|s can have type -1 when default-constructed.
-      OPENSSL_PUT_ERROR(ASN1, ASN1_R_WRONG_TYPE);
-      return -1;
-    }
-    *putype = utype;
-    pval = &typ->value.asn1_value;
-  } else {
-    utype = *putype;
-  }
-
-  switch (utype) {
-    case V_ASN1_OBJECT:
-      otmp = (ASN1_OBJECT *)*pval;
-      cont = otmp->data;
-      len = otmp->length;
-      if (len == 0) {
-        // Some |ASN1_OBJECT|s do not have OIDs and cannot be serialized.
-        OPENSSL_PUT_ERROR(ASN1, ASN1_R_ILLEGAL_OBJECT);
-        return -1;
-      }
-      break;
-
-    case V_ASN1_NULL:
-      cont = NULL;
-      len = 0;
-      break;
-
-    case V_ASN1_BOOLEAN:
-      tbool = (ASN1_BOOLEAN *)pval;
-      if (*tbool == ASN1_BOOLEAN_NONE) {
-        *out_omit = 1;
-        return 0;
-      }
-      if (it->utype != V_ASN1_ANY) {
-        // Default handling if value == size field then omit
-        if ((*tbool && (it->size > 0)) || (!*tbool && !it->size)) {
-          *out_omit = 1;
-          return 0;
-        }
-      }
-      c = *tbool ? 0xff : 0x00;
-      cont = &c;
-      len = 1;
-      break;
-
-    case V_ASN1_BIT_STRING: {
-      int ret =
-          i2c_ASN1_BIT_STRING((ASN1_BIT_STRING *)*pval, cout ? &cout : NULL);
-      // |i2c_ASN1_BIT_STRING| returns zero on error instead of -1.
-      return ret <= 0 ? -1 : ret;
-    }
-
-    case V_ASN1_INTEGER:
-    case V_ASN1_ENUMERATED: {
-      // |i2c_ASN1_INTEGER| also handles ENUMERATED.
-      int ret = i2c_ASN1_INTEGER((ASN1_INTEGER *)*pval, cout ? &cout : NULL);
-      // |i2c_ASN1_INTEGER| returns zero on error instead of -1.
-      return ret <= 0 ? -1 : ret;
-    }
-
-    case V_ASN1_OCTET_STRING:
-    case V_ASN1_NUMERICSTRING:
-    case V_ASN1_PRINTABLESTRING:
-    case V_ASN1_T61STRING:
-    case V_ASN1_VIDEOTEXSTRING:
-    case V_ASN1_IA5STRING:
-    case V_ASN1_UTCTIME:
-    case V_ASN1_GENERALIZEDTIME:
-    case V_ASN1_GRAPHICSTRING:
-    case V_ASN1_VISIBLESTRING:
-    case V_ASN1_GENERALSTRING:
-    case V_ASN1_UNIVERSALSTRING:
-    case V_ASN1_BMPSTRING:
-    case V_ASN1_UTF8STRING:
-    case V_ASN1_SEQUENCE:
-    case V_ASN1_SET:
-    // This is not a valid |ASN1_ITEM| type, but it appears in |ASN1_TYPE|.
-    case V_ASN1_OTHER:
-      // All based on ASN1_STRING and handled the same
-      strtmp = (ASN1_STRING *)*pval;
-      cont = strtmp->data;
-      len = strtmp->length;
-      break;
-
-    default:
-      OPENSSL_PUT_ERROR(ASN1, ASN1_R_BAD_TEMPLATE);
-      return -1;
-  }
-  if (cout && len) {
-    OPENSSL_memcpy(cout, cont, len);
-  }
-  return len;
-}
diff --git a/src/crypto/asn1/tasn_fre.cc b/src/crypto/asn1/tasn_fre.cc
deleted file mode 100644
index 8d1fefe..0000000
--- a/src/crypto/asn1/tasn_fre.cc
+++ /dev/null
@@ -1,164 +0,0 @@
-// Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved.
-//
-// 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
-//
-//     https://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 <openssl/asn1.h>
-
-#include <assert.h>
-
-#include <openssl/asn1t.h>
-#include <openssl/mem.h>
-
-#include "internal.h"
-
-// Free up an ASN1 structure
-
-void ASN1_item_free(ASN1_VALUE *val, const ASN1_ITEM *it) {
-  ASN1_item_ex_free(&val, it);
-}
-
-void ASN1_item_ex_free(ASN1_VALUE **pval, const ASN1_ITEM *it) {
-  if (!pval) {
-    return;
-  }
-  if ((it->itype != ASN1_ITYPE_PRIMITIVE) && !*pval) {
-    return;
-  }
-
-  switch (it->itype) {
-    case ASN1_ITYPE_PRIMITIVE:
-      if (it->templates) {
-        ASN1_template_free(pval, it->templates);
-      } else {
-        ASN1_primitive_free(pval, it);
-      }
-      break;
-
-    case ASN1_ITYPE_MSTRING:
-      ASN1_primitive_free(pval, it);
-      break;
-
-    case ASN1_ITYPE_CHOICE: {
-      const ASN1_AUX *aux = reinterpret_cast<const ASN1_AUX *>(it->funcs);
-      ASN1_aux_cb *asn1_cb = aux != NULL ? aux->asn1_cb : NULL;
-      if (asn1_cb) {
-        if (asn1_cb(ASN1_OP_FREE_PRE, pval, it, NULL) == 2) {
-          return;
-        }
-      }
-      int i = asn1_get_choice_selector(pval, it);
-      if ((i >= 0) && (i < it->tcount)) {
-        const ASN1_TEMPLATE *tt = it->templates + i;
-        ASN1_VALUE **pchval = asn1_get_field_ptr(pval, tt);
-        ASN1_template_free(pchval, tt);
-      }
-      if (asn1_cb) {
-        asn1_cb(ASN1_OP_FREE_POST, pval, it, NULL);
-      }
-      OPENSSL_free(*pval);
-      *pval = NULL;
-      break;
-    }
-
-    case ASN1_ITYPE_EXTERN: {
-      const ASN1_EXTERN_FUNCS *ef =
-          reinterpret_cast<const ASN1_EXTERN_FUNCS *>(it->funcs);
-      if (ef && ef->asn1_ex_free) {
-        ef->asn1_ex_free(pval, it);
-      }
-      break;
-    }
-
-    case ASN1_ITYPE_SEQUENCE: {
-      if (!asn1_refcount_dec_and_test_zero(pval, it)) {
-        return;
-      }
-      const ASN1_AUX *aux = reinterpret_cast<const ASN1_AUX *>(it->funcs);
-      ASN1_aux_cb *asn1_cb = aux != NULL ? aux->asn1_cb : NULL;
-      if (asn1_cb) {
-        if (asn1_cb(ASN1_OP_FREE_PRE, pval, it, NULL) == 2) {
-          return;
-        }
-      }
-      asn1_enc_free(pval, it);
-      // If we free up as normal we will invalidate any ANY DEFINED BY
-      // field and we wont be able to determine the type of the field it
-      // defines. So free up in reverse order.
-      for (int i = it->tcount - 1; i >= 0; i--) {
-        const ASN1_TEMPLATE *seqtt = asn1_do_adb(pval, &it->templates[i], 0);
-        if (!seqtt) {
-          continue;
-        }
-        ASN1_VALUE **pseqval = asn1_get_field_ptr(pval, seqtt);
-        ASN1_template_free(pseqval, seqtt);
-      }
-      if (asn1_cb) {
-        asn1_cb(ASN1_OP_FREE_POST, pval, it, NULL);
-      }
-      OPENSSL_free(*pval);
-      *pval = NULL;
-      break;
-    }
-  }
-}
-
-void ASN1_template_free(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt) {
-  if (tt->flags & ASN1_TFLG_SK_MASK) {
-    STACK_OF(ASN1_VALUE) *sk = (STACK_OF(ASN1_VALUE) *)*pval;
-    for (size_t i = 0; i < sk_ASN1_VALUE_num(sk); i++) {
-      ASN1_VALUE *vtmp = sk_ASN1_VALUE_value(sk, i);
-      ASN1_item_ex_free(&vtmp, ASN1_ITEM_ptr(tt->item));
-    }
-    sk_ASN1_VALUE_free(sk);
-    *pval = NULL;
-  } else {
-    ASN1_item_ex_free(pval, ASN1_ITEM_ptr(tt->item));
-  }
-}
-
-void ASN1_primitive_free(ASN1_VALUE **pval, const ASN1_ITEM *it) {
-  // Historically, |it->funcs| for primitive types contained an
-  // |ASN1_PRIMITIVE_FUNCS| table of calbacks.
-  assert(it->funcs == NULL);
-
-  int utype = it->itype == ASN1_ITYPE_MSTRING ? -1 : it->utype;
-  switch (utype) {
-    case V_ASN1_OBJECT:
-      ASN1_OBJECT_free((ASN1_OBJECT *)*pval);
-      break;
-
-    case V_ASN1_BOOLEAN:
-      if (it) {
-        *(ASN1_BOOLEAN *)pval = (ASN1_BOOLEAN)it->size;
-      } else {
-        *(ASN1_BOOLEAN *)pval = ASN1_BOOLEAN_NONE;
-      }
-      return;
-
-    case V_ASN1_NULL:
-      break;
-
-    case V_ASN1_ANY:
-      if (*pval != NULL) {
-        asn1_type_cleanup((ASN1_TYPE *)*pval);
-        OPENSSL_free(*pval);
-      }
-      break;
-
-    default:
-      ASN1_STRING_free((ASN1_STRING *)*pval);
-      *pval = NULL;
-      break;
-  }
-  *pval = NULL;
-}
diff --git a/src/crypto/asn1/tasn_new.cc b/src/crypto/asn1/tasn_new.cc
deleted file mode 100644
index 13bdbb8..0000000
--- a/src/crypto/asn1/tasn_new.cc
+++ /dev/null
@@ -1,276 +0,0 @@
-// Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved.
-//
-// 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
-//
-//     https://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 <openssl/asn1.h>
-
-#include <string.h>
-
-#include <openssl/asn1t.h>
-#include <openssl/err.h>
-#include <openssl/mem.h>
-#include <openssl/obj.h>
-
-#include "../internal.h"
-#include "internal.h"
-
-
-static void asn1_item_clear(ASN1_VALUE **pval, const ASN1_ITEM *it);
-static int ASN1_template_new(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt);
-static void asn1_template_clear(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt);
-static int ASN1_primitive_new(ASN1_VALUE **pval, const ASN1_ITEM *it);
-static void asn1_primitive_clear(ASN1_VALUE **pval, const ASN1_ITEM *it);
-
-ASN1_VALUE *ASN1_item_new(const ASN1_ITEM *it) {
-  ASN1_VALUE *ret = NULL;
-  if (ASN1_item_ex_new(&ret, it) > 0) {
-    return ret;
-  }
-  return NULL;
-}
-
-// Allocate an ASN1 structure
-
-int ASN1_item_ex_new(ASN1_VALUE **pval, const ASN1_ITEM *it) {
-  const ASN1_TEMPLATE *tt = NULL;
-  const ASN1_EXTERN_FUNCS *ef;
-  ASN1_VALUE **pseqval;
-  int i;
-
-  switch (it->itype) {
-    case ASN1_ITYPE_EXTERN:
-      ef = reinterpret_cast<const ASN1_EXTERN_FUNCS *>(it->funcs);
-      if (ef && ef->asn1_ex_new) {
-        if (!ef->asn1_ex_new(pval, it)) {
-          goto memerr;
-        }
-      }
-      break;
-
-    case ASN1_ITYPE_PRIMITIVE:
-      if (it->templates) {
-        if (!ASN1_template_new(pval, it->templates)) {
-          goto memerr;
-        }
-      } else if (!ASN1_primitive_new(pval, it)) {
-        goto memerr;
-      }
-      break;
-
-    case ASN1_ITYPE_MSTRING:
-      if (!ASN1_primitive_new(pval, it)) {
-        goto memerr;
-      }
-      break;
-
-    case ASN1_ITYPE_CHOICE: {
-      const ASN1_AUX *aux = reinterpret_cast<const ASN1_AUX *>(it->funcs);
-      ASN1_aux_cb *asn1_cb = aux != NULL ? aux->asn1_cb : NULL;
-      if (asn1_cb) {
-        i = asn1_cb(ASN1_OP_NEW_PRE, pval, it, NULL);
-        if (!i) {
-          goto auxerr;
-        }
-        if (i == 2) {
-          return 1;
-        }
-      }
-      *pval = reinterpret_cast<ASN1_VALUE *>(OPENSSL_zalloc(it->size));
-      if (!*pval) {
-        goto memerr;
-      }
-      asn1_set_choice_selector(pval, -1, it);
-      if (asn1_cb && !asn1_cb(ASN1_OP_NEW_POST, pval, it, NULL)) {
-        goto auxerr2;
-      }
-      break;
-    }
-
-    case ASN1_ITYPE_SEQUENCE: {
-      const ASN1_AUX *aux = reinterpret_cast<const ASN1_AUX *>(it->funcs);
-      ASN1_aux_cb *asn1_cb = aux != NULL ? aux->asn1_cb : NULL;
-      if (asn1_cb) {
-        i = asn1_cb(ASN1_OP_NEW_PRE, pval, it, NULL);
-        if (!i) {
-          goto auxerr;
-        }
-        if (i == 2) {
-          return 1;
-        }
-      }
-      *pval = reinterpret_cast<ASN1_VALUE *>(OPENSSL_zalloc(it->size));
-      if (!*pval) {
-        goto memerr;
-      }
-      asn1_refcount_set_one(pval, it);
-      asn1_enc_init(pval, it);
-      for (i = 0, tt = it->templates; i < it->tcount; tt++, i++) {
-        pseqval = asn1_get_field_ptr(pval, tt);
-        if (!ASN1_template_new(pseqval, tt)) {
-          goto memerr2;
-        }
-      }
-      if (asn1_cb && !asn1_cb(ASN1_OP_NEW_POST, pval, it, NULL)) {
-        goto auxerr2;
-      }
-      break;
-    }
-  }
-  return 1;
-
-memerr2:
-  ASN1_item_ex_free(pval, it);
-memerr:
-  return 0;
-
-auxerr2:
-  ASN1_item_ex_free(pval, it);
-auxerr:
-  OPENSSL_PUT_ERROR(ASN1, ASN1_R_AUX_ERROR);
-  return 0;
-}
-
-static void asn1_item_clear(ASN1_VALUE **pval, const ASN1_ITEM *it) {
-  switch (it->itype) {
-    case ASN1_ITYPE_EXTERN:
-      *pval = NULL;
-      break;
-
-    case ASN1_ITYPE_PRIMITIVE:
-      if (it->templates) {
-        asn1_template_clear(pval, it->templates);
-      } else {
-        asn1_primitive_clear(pval, it);
-      }
-      break;
-
-    case ASN1_ITYPE_MSTRING:
-      asn1_primitive_clear(pval, it);
-      break;
-
-    case ASN1_ITYPE_CHOICE:
-    case ASN1_ITYPE_SEQUENCE:
-      *pval = NULL;
-      break;
-  }
-}
-
-static int ASN1_template_new(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt) {
-  const ASN1_ITEM *it = ASN1_ITEM_ptr(tt->item);
-  int ret;
-  if (tt->flags & ASN1_TFLG_OPTIONAL) {
-    asn1_template_clear(pval, tt);
-    return 1;
-  }
-  // If ANY DEFINED BY nothing to do
-
-  if (tt->flags & ASN1_TFLG_ADB_MASK) {
-    *pval = NULL;
-    return 1;
-  }
-  // If SET OF or SEQUENCE OF, its a STACK
-  if (tt->flags & ASN1_TFLG_SK_MASK) {
-    STACK_OF(ASN1_VALUE) *skval;
-    skval = sk_ASN1_VALUE_new_null();
-    if (!skval) {
-      ret = 0;
-      goto done;
-    }
-    *pval = (ASN1_VALUE *)skval;
-    ret = 1;
-    goto done;
-  }
-  // Otherwise pass it back to the item routine
-  ret = ASN1_item_ex_new(pval, it);
-done:
-  return ret;
-}
-
-static void asn1_template_clear(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt) {
-  // If ADB or STACK just NULL the field
-  if (tt->flags & (ASN1_TFLG_ADB_MASK | ASN1_TFLG_SK_MASK)) {
-    *pval = NULL;
-  } else {
-    asn1_item_clear(pval, ASN1_ITEM_ptr(tt->item));
-  }
-}
-
-// NB: could probably combine most of the real XXX_new() behaviour and junk
-// all the old functions.
-
-static int ASN1_primitive_new(ASN1_VALUE **pval, const ASN1_ITEM *it) {
-  if (!it) {
-    return 0;
-  }
-
-  // Historically, |it->funcs| for primitive types contained an
-  // |ASN1_PRIMITIVE_FUNCS| table of calbacks.
-  assert(it->funcs == NULL);
-
-  int utype;
-  if (it->itype == ASN1_ITYPE_MSTRING) {
-    utype = -1;
-  } else {
-    utype = it->utype;
-  }
-  switch (utype) {
-    case V_ASN1_OBJECT:
-      *pval = (ASN1_VALUE *)OBJ_get_undef();
-      return 1;
-
-    case V_ASN1_BOOLEAN:
-      *(ASN1_BOOLEAN *)pval = (ASN1_BOOLEAN)it->size;
-      return 1;
-
-    case V_ASN1_NULL:
-      *pval = (ASN1_VALUE *)1;
-      return 1;
-
-    case V_ASN1_ANY: {
-      ASN1_TYPE *typ =
-          reinterpret_cast<ASN1_TYPE *>(OPENSSL_malloc(sizeof(ASN1_TYPE)));
-      if (!typ) {
-        return 0;
-      }
-      typ->value.ptr = NULL;
-      typ->type = -1;
-      *pval = (ASN1_VALUE *)typ;
-      break;
-    }
-
-    default:
-      *pval = (ASN1_VALUE *)ASN1_STRING_type_new(utype);
-      break;
-  }
-  if (*pval) {
-    return 1;
-  }
-  return 0;
-}
-
-static void asn1_primitive_clear(ASN1_VALUE **pval, const ASN1_ITEM *it) {
-  int utype;
-  // Historically, |it->funcs| for primitive types contained an
-  // |ASN1_PRIMITIVE_FUNCS| table of calbacks.
-  assert(it == NULL || it->funcs == NULL);
-  if (!it || (it->itype == ASN1_ITYPE_MSTRING)) {
-    utype = -1;
-  } else {
-    utype = it->utype;
-  }
-  if (utype == V_ASN1_BOOLEAN) {
-    *(ASN1_BOOLEAN *)pval = (ASN1_BOOLEAN)it->size;
-  } else {
-    *pval = NULL;
-  }
-}
diff --git a/src/crypto/asn1/tasn_typ.cc b/src/crypto/asn1/tasn_typ.cc
deleted file mode 100644
index 1d11ae8..0000000
--- a/src/crypto/asn1/tasn_typ.cc
+++ /dev/null
@@ -1,80 +0,0 @@
-// Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved.
-//
-// 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
-//
-//     https://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 <openssl/asn1.h>
-
-#include <openssl/asn1t.h>
-
-#include "internal.h"
-
-
-#define IMPLEMENT_ASN1_STRING_FUNCTIONS(sname)                         \
-  IMPLEMENT_ASN1_TYPE(sname)                                           \
-  IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(sname, sname, sname)     \
-  sname *sname##_new(void) { return ASN1_STRING_type_new(V_##sname); } \
-  void sname##_free(sname *x) { ASN1_STRING_free(x); }
-
-IMPLEMENT_ASN1_STRING_FUNCTIONS(ASN1_OCTET_STRING)
-IMPLEMENT_ASN1_STRING_FUNCTIONS(ASN1_INTEGER)
-IMPLEMENT_ASN1_STRING_FUNCTIONS(ASN1_ENUMERATED)
-IMPLEMENT_ASN1_STRING_FUNCTIONS(ASN1_BIT_STRING)
-IMPLEMENT_ASN1_STRING_FUNCTIONS(ASN1_UTF8STRING)
-IMPLEMENT_ASN1_STRING_FUNCTIONS(ASN1_PRINTABLESTRING)
-IMPLEMENT_ASN1_STRING_FUNCTIONS(ASN1_T61STRING)
-IMPLEMENT_ASN1_STRING_FUNCTIONS(ASN1_IA5STRING)
-IMPLEMENT_ASN1_STRING_FUNCTIONS(ASN1_GENERALSTRING)
-IMPLEMENT_ASN1_STRING_FUNCTIONS(ASN1_UTCTIME)
-IMPLEMENT_ASN1_STRING_FUNCTIONS(ASN1_GENERALIZEDTIME)
-IMPLEMENT_ASN1_STRING_FUNCTIONS(ASN1_VISIBLESTRING)
-IMPLEMENT_ASN1_STRING_FUNCTIONS(ASN1_UNIVERSALSTRING)
-IMPLEMENT_ASN1_STRING_FUNCTIONS(ASN1_BMPSTRING)
-
-IMPLEMENT_ASN1_TYPE(ASN1_NULL)
-IMPLEMENT_ASN1_FUNCTIONS_const(ASN1_NULL)
-
-IMPLEMENT_ASN1_TYPE(ASN1_OBJECT)
-
-IMPLEMENT_ASN1_TYPE(ASN1_ANY)
-IMPLEMENT_ASN1_TYPE(ASN1_ANY_AS_STRING)
-
-// Just swallow an ASN1_SEQUENCE in an ASN1_STRING
-IMPLEMENT_ASN1_TYPE(ASN1_SEQUENCE)
-
-IMPLEMENT_ASN1_FUNCTIONS_const_fname(ASN1_TYPE, ASN1_ANY, ASN1_TYPE)
-
-IMPLEMENT_ASN1_MSTRING(DISPLAYTEXT, B_ASN1_DISPLAYTEXT)
-IMPLEMENT_ASN1_FUNCTIONS_const_fname(ASN1_STRING, DISPLAYTEXT, DISPLAYTEXT)
-
-IMPLEMENT_ASN1_MSTRING(DIRECTORYSTRING, B_ASN1_DIRECTORYSTRING)
-IMPLEMENT_ASN1_FUNCTIONS_const_fname(ASN1_STRING, DIRECTORYSTRING,
-                                     DIRECTORYSTRING)
-
-// Three separate BOOLEAN type: normal, DEFAULT TRUE and DEFAULT FALSE
-IMPLEMENT_ASN1_TYPE_ex(ASN1_BOOLEAN, ASN1_BOOLEAN, ASN1_BOOLEAN_NONE)
-IMPLEMENT_ASN1_TYPE_ex(ASN1_TBOOLEAN, ASN1_BOOLEAN, ASN1_BOOLEAN_TRUE)
-IMPLEMENT_ASN1_TYPE_ex(ASN1_FBOOLEAN, ASN1_BOOLEAN, ASN1_BOOLEAN_FALSE)
-
-ASN1_ITEM_TEMPLATE(ASN1_SEQUENCE_ANY) =
-    ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, ASN1_SEQUENCE_ANY, ASN1_ANY)
-ASN1_ITEM_TEMPLATE_END(ASN1_SEQUENCE_ANY)
-
-ASN1_ITEM_TEMPLATE(ASN1_SET_ANY) = ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SET_OF, 0,
-                                                         ASN1_SET_ANY, ASN1_ANY)
-ASN1_ITEM_TEMPLATE_END(ASN1_SET_ANY)
-
-IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(ASN1_SEQUENCE_ANY,
-                                            ASN1_SEQUENCE_ANY,
-                                            ASN1_SEQUENCE_ANY)
-IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(ASN1_SEQUENCE_ANY, ASN1_SET_ANY,
-                                            ASN1_SET_ANY)
diff --git a/src/crypto/asn1/tasn_utl.cc b/src/crypto/asn1/tasn_utl.cc
deleted file mode 100644
index 4faf5cd..0000000
--- a/src/crypto/asn1/tasn_utl.cc
+++ /dev/null
@@ -1,229 +0,0 @@
-// Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved.
-//
-// 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
-//
-//     https://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 <openssl/asn1.h>
-
-#include <assert.h>
-#include <string.h>
-
-#include <openssl/asn1t.h>
-#include <openssl/err.h>
-#include <openssl/mem.h>
-#include <openssl/obj.h>
-#include <openssl/pool.h>
-#include <openssl/thread.h>
-
-#include "../internal.h"
-#include "internal.h"
-
-
-// Utility functions for manipulating fields and offsets
-
-// Add 'offset' to 'addr'
-#define offset2ptr(addr, offset) (void *)(((char *)(addr)) + (offset))
-
-// Given an ASN1_ITEM CHOICE type return the selector value
-int asn1_get_choice_selector(ASN1_VALUE **pval, const ASN1_ITEM *it) {
-  int *sel = reinterpret_cast<int *>(offset2ptr(*pval, it->utype));
-  return *sel;
-}
-
-// Given an ASN1_ITEM CHOICE type set the selector value, return old value.
-int asn1_set_choice_selector(ASN1_VALUE **pval, int value,
-                             const ASN1_ITEM *it) {
-  int *sel, ret;
-  sel = reinterpret_cast<int *>(offset2ptr(*pval, it->utype));
-  ret = *sel;
-  *sel = value;
-  return ret;
-}
-
-static CRYPTO_refcount_t *asn1_get_references(ASN1_VALUE **pval,
-                                              const ASN1_ITEM *it) {
-  if (it->itype != ASN1_ITYPE_SEQUENCE) {
-    return NULL;
-  }
-  const ASN1_AUX *aux = reinterpret_cast<const ASN1_AUX *>(it->funcs);
-  if (!aux || !(aux->flags & ASN1_AFLG_REFCOUNT)) {
-    return NULL;
-  }
-  return reinterpret_cast<CRYPTO_refcount_t *>(
-      offset2ptr(*pval, aux->ref_offset));
-}
-
-void asn1_refcount_set_one(ASN1_VALUE **pval, const ASN1_ITEM *it) {
-  CRYPTO_refcount_t *references = asn1_get_references(pval, it);
-  if (references != NULL) {
-    *references = 1;
-  }
-}
-
-int asn1_refcount_dec_and_test_zero(ASN1_VALUE **pval, const ASN1_ITEM *it) {
-  CRYPTO_refcount_t *references = asn1_get_references(pval, it);
-  if (references != NULL) {
-    return CRYPTO_refcount_dec_and_test_zero(references);
-  }
-  return 1;
-}
-
-static ASN1_ENCODING *asn1_get_enc_ptr(ASN1_VALUE **pval, const ASN1_ITEM *it) {
-  assert(it->itype == ASN1_ITYPE_SEQUENCE);
-  const ASN1_AUX *aux;
-  if (!pval || !*pval) {
-    return NULL;
-  }
-  aux = reinterpret_cast<const ASN1_AUX *>(it->funcs);
-  if (!aux || !(aux->flags & ASN1_AFLG_ENCODING)) {
-    return NULL;
-  }
-  return reinterpret_cast<ASN1_ENCODING *>(offset2ptr(*pval, aux->enc_offset));
-}
-
-void asn1_enc_init(ASN1_VALUE **pval, const ASN1_ITEM *it) {
-  ASN1_ENCODING *enc = asn1_get_enc_ptr(pval, it);
-  if (enc) {
-    enc->enc = NULL;
-    enc->len = 0;
-    enc->buf = NULL;
-  }
-}
-
-void asn1_enc_free(ASN1_VALUE **pval, const ASN1_ITEM *it) {
-  ASN1_ENCODING *enc = asn1_get_enc_ptr(pval, it);
-  if (enc) {
-    asn1_encoding_clear(enc);
-  }
-}
-
-int asn1_enc_save(ASN1_VALUE **pval, const uint8_t *in, size_t in_len,
-                  const ASN1_ITEM *it, CRYPTO_BUFFER *buf) {
-  ASN1_ENCODING *enc;
-  enc = asn1_get_enc_ptr(pval, it);
-  if (!enc) {
-    return 1;
-  }
-
-  asn1_encoding_clear(enc);
-  if (buf != NULL) {
-    assert(CRYPTO_BUFFER_data(buf) <= in &&
-           in + in_len <= CRYPTO_BUFFER_data(buf) + CRYPTO_BUFFER_len(buf));
-    CRYPTO_BUFFER_up_ref(buf);
-    enc->buf = buf;
-    enc->enc = (uint8_t *)in;
-  } else {
-    enc->enc = reinterpret_cast<uint8_t *>(OPENSSL_memdup(in, in_len));
-    if (!enc->enc) {
-      return 0;
-    }
-  }
-
-  enc->len = in_len;
-  return 1;
-}
-
-void asn1_encoding_clear(ASN1_ENCODING *enc) {
-  if (enc->buf != NULL) {
-    CRYPTO_BUFFER_free(enc->buf);
-  } else {
-    OPENSSL_free(enc->enc);
-  }
-  enc->enc = NULL;
-  enc->len = 0;
-  enc->buf = NULL;
-}
-
-int asn1_enc_restore(int *len, unsigned char **out, ASN1_VALUE **pval,
-                     const ASN1_ITEM *it) {
-  ASN1_ENCODING *enc = asn1_get_enc_ptr(pval, it);
-  if (!enc || enc->len == 0) {
-    return 0;
-  }
-  if (out) {
-    OPENSSL_memcpy(*out, enc->enc, enc->len);
-    *out += enc->len;
-  }
-  if (len) {
-    *len = enc->len;
-  }
-  return 1;
-}
-
-// Given an ASN1_TEMPLATE get a pointer to a field
-ASN1_VALUE **asn1_get_field_ptr(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt) {
-  ASN1_VALUE **pvaltmp =
-      reinterpret_cast<ASN1_VALUE **>(offset2ptr(*pval, tt->offset));
-  // NOTE for BOOLEAN types the field is just a plain int so we can't return
-  // int **, so settle for (int *).
-  return pvaltmp;
-}
-
-// Handle ANY DEFINED BY template, find the selector, look up the relevant
-// ASN1_TEMPLATE in the table and return it.
-const ASN1_TEMPLATE *asn1_do_adb(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt,
-                                 int nullerr) {
-  const ASN1_ADB *adb;
-  const ASN1_ADB_TABLE *atbl;
-  ASN1_VALUE **sfld;
-  int i;
-  if (!(tt->flags & ASN1_TFLG_ADB_MASK)) {
-    return tt;
-  }
-
-  // Else ANY DEFINED BY ... get the table
-  adb = ASN1_ADB_ptr(tt->item);
-
-  // Get the selector field
-  sfld = reinterpret_cast<ASN1_VALUE **>(offset2ptr(*pval, adb->offset));
-
-  // Check if NULL
-  int selector;
-  if (*sfld == NULL) {
-    if (!adb->null_tt) {
-      goto err;
-    }
-    return adb->null_tt;
-  }
-
-  // Convert type to a NID:
-  // NB: don't check for NID_undef here because it
-  // might be a legitimate value in the table
-  assert(tt->flags & ASN1_TFLG_ADB_OID);
-  selector = OBJ_obj2nid((ASN1_OBJECT *)*sfld);
-
-  // Try to find matching entry in table Maybe should check application types
-  // first to allow application override? Might also be useful to have a flag
-  // which indicates table is sorted and we can do a binary search. For now
-  // stick to a linear search.
-
-  for (atbl = adb->tbl, i = 0; i < adb->tblcount; i++, atbl++) {
-    if (atbl->value == selector) {
-      return &atbl->tt;
-    }
-  }
-
-  // FIXME: need to search application table too
-
-  // No match, return default type
-  if (!adb->default_tt) {
-    goto err;
-  }
-  return adb->default_tt;
-
-err:
-  // FIXME: should log the value or OID of unsupported type
-  if (nullerr) {
-    OPENSSL_PUT_ERROR(ASN1, ASN1_R_UNSUPPORTED_ANY_DEFINED_BY_TYPE);
-  }
-  return NULL;
-}
diff --git a/src/crypto/base64/base64.cc b/src/crypto/base64/base64.cc
deleted file mode 100644
index 1fbd23c..0000000
--- a/src/crypto/base64/base64.cc
+++ /dev/null
@@ -1,434 +0,0 @@
-// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
-//
-// 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
-//
-//     https://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 <openssl/base64.h>
-
-#include <assert.h>
-#include <limits.h>
-#include <string.h>
-
-#include "../internal.h"
-
-
-// constant_time_lt_args_8 behaves like |constant_time_lt_8| but takes |uint8_t|
-// arguments for a slightly simpler implementation.
-static inline uint8_t constant_time_lt_args_8(uint8_t a, uint8_t b) {
-  crypto_word_t aw = a;
-  crypto_word_t bw = b;
-  // |crypto_word_t| is larger than |uint8_t|, so |aw| and |bw| have the same
-  // MSB. |aw| < |bw| iff MSB(|aw| - |bw|) is 1.
-  return constant_time_msb_w(aw - bw);
-}
-
-// constant_time_in_range_8 returns |CONSTTIME_TRUE_8| if |min| <= |a| <= |max|
-// and |CONSTTIME_FALSE_8| otherwise.
-static inline uint8_t constant_time_in_range_8(uint8_t a, uint8_t min,
-                                               uint8_t max) {
-  a -= min;
-  return constant_time_lt_args_8(a, max - min + 1);
-}
-
-// Encoding.
-
-static uint8_t conv_bin2ascii(uint8_t a) {
-  // Since PEM is sometimes used to carry private keys, we encode base64 data
-  // itself in constant-time.
-  a &= 0x3f;
-  uint8_t ret = constant_time_select_8(constant_time_eq_8(a, 62), '+', '/');
-  ret =
-      constant_time_select_8(constant_time_lt_args_8(a, 62), a - 52 + '0', ret);
-  ret =
-      constant_time_select_8(constant_time_lt_args_8(a, 52), a - 26 + 'a', ret);
-  ret = constant_time_select_8(constant_time_lt_args_8(a, 26), a + 'A', ret);
-  return ret;
-}
-
-static_assert(sizeof(((EVP_ENCODE_CTX *)(NULL))->data) % 3 == 0,
-              "data length must be a multiple of base64 chunk size");
-
-int EVP_EncodedLength(size_t *out_len, size_t len) {
-  if (len + 2 < len) {
-    return 0;
-  }
-  len += 2;
-  len /= 3;
-
-  if (((len << 2) >> 2) != len) {
-    return 0;
-  }
-  len <<= 2;
-
-  if (len + 1 < len) {
-    return 0;
-  }
-  len++;
-
-  *out_len = len;
-  return 1;
-}
-
-EVP_ENCODE_CTX *EVP_ENCODE_CTX_new(void) {
-  return reinterpret_cast<EVP_ENCODE_CTX *>(
-      OPENSSL_zalloc(sizeof(EVP_ENCODE_CTX)));
-}
-
-void EVP_ENCODE_CTX_free(EVP_ENCODE_CTX *ctx) { OPENSSL_free(ctx); }
-
-void EVP_EncodeInit(EVP_ENCODE_CTX *ctx) {
-  OPENSSL_memset(ctx, 0, sizeof(EVP_ENCODE_CTX));
-}
-
-void EVP_EncodeUpdate(EVP_ENCODE_CTX *ctx, uint8_t *out, int *out_len,
-                      const uint8_t *in, size_t in_len) {
-  size_t total = 0;
-
-  *out_len = 0;
-  if (in_len == 0) {
-    return;
-  }
-
-  assert(ctx->data_used < sizeof(ctx->data));
-
-  if (sizeof(ctx->data) - ctx->data_used > in_len) {
-    OPENSSL_memcpy(&ctx->data[ctx->data_used], in, in_len);
-    ctx->data_used += (unsigned)in_len;
-    return;
-  }
-
-  if (ctx->data_used != 0) {
-    const size_t todo = sizeof(ctx->data) - ctx->data_used;
-    OPENSSL_memcpy(&ctx->data[ctx->data_used], in, todo);
-    in += todo;
-    in_len -= todo;
-
-    size_t encoded = EVP_EncodeBlock(out, ctx->data, sizeof(ctx->data));
-    ctx->data_used = 0;
-
-    out += encoded;
-    *(out++) = '\n';
-    *out = '\0';
-
-    total = encoded + 1;
-  }
-
-  while (in_len >= sizeof(ctx->data)) {
-    size_t encoded = EVP_EncodeBlock(out, in, sizeof(ctx->data));
-    in += sizeof(ctx->data);
-    in_len -= sizeof(ctx->data);
-
-    out += encoded;
-    *(out++) = '\n';
-    *out = '\0';
-
-    if (total + encoded + 1 < total) {
-      *out_len = 0;
-      return;
-    }
-
-    total += encoded + 1;
-  }
-
-  if (in_len != 0) {
-    OPENSSL_memcpy(ctx->data, in, in_len);
-  }
-
-  ctx->data_used = (unsigned)in_len;
-
-  if (total > INT_MAX) {
-    // We cannot signal an error, but we can at least avoid making *out_len
-    // negative.
-    total = 0;
-  }
-  *out_len = (int)total;
-}
-
-void EVP_EncodeFinal(EVP_ENCODE_CTX *ctx, uint8_t *out, int *out_len) {
-  if (ctx->data_used == 0) {
-    *out_len = 0;
-    return;
-  }
-
-  size_t encoded = EVP_EncodeBlock(out, ctx->data, ctx->data_used);
-  out[encoded++] = '\n';
-  out[encoded] = '\0';
-  ctx->data_used = 0;
-
-  // ctx->data_used is bounded by sizeof(ctx->data), so this does not
-  // overflow.
-  assert(encoded <= INT_MAX);
-  *out_len = (int)encoded;
-}
-
-size_t EVP_EncodeBlock(uint8_t *dst, const uint8_t *src, size_t src_len) {
-  uint32_t l;
-  size_t remaining = src_len, ret = 0;
-
-  while (remaining) {
-    if (remaining >= 3) {
-      l = (((uint32_t)src[0]) << 16L) | (((uint32_t)src[1]) << 8L) | src[2];
-      *(dst++) = conv_bin2ascii(l >> 18L);
-      *(dst++) = conv_bin2ascii(l >> 12L);
-      *(dst++) = conv_bin2ascii(l >> 6L);
-      *(dst++) = conv_bin2ascii(l);
-      remaining -= 3;
-    } else {
-      l = ((uint32_t)src[0]) << 16L;
-      if (remaining == 2) {
-        l |= ((uint32_t)src[1] << 8L);
-      }
-
-      *(dst++) = conv_bin2ascii(l >> 18L);
-      *(dst++) = conv_bin2ascii(l >> 12L);
-      *(dst++) = (remaining == 1) ? '=' : conv_bin2ascii(l >> 6L);
-      *(dst++) = '=';
-      remaining = 0;
-    }
-    ret += 4;
-    src += 3;
-  }
-
-  *dst = '\0';
-  return ret;
-}
-
-
-// Decoding.
-
-int EVP_DecodedLength(size_t *out_len, size_t len) {
-  if (len % 4 != 0) {
-    return 0;
-  }
-
-  *out_len = (len / 4) * 3;
-  return 1;
-}
-
-void EVP_DecodeInit(EVP_ENCODE_CTX *ctx) {
-  OPENSSL_memset(ctx, 0, sizeof(EVP_ENCODE_CTX));
-}
-
-static uint8_t base64_ascii_to_bin(uint8_t a) {
-  // Since PEM is sometimes used to carry private keys, we decode base64 data
-  // itself in constant-time.
-  const uint8_t is_upper = constant_time_in_range_8(a, 'A', 'Z');
-  const uint8_t is_lower = constant_time_in_range_8(a, 'a', 'z');
-  const uint8_t is_digit = constant_time_in_range_8(a, '0', '9');
-  const uint8_t is_plus = constant_time_eq_8(a, '+');
-  const uint8_t is_slash = constant_time_eq_8(a, '/');
-  const uint8_t is_equals = constant_time_eq_8(a, '=');
-
-  uint8_t ret = 0;
-  ret |= is_upper & (a - 'A');       // [0,26)
-  ret |= is_lower & (a - 'a' + 26);  // [26,52)
-  ret |= is_digit & (a - '0' + 52);  // [52,62)
-  ret |= is_plus & 62;
-  ret |= is_slash & 63;
-  // Invalid inputs, 'A', and '=' have all been mapped to zero. Map invalid
-  // inputs to 0xff. Note '=' is padding and handled separately by the caller.
-  const uint8_t is_valid =
-      is_upper | is_lower | is_digit | is_plus | is_slash | is_equals;
-  ret |= ~is_valid;
-  return ret;
-}
-
-// base64_decode_quad decodes a single “quad” (i.e. four characters) of base64
-// data and writes up to three bytes to |out|. It sets |*out_num_bytes| to the
-// number of bytes written, which will be less than three if the quad ended
-// with padding.  It returns one on success or zero on error.
-static int base64_decode_quad(uint8_t *out, size_t *out_num_bytes,
-                              const uint8_t *in) {
-  const uint8_t a = base64_ascii_to_bin(in[0]);
-  const uint8_t b = base64_ascii_to_bin(in[1]);
-  const uint8_t c = base64_ascii_to_bin(in[2]);
-  const uint8_t d = base64_ascii_to_bin(in[3]);
-  if (a == 0xff || b == 0xff || c == 0xff || d == 0xff) {
-    return 0;
-  }
-
-  const uint32_t v = ((uint32_t)a) << 18 | ((uint32_t)b) << 12 |
-                     ((uint32_t)c) << 6 | (uint32_t)d;
-
-  const unsigned padding_pattern = (in[0] == '=') << 3 | //
-                                   (in[1] == '=') << 2 | //
-                                   (in[2] == '=') << 1 | //
-                                   (in[3] == '=');
-
-  // In presence of padding, the lowest bits of v are unused. Canonical encoding
-  // (RFC 4648, section 3.5) requires that these bits all be set to zero. Common
-  // PEM parsers accept noncanonical base64, adding to the malleability of the
-  // format. This decoder follows OpenSSL's and Go's PEM parsers and accepts it.
-  switch (padding_pattern) {
-    case 0:
-      // The common case of no padding.
-      *out_num_bytes = 3;
-      out[0] = v >> 16;
-      out[1] = v >> 8;
-      out[2] = v;
-      break;
-
-    case 1:  // xxx=
-      *out_num_bytes = 2;
-      out[0] = v >> 16;
-      out[1] = v >> 8;
-      break;
-
-    case 3:  // xx==
-      *out_num_bytes = 1;
-      out[0] = v >> 16;
-      break;
-
-    default:
-      return 0;
-  }
-
-  return 1;
-}
-
-int EVP_DecodeUpdate(EVP_ENCODE_CTX *ctx, uint8_t *out, int *out_len,
-                     const uint8_t *in, size_t in_len) {
-  *out_len = 0;
-
-  if (ctx->error_encountered) {
-    return -1;
-  }
-
-  size_t bytes_out = 0, i;
-  for (i = 0; i < in_len; i++) {
-    const char c = in[i];
-    switch (c) {
-      case ' ':
-      case '\t':
-      case '\r':
-      case '\n':
-        continue;
-    }
-
-    if (ctx->eof_seen) {
-      ctx->error_encountered = 1;
-      return -1;
-    }
-
-    ctx->data[ctx->data_used++] = c;
-    if (ctx->data_used == 4) {
-      size_t num_bytes_resulting;
-      if (!base64_decode_quad(out, &num_bytes_resulting, ctx->data)) {
-        ctx->error_encountered = 1;
-        return -1;
-      }
-
-      ctx->data_used = 0;
-      bytes_out += num_bytes_resulting;
-      out += num_bytes_resulting;
-
-      if (num_bytes_resulting < 3) {
-        ctx->eof_seen = 1;
-      }
-    }
-  }
-
-  if (bytes_out > INT_MAX) {
-    ctx->error_encountered = 1;
-    *out_len = 0;
-    return -1;
-  }
-  *out_len = (int)bytes_out;
-
-  if (ctx->eof_seen) {
-    return 0;
-  }
-
-  return 1;
-}
-
-int EVP_DecodeFinal(EVP_ENCODE_CTX *ctx, uint8_t *out, int *out_len) {
-  *out_len = 0;
-  if (ctx->error_encountered || ctx->data_used != 0) {
-    return -1;
-  }
-
-  return 1;
-}
-
-int EVP_DecodeBase64(uint8_t *out, size_t *out_len, size_t max_out,
-                     const uint8_t *in, size_t in_len) {
-  *out_len = 0;
-
-  if (in_len % 4 != 0) {
-    return 0;
-  }
-
-  size_t max_len;
-  if (!EVP_DecodedLength(&max_len, in_len) || max_out < max_len) {
-    return 0;
-  }
-
-  size_t i, bytes_out = 0;
-  for (i = 0; i < in_len; i += 4) {
-    size_t num_bytes_resulting;
-
-    if (!base64_decode_quad(out, &num_bytes_resulting, &in[i])) {
-      return 0;
-    }
-
-    bytes_out += num_bytes_resulting;
-    out += num_bytes_resulting;
-    if (num_bytes_resulting != 3 && i != in_len - 4) {
-      return 0;
-    }
-  }
-
-  *out_len = bytes_out;
-  return 1;
-}
-
-int EVP_DecodeBlock(uint8_t *dst, const uint8_t *src, size_t src_len) {
-  // Trim spaces and tabs from the beginning of the input.
-  while (src_len > 0) {
-    if (src[0] != ' ' && src[0] != '\t') {
-      break;
-    }
-
-    src++;
-    src_len--;
-  }
-
-  // Trim newlines, spaces and tabs from the end of the line.
-  while (src_len > 0) {
-    switch (src[src_len - 1]) {
-      case ' ':
-      case '\t':
-      case '\r':
-      case '\n':
-        src_len--;
-        continue;
-    }
-
-    break;
-  }
-
-  size_t dst_len;
-  if (!EVP_DecodedLength(&dst_len, src_len) || dst_len > INT_MAX ||
-      !EVP_DecodeBase64(dst, &dst_len, dst_len, src, src_len)) {
-    return -1;
-  }
-
-  // EVP_DecodeBlock does not take padding into account, so put the
-  // NULs back in... so the caller can strip them back out.
-  while (dst_len % 3 != 0) {
-    dst[dst_len++] = '\0';
-  }
-  assert(dst_len <= INT_MAX);
-
-  return (int)dst_len;
-}
diff --git a/src/crypto/base64/base64_test.cc b/src/crypto/base64/base64_test.cc
deleted file mode 100644
index 4bd797c..0000000
--- a/src/crypto/base64/base64_test.cc
+++ /dev/null
@@ -1,326 +0,0 @@
-// Copyright 2014 The BoringSSL Authors
-//
-// 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
-//
-//     https://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 <stdio.h>
-#include <string.h>
-
-#include <string>
-#include <vector>
-
-#include <gtest/gtest.h>
-
-#include <openssl/base64.h>
-#include <openssl/crypto.h>
-#include <openssl/err.h>
-
-#include "../internal.h"
-#include "../test/test_util.h"
-
-
-enum encoding_relation {
-  // canonical indicates that the encoding is the expected encoding of the
-  // input.
-  canonical,
-  // valid indicates that the encoding is /a/ valid encoding of the input, but
-  // need not be the canonical one.
-  valid,
-  // invalid indicates that the encoded data is valid.
-  invalid,
-};
-
-struct Base64TestVector {
-  enum encoding_relation relation;
-  const char *decoded;
-  const char *encoded;
-};
-
-static const Base64TestVector kTestVectors[] = {
-    // Test vectors from RFC 4648, section 10.
-    {canonical, "", ""},
-    {canonical, "f", "Zg==\n"},
-    {canonical, "fo", "Zm8=\n"},
-    {canonical, "foo", "Zm9v\n"},
-    {canonical, "foob", "Zm9vYg==\n"},
-    {canonical, "fooba", "Zm9vYmE=\n"},
-    {canonical, "foobar", "Zm9vYmFy\n"},
-
-    {invalid, "", "Zm9vYmFy=\n"},
-    {invalid, "", "Zm9vYmFy==\n"},
-    {invalid, "", "Zm9vYmFy===\n"},
-
-    // valid non-canonical encodings due to arbitrary whitespace
-    {valid, "foobar", "Zm9vYmFy\n\n"},
-    {valid, "foobar", " Zm9vYmFy\n\n"},
-    {valid, "foobar", " Z m 9 v Y m F y\n\n"},
-    {valid, "foobar", "Zm9vYmFy\r\n"},
-
-    // The following "valid" encodings are arguably invalid, but they are
-    // commonly accepted by parsers, in particular by OpenSSL.
-    {valid, "v", "dv==\n"},
-    {canonical, "w", "dw==\n"},
-    {valid, "w", "dx==\n"},
-    {valid, "w", "d+==\n"},
-    {valid, "w", "d/==\n"},
-    {invalid, "", "d===\n"},
-    {canonical, "w`", "d2A=\n"},
-    {valid, "w`", "d2B=\n"},
-    {valid, "w`", "d2C=\n"},
-    {valid, "w`", "d2D=\n"},
-    {canonical, "wa", "d2E=\n"},
-
-    {invalid, "", "Z"},
-    {invalid, "", "Z\n"},
-    {invalid, "", "ab!c"},
-    {invalid, "", "ab=c"},
-    {invalid, "", "abc"},
-
-    {canonical, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
-     "eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eA==\n"},
-    {valid, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
-     "eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eA\n==\n"},
-    {valid, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
-     "eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eA=\n=\n"},
-    {invalid, "",
-     "eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eA=\n==\n"},
-    {canonical, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
-     "eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4\neHh4eHh"
-     "4eHh4eHh4\n"},
-    {canonical,
-     "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
-     "eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4\neHh4eHh"
-     "4eHh4eHh4eHh4eA==\n"},
-    {valid, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
-     "eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh\n4eHh4eHh"
-     "4eHh4eHh4eHh4eA==\n"},
-    {valid, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
-     "eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4e"
-     "Hh4eHh4eHh4eA==\n"},
-    {invalid, "",
-     "eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eA=="
-     "\neHh4eHh4eHh4eHh4eHh4eHh4\n"},
-
-    // A '-' has traditionally been treated as the end of the data by OpenSSL
-    // and anything following would be ignored. BoringSSL does not accept this
-    // non-standard extension.
-    {invalid, "", "Zm9vYmFy-anythinggoes"},
-    {invalid, "", "Zm9vYmFy\n-anythinggoes"},
-
-    // CVE-2015-0292
-    {invalid, "",
-     "ZW5jb2RlIG1lCg==========================================================="
-     "=======\n"},
-};
-
-class Base64Test : public testing::TestWithParam<Base64TestVector> {};
-
-INSTANTIATE_TEST_SUITE_P(All, Base64Test, testing::ValuesIn(kTestVectors));
-
-// RemoveNewlines returns a copy of |in| with all '\n' characters removed.
-static std::string RemoveNewlines(const char *in) {
-  std::string ret;
-  const size_t in_len = strlen(in);
-
-  for (size_t i = 0; i < in_len; i++) {
-    if (in[i] != '\n') {
-      ret.push_back(in[i]);
-    }
-  }
-
-  return ret;
-}
-
-TEST_P(Base64Test, EncodeBlock) {
-  const Base64TestVector &t = GetParam();
-  if (t.relation != canonical) {
-    return;
-  }
-
-  const size_t decoded_len = strlen(t.decoded);
-  size_t max_encoded_len;
-  ASSERT_TRUE(EVP_EncodedLength(&max_encoded_len, decoded_len));
-
-  std::vector<uint8_t> out_vec(max_encoded_len);
-  uint8_t *out = out_vec.data();
-  size_t len = EVP_EncodeBlock(out, (const uint8_t *)t.decoded, decoded_len);
-
-  std::string encoded(RemoveNewlines(t.encoded));
-  EXPECT_EQ(Bytes(encoded), Bytes(out, len));
-}
-
-TEST_P(Base64Test, DecodeBase64) {
-  const Base64TestVector &t = GetParam();
-  if (t.relation == valid) {
-    // The non-canonical encodings will generally have odd whitespace etc
-    // that |EVP_DecodeBase64| will reject.
-    return;
-  }
-
-  const std::string encoded(RemoveNewlines(t.encoded));
-  std::vector<uint8_t> out_vec(encoded.size());
-  uint8_t *out = out_vec.data();
-
-  size_t len;
-  int ok = EVP_DecodeBase64(out, &len, out_vec.size(),
-                            (const uint8_t *)encoded.data(), encoded.size());
-
-  if (t.relation == invalid) {
-    EXPECT_FALSE(ok);
-  } else if (t.relation == canonical) {
-    ASSERT_TRUE(ok);
-    EXPECT_EQ(Bytes(t.decoded), Bytes(out, len));
-  }
-}
-
-TEST_P(Base64Test, DecodeBlock) {
-  const Base64TestVector &t = GetParam();
-  if (t.relation != canonical) {
-    return;
-  }
-
-  std::string encoded(RemoveNewlines(t.encoded));
-
-  std::vector<uint8_t> out_vec(encoded.size());
-  uint8_t *out = out_vec.data();
-
-  // Test that the padding behavior of the deprecated API is preserved.
-  int ret =
-      EVP_DecodeBlock(out, (const uint8_t *)encoded.data(), encoded.size());
-  ASSERT_GE(ret, 0);
-  // EVP_DecodeBlock should ignore padding.
-  ASSERT_EQ(0, ret % 3);
-  size_t expected_len = strlen(t.decoded);
-  if (expected_len % 3 != 0) {
-    ret -= 3 - (expected_len % 3);
-  }
-  EXPECT_EQ(Bytes(t.decoded), Bytes(out, static_cast<size_t>(ret)));
-}
-
-TEST_P(Base64Test, EncodeDecode) {
-  const Base64TestVector &t = GetParam();
-
-  EVP_ENCODE_CTX ctx;
-  const size_t decoded_len = strlen(t.decoded);
-
-  if (t.relation == canonical) {
-    size_t max_encoded_len;
-    ASSERT_TRUE(EVP_EncodedLength(&max_encoded_len, decoded_len));
-
-    // EVP_EncodeUpdate will output new lines every 64 bytes of output so we
-    // need slightly more than |EVP_EncodedLength| returns. */
-    max_encoded_len += (max_encoded_len + 63) >> 6;
-    std::vector<uint8_t> out_vec(max_encoded_len);
-    uint8_t *out = out_vec.data();
-
-    EVP_EncodeInit(&ctx);
-
-    int out_len;
-    EVP_EncodeUpdate(&ctx, out, &out_len,
-                     reinterpret_cast<const uint8_t *>(t.decoded),
-                     decoded_len);
-    size_t total = out_len;
-
-    EVP_EncodeFinal(&ctx, out + total, &out_len);
-    total += out_len;
-
-    EXPECT_EQ(Bytes(t.encoded), Bytes(out, total));
-  }
-
-  std::vector<uint8_t> out_vec(strlen(t.encoded));
-  uint8_t *out = out_vec.data();
-
-  EVP_DecodeInit(&ctx);
-  int out_len;
-  size_t total = 0;
-  int ret = EVP_DecodeUpdate(&ctx, out, &out_len,
-                             reinterpret_cast<const uint8_t *>(t.encoded),
-                             strlen(t.encoded));
-  if (ret != -1) {
-    total = out_len;
-    ret = EVP_DecodeFinal(&ctx, out + total, &out_len);
-    total += out_len;
-  }
-
-  switch (t.relation) {
-    case canonical:
-    case valid:
-      ASSERT_NE(-1, ret);
-      EXPECT_EQ(Bytes(t.decoded), Bytes(out, total));
-      break;
-
-    case invalid:
-      EXPECT_EQ(-1, ret);
-      break;
-  }
-}
-
-TEST_P(Base64Test, DecodeUpdateStreaming) {
-  const Base64TestVector &t = GetParam();
-  if (t.relation == invalid) {
-    return;
-  }
-
-  const size_t encoded_len = strlen(t.encoded);
-
-  std::vector<uint8_t> out(encoded_len);
-
-  for (size_t chunk_size = 1; chunk_size <= encoded_len; chunk_size++) {
-    SCOPED_TRACE(chunk_size);
-    size_t out_len = 0;
-    EVP_ENCODE_CTX ctx;
-    EVP_DecodeInit(&ctx);
-
-    for (size_t i = 0; i < encoded_len;) {
-      size_t todo = encoded_len - i;
-      if (todo > chunk_size) {
-        todo = chunk_size;
-      }
-
-      int bytes_written;
-      int ret = EVP_DecodeUpdate(
-          &ctx, out.data() + out_len, &bytes_written,
-          reinterpret_cast<const uint8_t *>(t.encoded + i), todo);
-      i += todo;
-
-      switch (ret) {
-        case -1:
-          FAIL() << "EVP_DecodeUpdate failed";
-        case 0:
-          out_len += bytes_written;
-          if (i == encoded_len ||
-              (i + 1 == encoded_len && t.encoded[i] == '\n') ||
-              // If there was an '-' in the input (which means “EOF”) then
-              // this loop will continue to test that |EVP_DecodeUpdate| will
-              // ignore the remainder of the input.
-              strchr(t.encoded, '-') != nullptr) {
-            break;
-          }
-
-          FAIL()
-              << "EVP_DecodeUpdate returned zero before end of encoded data.";
-        case 1:
-          out_len += bytes_written;
-          break;
-        default:
-          FAIL() << "Invalid return value " << ret;
-      }
-    }
-
-    int bytes_written;
-    int ret = EVP_DecodeFinal(&ctx, out.data() + out_len, &bytes_written);
-    ASSERT_NE(ret, -1);
-    out_len += bytes_written;
-
-    EXPECT_EQ(Bytes(t.decoded), Bytes(out.data(), out_len));
-  }
-}
diff --git a/src/crypto/bcm_support.h b/src/crypto/bcm_support.h
deleted file mode 100644
index faea2bb..0000000
--- a/src/crypto/bcm_support.h
+++ /dev/null
@@ -1,84 +0,0 @@
-// Copyright 2024 The BoringSSL Authors
-//
-// 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
-//
-//     https://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 OPENSSL_HEADER_CRYPTO_BCM_SUPPORT_H
-#define OPENSSL_HEADER_CRYPTO_BCM_SUPPORT_H
-
-#include <openssl/base.h>
-
-#include <stdio.h>
-
-// Provided by libcrypto, called from BCM
-
-#if defined(__cplusplus)
-extern "C" {
-#endif
-
-// Provided by libcrypto, called from BCM
-
-// CRYPTO_init_sysrand initializes long-lived resources needed to draw entropy
-// from the operating system, if the operating system requires initialization.
-void CRYPTO_init_sysrand(void);
-
-// CRYPTO_sysrand fills |len| bytes at |buf| with entropy from the operating
-// system.
-void CRYPTO_sysrand(uint8_t *buf, size_t len);
-
-// CRYPTO_sysrand_if_available fills |len| bytes at |buf| with entropy from the
-// operating system, or early /dev/urandom data, and returns 1, _if_ the entropy
-// pool is initialized or if getrandom() is not available and not in FIPS mode.
-// Otherwise it will not block and will instead fill |buf| with all zeros and
-// return 0.
-int CRYPTO_sysrand_if_available(uint8_t *buf, size_t len);
-
-// CRYPTO_sysrand_for_seed fills |len| bytes at |buf| with entropy from the
-// operating system. It may draw from the |GRND_RANDOM| pool on Android,
-// depending on the vendor's configuration.
-void CRYPTO_sysrand_for_seed(uint8_t *buf, size_t len);
-
-// RAND_need_entropy is called whenever the BCM module has stopped because it
-// has run out of entropy.
-void RAND_need_entropy(size_t bytes_needed);
-
-// crypto_get_fork_generation returns the fork generation number for the current
-// process, or zero if not supported on the platform. The fork generation number
-// is a non-zero, strictly-monotonic counter with the property that, if queried
-// in an address space and then again in a subsequently forked copy, the forked
-// address space will observe a greater value.
-//
-// This function may be used to clear cached values across a fork. When
-// initializing a cache, record the fork generation. Before using the cache,
-// check if the fork generation has changed. If so, drop the cache and update
-// the save fork generation. Note this logic transparently handles platforms
-// which always return zero.
-//
-// This is not reliably supported on all platforms which implement |fork|, so it
-// should only be used as a hardening measure.
-OPENSSL_EXPORT uint64_t CRYPTO_get_fork_generation(void);
-
-// CRYPTO_fork_detect_force_madv_wipeonfork_for_testing is an internal detail
-// used for testing purposes.
-OPENSSL_EXPORT void CRYPTO_fork_detect_force_madv_wipeonfork_for_testing(
-    int on);
-
-// CRYPTO_get_stderr returns stderr. This function exists to avoid BCM needing
-// a data dependency on libc.
-FILE *CRYPTO_get_stderr(void);
-
-
-#if defined(__cplusplus)
-}  // extern C
-#endif
-
-#endif  // OPENSSL_HEADER_CRYPTO_BCM_SUPPORT_H
diff --git a/src/crypto/bio/bio.cc b/src/crypto/bio/bio.cc
deleted file mode 100644
index d1a53a3..0000000
--- a/src/crypto/bio/bio.cc
+++ /dev/null
@@ -1,658 +0,0 @@
-// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
-//
-// 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
-//
-//     https://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 <openssl/bio.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <limits.h>
-#include <string.h>
-
-#include <openssl/asn1.h>
-#include <openssl/err.h>
-#include <openssl/mem.h>
-#include <openssl/thread.h>
-
-#include "../internal.h"
-
-
-static CRYPTO_EX_DATA_CLASS g_ex_data_class =
-    CRYPTO_EX_DATA_CLASS_INIT_WITH_APP_DATA;
-
-BIO *BIO_new(const BIO_METHOD *method) {
-  BIO *ret = reinterpret_cast<BIO *>(OPENSSL_zalloc(sizeof(BIO)));
-  if (ret == NULL) {
-    return NULL;
-  }
-
-  ret->method = method;
-  ret->shutdown = 1;
-  ret->references = 1;
-  CRYPTO_new_ex_data(&ret->ex_data);
-
-  if (method->create != NULL && !method->create(ret)) {
-    OPENSSL_free(ret);
-    return NULL;
-  }
-
-  return ret;
-}
-
-int BIO_free(BIO *bio) {
-  BIO *next_bio;
-
-  for (; bio != NULL; bio = next_bio) {
-    if (!CRYPTO_refcount_dec_and_test_zero(&bio->references)) {
-      return 0;
-    }
-
-    next_bio = BIO_pop(bio);
-
-    if (bio->method != NULL && bio->method->destroy != NULL) {
-      bio->method->destroy(bio);
-    }
-
-    CRYPTO_free_ex_data(&g_ex_data_class, bio, &bio->ex_data);
-    OPENSSL_free(bio);
-  }
-  return 1;
-}
-
-int BIO_up_ref(BIO *bio) {
-  CRYPTO_refcount_inc(&bio->references);
-  return 1;
-}
-
-void BIO_vfree(BIO *bio) { BIO_free(bio); }
-
-void BIO_free_all(BIO *bio) { BIO_free(bio); }
-
-int BIO_read(BIO *bio, void *buf, int len) {
-  if (bio == NULL || bio->method == NULL || bio->method->bread == NULL) {
-    OPENSSL_PUT_ERROR(BIO, BIO_R_UNSUPPORTED_METHOD);
-    return -2;
-  }
-  if (!bio->init) {
-    OPENSSL_PUT_ERROR(BIO, BIO_R_UNINITIALIZED);
-    return -2;
-  }
-  if (len <= 0) {
-    return 0;
-  }
-  int ret = bio->method->bread(bio, reinterpret_cast<char *>(buf), len);
-  if (ret > 0) {
-    bio->num_read += ret;
-  }
-  return ret;
-}
-
-int BIO_gets(BIO *bio, char *buf, int len) {
-  if (bio == NULL || bio->method == NULL || bio->method->bgets == NULL) {
-    OPENSSL_PUT_ERROR(BIO, BIO_R_UNSUPPORTED_METHOD);
-    return -2;
-  }
-  if (!bio->init) {
-    OPENSSL_PUT_ERROR(BIO, BIO_R_UNINITIALIZED);
-    return -2;
-  }
-  if (len <= 0) {
-    return 0;
-  }
-  int ret = bio->method->bgets(bio, buf, len);
-  if (ret > 0) {
-    bio->num_read += ret;
-  }
-  return ret;
-}
-
-int BIO_write(BIO *bio, const void *in, int inl) {
-  if (bio == NULL || bio->method == NULL || bio->method->bwrite == NULL) {
-    OPENSSL_PUT_ERROR(BIO, BIO_R_UNSUPPORTED_METHOD);
-    return -2;
-  }
-  if (!bio->init) {
-    OPENSSL_PUT_ERROR(BIO, BIO_R_UNINITIALIZED);
-    return -2;
-  }
-  if (inl <= 0) {
-    return 0;
-  }
-  int ret = bio->method->bwrite(bio, reinterpret_cast<const char *>(in), inl);
-  if (ret > 0) {
-    bio->num_write += ret;
-  }
-  return ret;
-}
-
-int BIO_write_all(BIO *bio, const void *data, size_t len) {
-  const uint8_t *data_u8 = reinterpret_cast<const uint8_t *>(data);
-  while (len > 0) {
-    int ret = BIO_write(bio, data_u8, len > INT_MAX ? INT_MAX : (int)len);
-    if (ret <= 0) {
-      return 0;
-    }
-    data_u8 += ret;
-    len -= ret;
-  }
-  return 1;
-}
-
-int BIO_puts(BIO *bio, const char *in) {
-  size_t len = strlen(in);
-  if (len > INT_MAX) {
-    // |BIO_write| and the return value both assume the string fits in |int|.
-    OPENSSL_PUT_ERROR(BIO, ERR_R_OVERFLOW);
-    return -1;
-  }
-  return BIO_write(bio, in, (int)len);
-}
-
-int BIO_flush(BIO *bio) { return (int)BIO_ctrl(bio, BIO_CTRL_FLUSH, 0, NULL); }
-
-long BIO_ctrl(BIO *bio, int cmd, long larg, void *parg) {
-  if (bio == NULL) {
-    return 0;
-  }
-
-  if (bio->method == NULL || bio->method->ctrl == NULL) {
-    OPENSSL_PUT_ERROR(BIO, BIO_R_UNSUPPORTED_METHOD);
-    return -2;
-  }
-
-  return bio->method->ctrl(bio, cmd, larg, parg);
-}
-
-char *BIO_ptr_ctrl(BIO *b, int cmd, long larg) {
-  char *p = NULL;
-
-  if (BIO_ctrl(b, cmd, larg, (void *)&p) <= 0) {
-    return NULL;
-  }
-
-  return p;
-}
-
-long BIO_int_ctrl(BIO *b, int cmd, long larg, int iarg) {
-  int i = iarg;
-
-  return BIO_ctrl(b, cmd, larg, (void *)&i);
-}
-
-int BIO_reset(BIO *bio) { return (int)BIO_ctrl(bio, BIO_CTRL_RESET, 0, NULL); }
-
-int BIO_eof(BIO *bio) { return (int)BIO_ctrl(bio, BIO_CTRL_EOF, 0, NULL); }
-
-void BIO_set_flags(BIO *bio, int flags) { bio->flags |= flags; }
-
-int BIO_test_flags(const BIO *bio, int flags) { return bio->flags & flags; }
-
-int BIO_should_read(const BIO *bio) {
-  return BIO_test_flags(bio, BIO_FLAGS_READ);
-}
-
-int BIO_should_write(const BIO *bio) {
-  return BIO_test_flags(bio, BIO_FLAGS_WRITE);
-}
-
-int BIO_should_retry(const BIO *bio) {
-  return BIO_test_flags(bio, BIO_FLAGS_SHOULD_RETRY);
-}
-
-int BIO_should_io_special(const BIO *bio) {
-  return BIO_test_flags(bio, BIO_FLAGS_IO_SPECIAL);
-}
-
-int BIO_get_retry_reason(const BIO *bio) { return bio->retry_reason; }
-
-void BIO_set_retry_reason(BIO *bio, int reason) { bio->retry_reason = reason; }
-
-void BIO_clear_flags(BIO *bio, int flags) { bio->flags &= ~flags; }
-
-void BIO_set_retry_read(BIO *bio) {
-  bio->flags |= BIO_FLAGS_READ | BIO_FLAGS_SHOULD_RETRY;
-}
-
-void BIO_set_retry_write(BIO *bio) {
-  bio->flags |= BIO_FLAGS_WRITE | BIO_FLAGS_SHOULD_RETRY;
-}
-
-static const int kRetryFlags = BIO_FLAGS_RWS | BIO_FLAGS_SHOULD_RETRY;
-
-int BIO_get_retry_flags(BIO *bio) { return bio->flags & kRetryFlags; }
-
-void BIO_clear_retry_flags(BIO *bio) {
-  bio->flags &= ~kRetryFlags;
-  bio->retry_reason = 0;
-}
-
-int BIO_method_type(const BIO *bio) { return bio->method->type; }
-
-void BIO_copy_next_retry(BIO *bio) {
-  BIO_clear_retry_flags(bio);
-  BIO_set_flags(bio, BIO_get_retry_flags(bio->next_bio));
-  bio->retry_reason = bio->next_bio->retry_reason;
-}
-
-long BIO_callback_ctrl(BIO *bio, int cmd, bio_info_cb fp) {
-  if (bio == NULL) {
-    return 0;
-  }
-
-  if (bio->method == NULL || bio->method->callback_ctrl == NULL) {
-    OPENSSL_PUT_ERROR(BIO, BIO_R_UNSUPPORTED_METHOD);
-    return 0;
-  }
-
-  return bio->method->callback_ctrl(bio, cmd, fp);
-}
-
-size_t BIO_pending(const BIO *bio) {
-  const long r = BIO_ctrl((BIO *)bio, BIO_CTRL_PENDING, 0, NULL);
-  assert(r >= 0);
-
-  if (r < 0) {
-    return 0;
-  }
-  return r;
-}
-
-size_t BIO_ctrl_pending(const BIO *bio) { return BIO_pending(bio); }
-
-size_t BIO_wpending(const BIO *bio) {
-  const long r = BIO_ctrl((BIO *)bio, BIO_CTRL_WPENDING, 0, NULL);
-  assert(r >= 0);
-
-  if (r < 0) {
-    return 0;
-  }
-  return r;
-}
-
-int BIO_set_close(BIO *bio, int close_flag) {
-  return (int)BIO_ctrl(bio, BIO_CTRL_SET_CLOSE, close_flag, NULL);
-}
-
-OPENSSL_EXPORT uint64_t BIO_number_read(const BIO *bio) {
-  return bio->num_read;
-}
-
-OPENSSL_EXPORT uint64_t BIO_number_written(const BIO *bio) {
-  return bio->num_write;
-}
-
-BIO *BIO_push(BIO *bio, BIO *appended_bio) {
-  BIO *last_bio;
-
-  if (bio == NULL) {
-    return bio;
-  }
-
-  last_bio = bio;
-  while (last_bio->next_bio != NULL) {
-    last_bio = last_bio->next_bio;
-  }
-
-  last_bio->next_bio = appended_bio;
-  return bio;
-}
-
-BIO *BIO_pop(BIO *bio) {
-  BIO *ret;
-
-  if (bio == NULL) {
-    return NULL;
-  }
-  ret = bio->next_bio;
-  bio->next_bio = NULL;
-  return ret;
-}
-
-BIO *BIO_next(BIO *bio) {
-  if (!bio) {
-    return NULL;
-  }
-  return bio->next_bio;
-}
-
-BIO *BIO_find_type(BIO *bio, int type) {
-  int method_type, mask;
-
-  if (!bio) {
-    return NULL;
-  }
-  mask = type & 0xff;
-
-  do {
-    if (bio->method != NULL) {
-      method_type = bio->method->type;
-
-      if (!mask) {
-        if (method_type & type) {
-          return bio;
-        }
-      } else if (method_type == type) {
-        return bio;
-      }
-    }
-    bio = bio->next_bio;
-  } while (bio != NULL);
-
-  return NULL;
-}
-
-int BIO_indent(BIO *bio, unsigned indent, unsigned max_indent) {
-  if (indent > max_indent) {
-    indent = max_indent;
-  }
-
-  while (indent--) {
-    if (BIO_puts(bio, " ") != 1) {
-      return 0;
-    }
-  }
-  return 1;
-}
-
-static int print_bio(const char *str, size_t len, void *bio) {
-  return BIO_write_all((BIO *)bio, str, len);
-}
-
-void ERR_print_errors(BIO *bio) { ERR_print_errors_cb(print_bio, bio); }
-
-// bio_read_all reads everything from |bio| and prepends |prefix| to it. On
-// success, |*out| is set to an allocated buffer (which should be freed with
-// |OPENSSL_free|), |*out_len| is set to its length and one is returned. The
-// buffer will contain |prefix| followed by the contents of |bio|. On failure,
-// zero is returned.
-//
-// The function will fail if the size of the output would equal or exceed
-// |max_len|.
-static int bio_read_all(BIO *bio, uint8_t **out, size_t *out_len,
-                        const uint8_t *prefix, size_t prefix_len,
-                        size_t max_len) {
-  static const size_t kChunkSize = 4096;
-
-  size_t len = prefix_len + kChunkSize;
-  if (len > max_len) {
-    len = max_len;
-  }
-  if (len < prefix_len) {
-    return 0;
-  }
-  *out = reinterpret_cast<uint8_t *>(OPENSSL_malloc(len));
-  if (*out == NULL) {
-    return 0;
-  }
-  OPENSSL_memcpy(*out, prefix, prefix_len);
-  size_t done = prefix_len;
-
-  for (;;) {
-    if (done == len) {
-      OPENSSL_free(*out);
-      return 0;
-    }
-    size_t todo = len - done;
-    if (todo > INT_MAX) {
-      todo = INT_MAX;
-    }
-    const int n = BIO_read(bio, *out + done, (int)todo);
-    if (n == 0) {
-      *out_len = done;
-      return 1;
-    } else if (n == -1) {
-      OPENSSL_free(*out);
-      return 0;
-    }
-
-    done += n;
-    if (len < max_len && len - done < kChunkSize / 2) {
-      len += kChunkSize;
-      if (len < kChunkSize || len > max_len) {
-        len = max_len;
-      }
-      uint8_t *new_buf =
-          reinterpret_cast<uint8_t *>(OPENSSL_realloc(*out, len));
-      if (new_buf == NULL) {
-        OPENSSL_free(*out);
-        return 0;
-      }
-      *out = new_buf;
-    }
-  }
-}
-
-// bio_read_full reads |len| bytes |bio| and writes them into |out|. It
-// tolerates partial reads from |bio| and returns one on success or zero if a
-// read fails before |len| bytes are read. On failure, it additionally sets
-// |*out_eof_on_first_read| to whether the error was due to |bio| returning zero
-// on the first read. |out_eof_on_first_read| may be NULL to discard the value.
-static int bio_read_full(BIO *bio, uint8_t *out, int *out_eof_on_first_read,
-                         size_t len) {
-  int first_read = 1;
-  while (len > 0) {
-    int todo = len <= INT_MAX ? (int)len : INT_MAX;
-    int ret = BIO_read(bio, out, todo);
-    if (ret <= 0) {
-      if (out_eof_on_first_read != NULL) {
-        *out_eof_on_first_read = first_read && ret == 0;
-      }
-      return 0;
-    }
-    out += ret;
-    len -= (size_t)ret;
-    first_read = 0;
-  }
-
-  return 1;
-}
-
-// For compatibility with existing |d2i_*_bio| callers, |BIO_read_asn1| uses
-// |ERR_LIB_ASN1| errors.
-OPENSSL_DECLARE_ERROR_REASON(ASN1, ASN1_R_DECODE_ERROR)
-OPENSSL_DECLARE_ERROR_REASON(ASN1, ASN1_R_HEADER_TOO_LONG)
-OPENSSL_DECLARE_ERROR_REASON(ASN1, ASN1_R_NOT_ENOUGH_DATA)
-OPENSSL_DECLARE_ERROR_REASON(ASN1, ASN1_R_TOO_LONG)
-
-int BIO_read_asn1(BIO *bio, uint8_t **out, size_t *out_len, size_t max_len) {
-  uint8_t header[6];
-
-  static const size_t kInitialHeaderLen = 2;
-  int eof_on_first_read;
-  if (!bio_read_full(bio, header, &eof_on_first_read, kInitialHeaderLen)) {
-    if (eof_on_first_read) {
-      // Historically, OpenSSL returned |ASN1_R_HEADER_TOO_LONG| when
-      // |d2i_*_bio| could not read anything. CPython conditions on this to
-      // determine if |bio| was empty.
-      OPENSSL_PUT_ERROR(ASN1, ASN1_R_HEADER_TOO_LONG);
-    } else {
-      OPENSSL_PUT_ERROR(ASN1, ASN1_R_NOT_ENOUGH_DATA);
-    }
-    return 0;
-  }
-
-  const uint8_t tag = header[0];
-  const uint8_t length_byte = header[1];
-
-  if ((tag & 0x1f) == 0x1f) {
-    // Long form tags are not supported.
-    OPENSSL_PUT_ERROR(ASN1, ASN1_R_DECODE_ERROR);
-    return 0;
-  }
-
-  size_t len, header_len;
-  if ((length_byte & 0x80) == 0) {
-    // Short form length.
-    len = length_byte;
-    header_len = kInitialHeaderLen;
-  } else {
-    const size_t num_bytes = length_byte & 0x7f;
-
-    if ((tag & 0x20 /* constructed */) != 0 && num_bytes == 0) {
-      // indefinite length.
-      if (!bio_read_all(bio, out, out_len, header, kInitialHeaderLen,
-                        max_len)) {
-        OPENSSL_PUT_ERROR(ASN1, ASN1_R_NOT_ENOUGH_DATA);
-        return 0;
-      }
-      return 1;
-    }
-
-    if (num_bytes == 0 || num_bytes > 4) {
-      OPENSSL_PUT_ERROR(ASN1, ASN1_R_DECODE_ERROR);
-      return 0;
-    }
-
-    if (!bio_read_full(bio, header + kInitialHeaderLen, NULL, num_bytes)) {
-      OPENSSL_PUT_ERROR(ASN1, ASN1_R_NOT_ENOUGH_DATA);
-      return 0;
-    }
-    header_len = kInitialHeaderLen + num_bytes;
-
-    uint32_t len32 = 0;
-    for (unsigned i = 0; i < num_bytes; i++) {
-      len32 <<= 8;
-      len32 |= header[kInitialHeaderLen + i];
-    }
-
-    if (len32 < 128) {
-      // Length should have used short-form encoding.
-      OPENSSL_PUT_ERROR(ASN1, ASN1_R_DECODE_ERROR);
-      return 0;
-    }
-
-    if ((len32 >> ((num_bytes - 1) * 8)) == 0) {
-      // Length should have been at least one byte shorter.
-      OPENSSL_PUT_ERROR(ASN1, ASN1_R_DECODE_ERROR);
-      return 0;
-    }
-
-    len = len32;
-  }
-
-  if (len + header_len < len || len + header_len > max_len || len > INT_MAX) {
-    OPENSSL_PUT_ERROR(ASN1, ASN1_R_TOO_LONG);
-    return 0;
-  }
-  len += header_len;
-  *out_len = len;
-
-  *out = reinterpret_cast<uint8_t *>(OPENSSL_malloc(len));
-  if (*out == NULL) {
-    return 0;
-  }
-  OPENSSL_memcpy(*out, header, header_len);
-  if (!bio_read_full(bio, (*out) + header_len, NULL, len - header_len)) {
-    OPENSSL_PUT_ERROR(ASN1, ASN1_R_NOT_ENOUGH_DATA);
-    OPENSSL_free(*out);
-    return 0;
-  }
-
-  return 1;
-}
-
-void BIO_set_retry_special(BIO *bio) {
-  bio->flags |= BIO_FLAGS_READ | BIO_FLAGS_IO_SPECIAL;
-}
-
-int BIO_set_write_buffer_size(BIO *bio, int buffer_size) { return 0; }
-
-static CRYPTO_MUTEX g_index_lock = CRYPTO_MUTEX_INIT;
-static int g_index = BIO_TYPE_START;
-
-int BIO_get_new_index(void) {
-  CRYPTO_MUTEX_lock_write(&g_index_lock);
-  // If |g_index| exceeds 255, it will collide with the flags bits.
-  int ret = g_index > 255 ? -1 : g_index++;
-  CRYPTO_MUTEX_unlock_write(&g_index_lock);
-  return ret;
-}
-
-BIO_METHOD *BIO_meth_new(int type, const char *name) {
-  BIO_METHOD *method =
-      reinterpret_cast<BIO_METHOD *>(OPENSSL_zalloc(sizeof(BIO_METHOD)));
-  if (method == NULL) {
-    return NULL;
-  }
-  method->type = type;
-  method->name = name;
-  return method;
-}
-
-void BIO_meth_free(BIO_METHOD *method) { OPENSSL_free(method); }
-
-int BIO_meth_set_create(BIO_METHOD *method, int (*create_func)(BIO *)) {
-  method->create = create_func;
-  return 1;
-}
-
-int BIO_meth_set_destroy(BIO_METHOD *method, int (*destroy_func)(BIO *)) {
-  method->destroy = destroy_func;
-  return 1;
-}
-
-int BIO_meth_set_write(BIO_METHOD *method,
-                       int (*write_func)(BIO *, const char *, int)) {
-  method->bwrite = write_func;
-  return 1;
-}
-
-int BIO_meth_set_read(BIO_METHOD *method,
-                      int (*read_func)(BIO *, char *, int)) {
-  method->bread = read_func;
-  return 1;
-}
-
-int BIO_meth_set_gets(BIO_METHOD *method,
-                      int (*gets_func)(BIO *, char *, int)) {
-  method->bgets = gets_func;
-  return 1;
-}
-
-int BIO_meth_set_ctrl(BIO_METHOD *method,
-                      long (*ctrl_func)(BIO *, int, long, void *)) {
-  method->ctrl = ctrl_func;
-  return 1;
-}
-
-void BIO_set_data(BIO *bio, void *ptr) { bio->ptr = ptr; }
-
-void *BIO_get_data(BIO *bio) { return bio->ptr; }
-
-void BIO_set_init(BIO *bio, int init) { bio->init = init; }
-
-int BIO_get_init(BIO *bio) { return bio->init; }
-
-void BIO_set_shutdown(BIO *bio, int shutdown) { bio->shutdown = shutdown; }
-
-int BIO_get_shutdown(BIO *bio) { return bio->shutdown; }
-
-int BIO_meth_set_puts(BIO_METHOD *method, int (*puts)(BIO *, const char *)) {
-  // Ignore the parameter. We implement |BIO_puts| using |BIO_write|.
-  return 1;
-}
-
-int BIO_get_ex_new_index(long argl, void *argp,      //
-                         CRYPTO_EX_unused *unused,   //
-                         CRYPTO_EX_dup *dup_unused,  //
-                         CRYPTO_EX_free *free_func) {
-  return CRYPTO_get_ex_new_index_ex(&g_ex_data_class, argl, argp, free_func);
-}
-
-int BIO_set_ex_data(BIO *bio, int idx, void *data) {
-  return CRYPTO_set_ex_data(&bio->ex_data, idx, data);
-}
-
-void *BIO_get_ex_data(const BIO *bio, int idx) {
-  return CRYPTO_get_ex_data(&bio->ex_data, idx);
-}
diff --git a/src/crypto/bio/bio_mem.cc b/src/crypto/bio/bio_mem.cc
deleted file mode 100644
index 2814074..0000000
--- a/src/crypto/bio/bio_mem.cc
+++ /dev/null
@@ -1,268 +0,0 @@
-// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
-//
-// 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
-//
-//     https://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 <openssl/bio.h>
-
-#include <limits.h>
-#include <string.h>
-
-#include <openssl/buf.h>
-#include <openssl/err.h>
-#include <openssl/mem.h>
-
-#include "../internal.h"
-
-
-BIO *BIO_new_mem_buf(const void *buf, ossl_ssize_t len) {
-  BIO *ret;
-  BUF_MEM *b;
-  const size_t size = len < 0 ? strlen((char *)buf) : (size_t)len;
-
-  if (!buf && len != 0) {
-    OPENSSL_PUT_ERROR(BIO, BIO_R_NULL_PARAMETER);
-    return NULL;
-  }
-
-  ret = BIO_new(BIO_s_mem());
-  if (ret == NULL) {
-    return NULL;
-  }
-
-  b = (BUF_MEM *)ret->ptr;
-  // BIO_FLAGS_MEM_RDONLY ensures |b->data| is not written to.
-  b->data = reinterpret_cast<char *>(const_cast<void *>(buf));
-  b->length = size;
-  b->max = size;
-
-  ret->flags |= BIO_FLAGS_MEM_RDONLY;
-
-  // |num| is used to store the value that this BIO will return when it runs
-  // out of data. If it's negative then the retry flags will also be set. Since
-  // this is static data, retrying wont help
-  ret->num = 0;
-
-  return ret;
-}
-
-static int mem_new(BIO *bio) {
-  BUF_MEM *b;
-
-  b = BUF_MEM_new();
-  if (b == NULL) {
-    return 0;
-  }
-
-  // |shutdown| is used to store the close flag: whether the BIO has ownership
-  // of the BUF_MEM.
-  bio->shutdown = 1;
-  bio->init = 1;
-  bio->num = -1;
-  bio->ptr = (char *)b;
-
-  return 1;
-}
-
-static int mem_free(BIO *bio) {
-  if (!bio->shutdown || !bio->init || bio->ptr == NULL) {
-    return 1;
-  }
-
-  BUF_MEM *b = (BUF_MEM *)bio->ptr;
-  if (bio->flags & BIO_FLAGS_MEM_RDONLY) {
-    b->data = NULL;
-  }
-  BUF_MEM_free(b);
-  bio->ptr = NULL;
-  return 1;
-}
-
-static int mem_read(BIO *bio, char *out, int outl) {
-  BIO_clear_retry_flags(bio);
-  if (outl <= 0) {
-    return 0;
-  }
-
-  BUF_MEM *b = reinterpret_cast<BUF_MEM *>(bio->ptr);
-  int ret = outl;
-  if ((size_t)ret > b->length) {
-    ret = (int)b->length;
-  }
-
-  if (ret > 0) {
-    OPENSSL_memcpy(out, b->data, ret);
-    b->length -= ret;
-    if (bio->flags & BIO_FLAGS_MEM_RDONLY) {
-      b->data += ret;
-    } else {
-      OPENSSL_memmove(b->data, &b->data[ret], b->length);
-    }
-  } else if (b->length == 0) {
-    ret = bio->num;
-    if (ret != 0) {
-      BIO_set_retry_read(bio);
-    }
-  }
-  return ret;
-}
-
-static int mem_write(BIO *bio, const char *in, int inl) {
-  BIO_clear_retry_flags(bio);
-  if (inl <= 0) {
-    return 0;  // Successfully write zero bytes.
-  }
-
-  if (bio->flags & BIO_FLAGS_MEM_RDONLY) {
-    OPENSSL_PUT_ERROR(BIO, BIO_R_WRITE_TO_READ_ONLY_BIO);
-    return -1;
-  }
-
-  BUF_MEM *b = reinterpret_cast<BUF_MEM *>(bio->ptr);
-  if (!BUF_MEM_append(b, in, inl)) {
-    return -1;
-  }
-
-  return inl;
-}
-
-static int mem_gets(BIO *bio, char *buf, int size) {
-  BIO_clear_retry_flags(bio);
-  if (size <= 0) {
-    return 0;
-  }
-
-  // The buffer size includes space for the trailing NUL, so we can read at most
-  // one fewer byte.
-  BUF_MEM *b = reinterpret_cast<BUF_MEM *>(bio->ptr);
-  int ret = size - 1;
-  if ((size_t)ret > b->length) {
-    ret = (int)b->length;
-  }
-
-  // Stop at the first newline.
-  const char *newline =
-      reinterpret_cast<char *>(OPENSSL_memchr(b->data, '\n', ret));
-  if (newline != NULL) {
-    ret = (int)(newline - b->data + 1);
-  }
-
-  ret = mem_read(bio, buf, ret);
-  if (ret >= 0) {
-    buf[ret] = '\0';
-  }
-  return ret;
-}
-
-static long mem_ctrl(BIO *bio, int cmd, long num, void *ptr) {
-  long ret = 1;
-
-  BUF_MEM *b = (BUF_MEM *)bio->ptr;
-
-  switch (cmd) {
-    case BIO_CTRL_RESET:
-      if (b->data != NULL) {
-        // For read only case reset to the start again
-        if (bio->flags & BIO_FLAGS_MEM_RDONLY) {
-          b->data -= b->max - b->length;
-          b->length = b->max;
-        } else {
-          OPENSSL_memset(b->data, 0, b->max);
-          b->length = 0;
-        }
-      }
-      break;
-    case BIO_CTRL_EOF:
-      ret = (long)(b->length == 0);
-      break;
-    case BIO_C_SET_BUF_MEM_EOF_RETURN:
-      bio->num = (int)num;
-      break;
-    case BIO_CTRL_INFO:
-      ret = (long)b->length;
-      if (ptr != NULL) {
-        char **pptr = reinterpret_cast<char **>(ptr);
-        *pptr = b->data;
-      }
-      break;
-    case BIO_C_SET_BUF_MEM:
-      mem_free(bio);
-      bio->shutdown = (int)num;
-      bio->ptr = ptr;
-      break;
-    case BIO_C_GET_BUF_MEM_PTR:
-      if (ptr != NULL) {
-        BUF_MEM **pptr = reinterpret_cast<BUF_MEM **>(ptr);
-        *pptr = b;
-      }
-      break;
-    case BIO_CTRL_GET_CLOSE:
-      ret = (long)bio->shutdown;
-      break;
-    case BIO_CTRL_SET_CLOSE:
-      bio->shutdown = (int)num;
-      break;
-
-    case BIO_CTRL_WPENDING:
-      ret = 0L;
-      break;
-    case BIO_CTRL_PENDING:
-      ret = (long)b->length;
-      break;
-    case BIO_CTRL_FLUSH:
-      ret = 1;
-      break;
-    default:
-      ret = 0;
-      break;
-  }
-  return ret;
-}
-
-static const BIO_METHOD mem_method = {
-    BIO_TYPE_MEM,    "memory buffer",
-    mem_write,       mem_read,
-    NULL /* puts */, mem_gets,
-    mem_ctrl,        mem_new,
-    mem_free,        NULL /* callback_ctrl */,
-};
-
-const BIO_METHOD *BIO_s_mem(void) { return &mem_method; }
-
-int BIO_mem_contents(const BIO *bio, const uint8_t **out_contents,
-                     size_t *out_len) {
-  const BUF_MEM *b;
-  if (bio->method != &mem_method) {
-    return 0;
-  }
-
-  b = (BUF_MEM *)bio->ptr;
-  *out_contents = (uint8_t *)b->data;
-  *out_len = b->length;
-  return 1;
-}
-
-long BIO_get_mem_data(BIO *bio, char **contents) {
-  return BIO_ctrl(bio, BIO_CTRL_INFO, 0, contents);
-}
-
-int BIO_get_mem_ptr(BIO *bio, BUF_MEM **out) {
-  return (int)BIO_ctrl(bio, BIO_C_GET_BUF_MEM_PTR, 0, out);
-}
-
-int BIO_set_mem_buf(BIO *bio, BUF_MEM *b, int take_ownership) {
-  return (int)BIO_ctrl(bio, BIO_C_SET_BUF_MEM, take_ownership, b);
-}
-
-int BIO_set_mem_eof_return(BIO *bio, int eof_value) {
-  return (int)BIO_ctrl(bio, BIO_C_SET_BUF_MEM_EOF_RETURN, eof_value, NULL);
-}
diff --git a/src/crypto/bio/bio_test.cc b/src/crypto/bio/bio_test.cc
deleted file mode 100644
index faeccd8..0000000
--- a/src/crypto/bio/bio_test.cc
+++ /dev/null
@@ -1,889 +0,0 @@
-// Copyright 2014 The BoringSSL Authors
-//
-// 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
-//
-//     https://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 <algorithm>
-#include <string>
-#include <utility>
-
-#include <gtest/gtest.h>
-
-#include <openssl/bio.h>
-#include <openssl/crypto.h>
-#include <openssl/err.h>
-#include <openssl/mem.h>
-
-#include "../internal.h"
-#include "../test/file_util.h"
-#include "../test/test_util.h"
-
-#if !defined(OPENSSL_WINDOWS)
-#include <arpa/inet.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <netinet/in.h>
-#include <poll.h>
-#include <string.h>
-#include <sys/socket.h>
-#include <unistd.h>
-#else
-#include <fcntl.h>
-#include <io.h>
-#include <winsock2.h>
-#include <ws2tcpip.h>
-#endif
-
-namespace {
-
-#if !defined(OPENSSL_WINDOWS)
-using Socket = int;
-#define INVALID_SOCKET (-1)
-static int closesocket(int sock) { return close(sock); }
-static std::string LastSocketError() { return strerror(errno); }
-static const int kOpenReadOnlyBinary = O_RDONLY;
-static const int kOpenReadOnlyText = O_RDONLY;
-#else
-using Socket = SOCKET;
-static std::string LastSocketError() {
-  char buf[DECIMAL_SIZE(int) + 1];
-  snprintf(buf, sizeof(buf), "%d", WSAGetLastError());
-  return buf;
-}
-static const int kOpenReadOnlyBinary = _O_RDONLY | _O_BINARY;
-static const int kOpenReadOnlyText = O_RDONLY | _O_TEXT;
-#endif
-
-class OwnedSocket {
- public:
-  OwnedSocket() = default;
-  explicit OwnedSocket(Socket sock) : sock_(sock) {}
-  OwnedSocket(OwnedSocket &&other) { *this = std::move(other); }
-  ~OwnedSocket() { reset(); }
-  OwnedSocket &operator=(OwnedSocket &&other) {
-    reset(other.release());
-    return *this;
-  }
-
-  bool is_valid() const { return sock_ != INVALID_SOCKET; }
-  Socket get() const { return sock_; }
-  Socket release() { return std::exchange(sock_, INVALID_SOCKET); }
-
-  void reset(Socket sock = INVALID_SOCKET) {
-    if (is_valid()) {
-      closesocket(sock_);
-    }
-
-    sock_ = sock;
-  }
-
- private:
-  Socket sock_ = INVALID_SOCKET;
-};
-
-struct SockaddrStorage {
-  int family() const { return storage.ss_family; }
-
-  sockaddr *addr_mut() { return reinterpret_cast<sockaddr *>(&storage); }
-  const sockaddr *addr() const {
-    return reinterpret_cast<const sockaddr *>(&storage);
-  }
-
-  sockaddr_in ToIPv4() const {
-    if (family() != AF_INET || len != sizeof(sockaddr_in)) {
-      abort();
-    }
-    // These APIs were seemingly designed before C's strict aliasing rule, and
-    // C++'s strict union handling. Make a copy so the compiler does not read
-    // this as an aliasing violation.
-    sockaddr_in ret;
-    OPENSSL_memcpy(&ret, &storage, sizeof(ret));
-    return ret;
-  }
-
-  sockaddr_in6 ToIPv6() const {
-    if (family() != AF_INET6 || len != sizeof(sockaddr_in6)) {
-      abort();
-    }
-    // These APIs were seemingly designed before C's strict aliasing rule, and
-    // C++'s strict union handling. Make a copy so the compiler does not read
-    // this as an aliasing violation.
-    sockaddr_in6 ret;
-    OPENSSL_memcpy(&ret, &storage, sizeof(ret));
-    return ret;
-  }
-
-  sockaddr_storage storage = {};
-  socklen_t len = sizeof(storage);
-};
-
-static OwnedSocket Bind(int family, const sockaddr *addr, socklen_t addr_len) {
-  OwnedSocket sock(socket(family, SOCK_STREAM, 0));
-  if (!sock.is_valid()) {
-    return OwnedSocket();
-  }
-
-  if (bind(sock.get(), addr, addr_len) != 0) {
-    return OwnedSocket();
-  }
-
-  return sock;
-}
-
-static OwnedSocket ListenLoopback(int backlog) {
-  // Try binding to IPv6.
-  sockaddr_in6 sin6;
-  OPENSSL_memset(&sin6, 0, sizeof(sin6));
-  sin6.sin6_family = AF_INET6;
-  if (inet_pton(AF_INET6, "::1", &sin6.sin6_addr) != 1) {
-    return OwnedSocket();
-  }
-  OwnedSocket sock =
-      Bind(AF_INET6, reinterpret_cast<const sockaddr *>(&sin6), sizeof(sin6));
-  if (!sock.is_valid()) {
-    // Try binding to IPv4.
-    sockaddr_in sin;
-    OPENSSL_memset(&sin, 0, sizeof(sin));
-    sin.sin_family = AF_INET;
-    if (inet_pton(AF_INET, "127.0.0.1", &sin.sin_addr) != 1) {
-      return OwnedSocket();
-    }
-    sock = Bind(AF_INET, reinterpret_cast<const sockaddr *>(&sin), sizeof(sin));
-  }
-  if (!sock.is_valid()) {
-    return OwnedSocket();
-  }
-
-  if (listen(sock.get(), backlog) != 0) {
-    return OwnedSocket();
-  }
-
-  return sock;
-}
-
-static bool SocketSetNonBlocking(Socket sock) {
-#if defined(OPENSSL_WINDOWS)
-  u_long arg = 1;
-  return ioctlsocket(sock, FIONBIO, &arg) == 0;
-#else
-  int flags = fcntl(sock, F_GETFL, 0);
-  if (flags < 0) {
-    return false;
-  }
-  flags |= O_NONBLOCK;
-  return fcntl(sock, F_SETFL, flags) == 0;
-#endif
-}
-
-enum class WaitType { kRead, kWrite };
-
-static bool WaitForSocket(Socket sock, WaitType wait_type) {
-  // Use an arbitrary 5 second timeout, so the test doesn't hang indefinitely if
-  // there's an issue.
-  static const int kTimeoutSeconds = 5;
-#if defined(OPENSSL_WINDOWS)
-  fd_set read_set, write_set;
-  FD_ZERO(&read_set);
-  FD_ZERO(&write_set);
-  fd_set *wait_set = wait_type == WaitType::kRead ? &read_set : &write_set;
-  FD_SET(sock, wait_set);
-  timeval timeout;
-  timeout.tv_sec = kTimeoutSeconds;
-  timeout.tv_usec = 0;
-  if (select(0 /* unused on Windows */, &read_set, &write_set, nullptr,
-             &timeout) <= 0) {
-    return false;
-  }
-  return FD_ISSET(sock, wait_set);
-#else
-  short events = wait_type == WaitType::kRead ? POLLIN : POLLOUT;
-  pollfd fd = {/*fd=*/sock, events, /*revents=*/0};
-  return poll(&fd, 1, kTimeoutSeconds * 1000) == 1 && (fd.revents & events);
-#endif
-}
-
-TEST(BIOTest, SocketConnect) {
-  static const char kTestMessage[] = "test";
-  OwnedSocket listening_sock = ListenLoopback(/*backlog=*/1);
-  ASSERT_TRUE(listening_sock.is_valid()) << LastSocketError();
-
-  SockaddrStorage addr;
-  ASSERT_EQ(getsockname(listening_sock.get(), addr.addr_mut(), &addr.len), 0)
-      << LastSocketError();
-
-  char hostname[80];
-  if (addr.family() == AF_INET6) {
-    snprintf(hostname, sizeof(hostname), "[::1]:%d",
-             ntohs(addr.ToIPv6().sin6_port));
-  } else {
-    snprintf(hostname, sizeof(hostname), "127.0.0.1:%d",
-             ntohs(addr.ToIPv4().sin_port));
-  }
-
-  // Connect to it with a connect BIO.
-  bssl::UniquePtr<BIO> bio(BIO_new_connect(hostname));
-  ASSERT_TRUE(bio);
-
-  // Write a test message to the BIO. This is assumed to be smaller than the
-  // transport buffer.
-  ASSERT_EQ(static_cast<int>(sizeof(kTestMessage)),
-            BIO_write(bio.get(), kTestMessage, sizeof(kTestMessage)))
-      << LastSocketError();
-
-  // Accept the socket.
-  OwnedSocket sock(accept(listening_sock.get(), addr.addr_mut(), &addr.len));
-  ASSERT_TRUE(sock.is_valid()) << LastSocketError();
-
-  // Check the same message is read back out.
-  char buf[sizeof(kTestMessage)];
-  ASSERT_EQ(static_cast<int>(sizeof(kTestMessage)),
-            recv(sock.get(), buf, sizeof(buf), 0))
-      << LastSocketError();
-  EXPECT_EQ(Bytes(kTestMessage, sizeof(kTestMessage)), Bytes(buf, sizeof(buf)));
-}
-
-TEST(BIOTest, SocketNonBlocking) {
-  OwnedSocket listening_sock = ListenLoopback(/*backlog=*/1);
-  ASSERT_TRUE(listening_sock.is_valid()) << LastSocketError();
-
-  // Connect to |listening_sock|.
-  SockaddrStorage addr;
-  ASSERT_EQ(getsockname(listening_sock.get(), addr.addr_mut(), &addr.len), 0)
-      << LastSocketError();
-  OwnedSocket connect_sock(socket(addr.family(), SOCK_STREAM, 0));
-  ASSERT_TRUE(connect_sock.is_valid()) << LastSocketError();
-  ASSERT_EQ(connect(connect_sock.get(), addr.addr(), addr.len), 0)
-      << LastSocketError();
-  ASSERT_TRUE(SocketSetNonBlocking(connect_sock.get())) << LastSocketError();
-  bssl::UniquePtr<BIO> connect_bio(
-      BIO_new_socket(connect_sock.get(), BIO_NOCLOSE));
-  ASSERT_TRUE(connect_bio);
-
-  // Make a corresponding accepting socket.
-  OwnedSocket accept_sock(
-      accept(listening_sock.get(), addr.addr_mut(), &addr.len));
-  ASSERT_TRUE(accept_sock.is_valid()) << LastSocketError();
-  ASSERT_TRUE(SocketSetNonBlocking(accept_sock.get())) << LastSocketError();
-  bssl::UniquePtr<BIO> accept_bio(
-      BIO_new_socket(accept_sock.get(), BIO_NOCLOSE));
-  ASSERT_TRUE(accept_bio);
-
-  // Exchange data through the socket.
-  static const char kTestMessage[] = "hello, world";
-
-  // Reading from |accept_bio| should not block.
-  char buf[sizeof(kTestMessage)];
-  int ret = BIO_read(accept_bio.get(), buf, sizeof(buf));
-  EXPECT_EQ(ret, -1);
-  EXPECT_TRUE(BIO_should_read(accept_bio.get())) << LastSocketError();
-
-  // Writing to |connect_bio| should eventually overflow the transport buffers
-  // and also give a retryable error.
-  int bytes_written = 0;
-  for (;;) {
-    ret = BIO_write(connect_bio.get(), kTestMessage, sizeof(kTestMessage));
-    if (ret <= 0) {
-      EXPECT_EQ(ret, -1);
-      EXPECT_TRUE(BIO_should_write(connect_bio.get())) << LastSocketError();
-      break;
-    }
-    bytes_written += ret;
-  }
-  EXPECT_GT(bytes_written, 0);
-
-  // |accept_bio| should readable. Drain it. Note data is not always available
-  // from loopback immediately, notably on macOS, so wait for the socket first.
-  int bytes_read = 0;
-  while (bytes_read < bytes_written) {
-    ASSERT_TRUE(WaitForSocket(accept_sock.get(), WaitType::kRead))
-        << LastSocketError();
-    ret = BIO_read(accept_bio.get(), buf, sizeof(buf));
-    ASSERT_GT(ret, 0);
-    bytes_read += ret;
-  }
-
-  // |connect_bio| should become writeable again.
-  ASSERT_TRUE(WaitForSocket(accept_sock.get(), WaitType::kWrite))
-      << LastSocketError();
-  ret = BIO_write(connect_bio.get(), kTestMessage, sizeof(kTestMessage));
-  EXPECT_EQ(static_cast<int>(sizeof(kTestMessage)), ret);
-
-  ASSERT_TRUE(WaitForSocket(accept_sock.get(), WaitType::kRead))
-      << LastSocketError();
-  ret = BIO_read(accept_bio.get(), buf, sizeof(buf));
-  EXPECT_EQ(static_cast<int>(sizeof(kTestMessage)), ret);
-  EXPECT_EQ(Bytes(buf), Bytes(kTestMessage));
-
-  // Close one socket. We should get an EOF out the other.
-  connect_bio.reset();
-  connect_sock.reset();
-
-  ASSERT_TRUE(WaitForSocket(accept_sock.get(), WaitType::kRead))
-      << LastSocketError();
-  ret = BIO_read(accept_bio.get(), buf, sizeof(buf));
-  EXPECT_EQ(ret, 0) << LastSocketError();
-  EXPECT_FALSE(BIO_should_read(accept_bio.get()));
-}
-
-TEST(BIOTest, Printf) {
-  // Test a short output, a very long one, and various sizes around
-  // 256 (the size of the buffer) to ensure edge cases are correct.
-  static const size_t kLengths[] = {5, 250, 251, 252, 253, 254, 1023};
-
-  bssl::UniquePtr<BIO> bio(BIO_new(BIO_s_mem()));
-  ASSERT_TRUE(bio);
-
-  for (size_t length : kLengths) {
-    SCOPED_TRACE(length);
-
-    std::string in(length, 'a');
-
-    int ret = BIO_printf(bio.get(), "test %s", in.c_str());
-    ASSERT_GE(ret, 0);
-    EXPECT_EQ(5 + length, static_cast<size_t>(ret));
-
-    const uint8_t *contents;
-    size_t len;
-    ASSERT_TRUE(BIO_mem_contents(bio.get(), &contents, &len));
-    EXPECT_EQ("test " + in, bssl::BytesAsStringView(bssl::Span(contents, len)));
-
-    ASSERT_TRUE(BIO_reset(bio.get()));
-  }
-}
-
-TEST(BIOTest, ReadASN1) {
-  static const size_t kLargeASN1PayloadLen = 8000;
-
-  struct ASN1Test {
-    bool should_succeed;
-    std::vector<uint8_t> input;
-    // suffix_len is the number of zeros to append to |input|.
-    size_t suffix_len;
-    // expected_len, if |should_succeed| is true, is the expected length of the
-    // ASN.1 element.
-    size_t expected_len;
-    size_t max_len;
-  } kASN1Tests[] = {
-      {true, {0x30, 2, 1, 2, 0, 0}, 0, 4, 100},
-      {false /* truncated */, {0x30, 3, 1, 2}, 0, 0, 100},
-      {false /* should be short len */, {0x30, 0x81, 1, 1}, 0, 0, 100},
-      {false /* zero padded */, {0x30, 0x82, 0, 1, 1}, 0, 0, 100},
-
-      // Test a large payload.
-      {true,
-       {0x30, 0x82, kLargeASN1PayloadLen >> 8, kLargeASN1PayloadLen & 0xff},
-       kLargeASN1PayloadLen,
-       4 + kLargeASN1PayloadLen,
-       kLargeASN1PayloadLen * 2},
-      {false /* max_len too short */,
-       {0x30, 0x82, kLargeASN1PayloadLen >> 8, kLargeASN1PayloadLen & 0xff},
-       kLargeASN1PayloadLen,
-       4 + kLargeASN1PayloadLen,
-       3 + kLargeASN1PayloadLen},
-
-      // Test an indefinite-length input.
-      {true,
-       {0x30, 0x80},
-       kLargeASN1PayloadLen + 2,
-       2 + kLargeASN1PayloadLen + 2,
-       kLargeASN1PayloadLen * 2},
-      {false /* max_len too short */,
-       {0x30, 0x80},
-       kLargeASN1PayloadLen + 2,
-       2 + kLargeASN1PayloadLen + 2,
-       2 + kLargeASN1PayloadLen + 1},
-  };
-
-  for (const auto &t : kASN1Tests) {
-    std::vector<uint8_t> input = t.input;
-    input.resize(input.size() + t.suffix_len, 0);
-
-    bssl::UniquePtr<BIO> bio(BIO_new_mem_buf(input.data(), input.size()));
-    ASSERT_TRUE(bio);
-
-    uint8_t *out;
-    size_t out_len;
-    int ok = BIO_read_asn1(bio.get(), &out, &out_len, t.max_len);
-    if (!ok) {
-      out = nullptr;
-    }
-    bssl::UniquePtr<uint8_t> out_storage(out);
-
-    ASSERT_EQ(t.should_succeed, (ok == 1));
-    if (t.should_succeed) {
-      EXPECT_EQ(Bytes(input.data(), t.expected_len), Bytes(out, out_len));
-    }
-  }
-}
-
-TEST(BIOTest, MemReadOnly) {
-  // A memory BIO created from |BIO_new_mem_buf| is a read-only buffer.
-  static const char kData[] = "abcdefghijklmno";
-  bssl::UniquePtr<BIO> bio(BIO_new_mem_buf(kData, strlen(kData)));
-  ASSERT_TRUE(bio);
-
-  // Writing to read-only buffers should fail.
-  EXPECT_EQ(BIO_write(bio.get(), kData, strlen(kData)), -1);
-
-  const uint8_t *contents;
-  size_t len;
-  ASSERT_TRUE(BIO_mem_contents(bio.get(), &contents, &len));
-  EXPECT_EQ(Bytes(contents, len), Bytes(kData));
-  EXPECT_EQ(BIO_eof(bio.get()), 0);
-
-  // Read less than the whole buffer.
-  char buf[6];
-  int ret = BIO_read(bio.get(), buf, sizeof(buf));
-  ASSERT_GT(ret, 0);
-  EXPECT_EQ(Bytes(buf, ret), Bytes("abcdef"));
-
-  ASSERT_TRUE(BIO_mem_contents(bio.get(), &contents, &len));
-  EXPECT_EQ(Bytes(contents, len), Bytes("ghijklmno"));
-  EXPECT_EQ(BIO_eof(bio.get()), 0);
-
-  ret = BIO_read(bio.get(), buf, sizeof(buf));
-  ASSERT_GT(ret, 0);
-  EXPECT_EQ(Bytes(buf, ret), Bytes("ghijkl"));
-
-  ASSERT_TRUE(BIO_mem_contents(bio.get(), &contents, &len));
-  EXPECT_EQ(Bytes(contents, len), Bytes("mno"));
-  EXPECT_EQ(BIO_eof(bio.get()), 0);
-
-  // Read the remainder of the buffer.
-  ret = BIO_read(bio.get(), buf, sizeof(buf));
-  ASSERT_GT(ret, 0);
-  EXPECT_EQ(Bytes(buf, ret), Bytes("mno"));
-
-  ASSERT_TRUE(BIO_mem_contents(bio.get(), &contents, &len));
-  EXPECT_EQ(Bytes(contents, len), Bytes(""));
-  EXPECT_EQ(BIO_eof(bio.get()), 1);
-
-  // By default, reading from a consumed read-only buffer returns EOF.
-  EXPECT_EQ(BIO_read(bio.get(), buf, sizeof(buf)), 0);
-  EXPECT_FALSE(BIO_should_read(bio.get()));
-
-  // A memory BIO can be configured to return an error instead of EOF. This is
-  // error is returned as retryable. (This is not especially useful here. It
-  // makes more sense for a writable BIO.)
-  EXPECT_EQ(BIO_set_mem_eof_return(bio.get(), -1), 1);
-  EXPECT_EQ(BIO_read(bio.get(), buf, sizeof(buf)), -1);
-  EXPECT_TRUE(BIO_should_read(bio.get()));
-
-  // Read exactly the right number of bytes, to test the boundary condition is
-  // correct.
-  bio.reset(BIO_new_mem_buf("abc", 3));
-  ASSERT_TRUE(bio);
-  ret = BIO_read(bio.get(), buf, 3);
-  ASSERT_GT(ret, 0);
-  EXPECT_EQ(Bytes(buf, ret), Bytes("abc"));
-  EXPECT_EQ(BIO_eof(bio.get()), 1);
-}
-
-TEST(BIOTest, MemWritable) {
-  // A memory BIO created from |BIO_new| is writable.
-  bssl::UniquePtr<BIO> bio(BIO_new(BIO_s_mem()));
-  ASSERT_TRUE(bio);
-
-  auto check_bio_contents = [&](Bytes b) {
-    const uint8_t *contents;
-    size_t len;
-    ASSERT_TRUE(BIO_mem_contents(bio.get(), &contents, &len));
-    EXPECT_EQ(Bytes(contents, len), b);
-
-    char *contents_c;
-    long len_l = BIO_get_mem_data(bio.get(), &contents_c);
-    ASSERT_GE(len_l, 0);
-    EXPECT_EQ(Bytes(contents_c, len_l), b);
-
-    BUF_MEM *buf;
-    ASSERT_EQ(BIO_get_mem_ptr(bio.get(), &buf), 1);
-    EXPECT_EQ(Bytes(buf->data, buf->length), b);
-  };
-
-  // It is initially empty.
-  check_bio_contents(Bytes(""));
-  EXPECT_EQ(BIO_eof(bio.get()), 1);
-
-  // Reading from it should default to returning a retryable error.
-  char buf[32];
-  EXPECT_EQ(BIO_read(bio.get(), buf, sizeof(buf)), -1);
-  EXPECT_TRUE(BIO_should_read(bio.get()));
-
-  // This can be configured to return an EOF.
-  EXPECT_EQ(BIO_set_mem_eof_return(bio.get(), 0), 1);
-  EXPECT_EQ(BIO_read(bio.get(), buf, sizeof(buf)), 0);
-  EXPECT_FALSE(BIO_should_read(bio.get()));
-
-  // Restore the default. A writable memory |BIO| is typically used in this mode
-  // so additional data can be written when exhausted.
-  EXPECT_EQ(BIO_set_mem_eof_return(bio.get(), -1), 1);
-
-  // Writes append to the buffer.
-  ASSERT_EQ(BIO_write(bio.get(), "abcdef", 6), 6);
-  check_bio_contents(Bytes("abcdef"));
-  EXPECT_EQ(BIO_eof(bio.get()), 0);
-
-  // Writes can include embedded NULs.
-  ASSERT_EQ(BIO_write(bio.get(), "\0ghijk", 6), 6);
-  check_bio_contents(Bytes("abcdef\0ghijk", 12));
-  EXPECT_EQ(BIO_eof(bio.get()), 0);
-
-  // Do a partial read.
-  int ret = BIO_read(bio.get(), buf, 4);
-  ASSERT_GT(ret, 0);
-  EXPECT_EQ(Bytes(buf, ret), Bytes("abcd"));
-  check_bio_contents(Bytes("ef\0ghijk", 8));
-  EXPECT_EQ(BIO_eof(bio.get()), 0);
-
-  // Reads and writes may alternate.
-  ASSERT_EQ(BIO_write(bio.get(), "lmnopq", 6), 6);
-  check_bio_contents(Bytes("ef\0ghijklmnopq", 14));
-  EXPECT_EQ(BIO_eof(bio.get()), 0);
-
-  // Reads may consume embedded NULs.
-  ret = BIO_read(bio.get(), buf, 4);
-  ASSERT_GT(ret, 0);
-  EXPECT_EQ(Bytes(buf, ret), Bytes("ef\0g", 4));
-  check_bio_contents(Bytes("hijklmnopq"));
-  EXPECT_EQ(BIO_eof(bio.get()), 0);
-
-  // The read buffer exceeds the |BIO|, so we consume everything.
-  ret = BIO_read(bio.get(), buf, sizeof(buf));
-  ASSERT_GT(ret, 0);
-  EXPECT_EQ(Bytes(buf, ret), Bytes("hijklmnopq"));
-  check_bio_contents(Bytes(""));
-  EXPECT_EQ(BIO_eof(bio.get()), 1);
-
-  // The |BIO| is now empty.
-  EXPECT_EQ(BIO_read(bio.get(), buf, sizeof(buf)), -1);
-  EXPECT_TRUE(BIO_should_read(bio.get()));
-
-  // Repeat the above, reading exactly the right number of bytes, to test the
-  // boundary condition is correct.
-  ASSERT_EQ(BIO_write(bio.get(), "abc", 3), 3);
-  ret = BIO_read(bio.get(), buf, 3);
-  EXPECT_EQ(Bytes(buf, ret), Bytes("abc"));
-  EXPECT_EQ(BIO_read(bio.get(), buf, sizeof(buf)), -1);
-  EXPECT_TRUE(BIO_should_read(bio.get()));
-  EXPECT_EQ(BIO_eof(bio.get()), 1);
-}
-
-TEST(BIOTest, Gets) {
-  const struct {
-    std::string bio;
-    int gets_len;
-    std::string gets_result;
-  } kGetsTests[] = {
-      // BIO_gets should stop at the first newline. If the buffer is too small,
-      // stop there instead. Note the buffer size
-      // includes a trailing NUL.
-      {"123456789\n123456789", 5, "1234"},
-      {"123456789\n123456789", 9, "12345678"},
-      {"123456789\n123456789", 10, "123456789"},
-      {"123456789\n123456789", 11, "123456789\n"},
-      {"123456789\n123456789", 12, "123456789\n"},
-      {"123456789\n123456789", 256, "123456789\n"},
-
-      // If we run out of buffer, read the whole buffer.
-      {"12345", 5, "1234"},
-      {"12345", 6, "12345"},
-      {"12345", 10, "12345"},
-
-      // NUL bytes do not terminate gets.
-      {std::string("abc\0def\nghi", 11), 256, std::string("abc\0def\n", 8)},
-
-      // An output size of one means we cannot read any bytes. Only the trailing
-      // NUL is included.
-      {"12345", 1, ""},
-
-      // Empty line.
-      {"\nabcdef", 256, "\n"},
-      // Empty BIO.
-      {"", 256, ""},
-  };
-  for (const auto &t : kGetsTests) {
-    SCOPED_TRACE(t.bio);
-    SCOPED_TRACE(t.gets_len);
-
-    auto check_bio_gets = [&](BIO *bio) {
-      std::vector<char> buf(t.gets_len, 'a');
-      int ret = BIO_gets(bio, buf.data(), t.gets_len);
-      ASSERT_GE(ret, 0);
-      // |BIO_gets| should write a NUL terminator, not counted in the return
-      // value.
-      EXPECT_EQ(Bytes(buf.data(), ret + 1),
-                Bytes(t.gets_result.data(), t.gets_result.size() + 1));
-
-      // The remaining data should still be in the BIO.
-      buf.resize(t.bio.size() + 1);
-      ret = BIO_read(bio, buf.data(), static_cast<int>(buf.size()));
-      ASSERT_GE(ret, 0);
-      EXPECT_EQ(Bytes(buf.data(), ret),
-                Bytes(t.bio.substr(t.gets_result.size())));
-    };
-
-    {
-      SCOPED_TRACE("memory");
-      bssl::UniquePtr<BIO> bio(BIO_new_mem_buf(t.bio.data(), t.bio.size()));
-      ASSERT_TRUE(bio);
-      check_bio_gets(bio.get());
-    }
-
-    if (!bssl::SkipTempFileTests()) {
-      bssl::TemporaryFile file;
-      ASSERT_TRUE(file.Init(t.bio));
-
-      // TODO(crbug.com/boringssl/585): If the line has an embedded NUL, file
-      // BIOs do not currently report the answer correctly.
-      if (t.bio.find('\0') == std::string::npos) {
-        SCOPED_TRACE("file");
-
-        // Test |BIO_new_file|.
-        bssl::UniquePtr<BIO> bio(BIO_new_file(file.path().c_str(), "rb"));
-        ASSERT_TRUE(bio);
-        check_bio_gets(bio.get());
-
-        // Test |BIO_read_filename|.
-        bio.reset(BIO_new(BIO_s_file()));
-        ASSERT_TRUE(bio);
-        ASSERT_TRUE(BIO_read_filename(bio.get(), file.path().c_str()));
-        check_bio_gets(bio.get());
-
-        // Test |BIO_NOCLOSE|.
-        bssl::ScopedFILE file_obj = file.Open("rb");
-        ASSERT_TRUE(file_obj);
-        bio.reset(BIO_new_fp(file_obj.get(), BIO_NOCLOSE));
-        ASSERT_TRUE(bio);
-        check_bio_gets(bio.get());
-
-        // Test |BIO_CLOSE|.
-        file_obj = file.Open("rb");
-        ASSERT_TRUE(file_obj);
-        bio.reset(BIO_new_fp(file_obj.get(), BIO_CLOSE));
-        ASSERT_TRUE(bio);
-        file_obj.release();  // |BIO_new_fp| took ownership on success.
-        check_bio_gets(bio.get());
-      }
-
-      {
-        SCOPED_TRACE("fd");
-
-        // Test |BIO_NOCLOSE|.
-        bssl::ScopedFD fd = file.OpenFD(kOpenReadOnlyBinary);
-        ASSERT_TRUE(fd.is_valid());
-        bssl::UniquePtr<BIO> bio(BIO_new_fd(fd.get(), BIO_NOCLOSE));
-        ASSERT_TRUE(bio);
-        check_bio_gets(bio.get());
-
-        // Test |BIO_CLOSE|.
-        fd = file.OpenFD(kOpenReadOnlyBinary);
-        ASSERT_TRUE(fd.is_valid());
-        bio.reset(BIO_new_fd(fd.get(), BIO_CLOSE));
-        ASSERT_TRUE(bio);
-        fd.release();  // |BIO_new_fd| took ownership on success.
-        check_bio_gets(bio.get());
-      }
-    }
-  }
-
-  // Negative and zero lengths should not output anything, even a trailing NUL.
-  bssl::UniquePtr<BIO> bio(BIO_new_mem_buf("12345", -1));
-  ASSERT_TRUE(bio);
-  char c = 'a';
-  EXPECT_EQ(0, BIO_gets(bio.get(), &c, -1));
-  EXPECT_EQ(0, BIO_gets(bio.get(), &c, 0));
-  EXPECT_EQ(c, 'a');
-}
-
-// Test that, on Windows, file BIOs correctly handle text vs binary mode.
-TEST(BIOTest, FileMode) {
-  if (bssl::SkipTempFileTests()) {
-    GTEST_SKIP();
-  }
-
-  bssl::TemporaryFile temp;
-  ASSERT_TRUE(temp.Init("hello\r\nworld"));
-
-  auto expect_file_contents = [](BIO *bio, const std::string &str) {
-    // Read more than expected, to make sure we've reached the end of the file.
-    std::vector<char> buf(str.size() + 100);
-    int len = BIO_read(bio, buf.data(), static_cast<int>(buf.size()));
-    ASSERT_GT(len, 0);
-    EXPECT_EQ(Bytes(buf.data(), len), Bytes(str));
-  };
-  auto expect_binary_mode = [&](BIO *bio) {
-    expect_file_contents(bio, "hello\r\nworld");
-  };
-  auto expect_text_mode = [&](BIO *bio) {
-#if defined(OPENSSL_WINDOWS)
-    expect_file_contents(bio, "hello\nworld");
-#else
-    expect_file_contents(bio, "hello\r\nworld");
-#endif
-  };
-
-  // |BIO_read_filename| should open in binary mode.
-  bssl::UniquePtr<BIO> bio(BIO_new(BIO_s_file()));
-  ASSERT_TRUE(bio);
-  ASSERT_TRUE(BIO_read_filename(bio.get(), temp.path().c_str()));
-  expect_binary_mode(bio.get());
-
-  // |BIO_new_file| should use the specified mode.
-  bio.reset(BIO_new_file(temp.path().c_str(), "rb"));
-  ASSERT_TRUE(bio);
-  expect_binary_mode(bio.get());
-
-  bio.reset(BIO_new_file(temp.path().c_str(), "r"));
-  ASSERT_TRUE(bio);
-  expect_text_mode(bio.get());
-
-  // |BIO_new_fp| inherits the file's existing mode by default.
-  bssl::ScopedFILE file = temp.Open("rb");
-  ASSERT_TRUE(file);
-  bio.reset(BIO_new_fp(file.get(), BIO_NOCLOSE));
-  ASSERT_TRUE(bio);
-  expect_binary_mode(bio.get());
-
-  file = temp.Open("r");
-  ASSERT_TRUE(file);
-  bio.reset(BIO_new_fp(file.get(), BIO_NOCLOSE));
-  ASSERT_TRUE(bio);
-  expect_text_mode(bio.get());
-
-  // However, |BIO_FP_TEXT| changes the file to be text mode, no matter how it
-  // was opened.
-  file = temp.Open("rb");
-  ASSERT_TRUE(file);
-  bio.reset(BIO_new_fp(file.get(), BIO_NOCLOSE | BIO_FP_TEXT));
-  ASSERT_TRUE(bio);
-  expect_text_mode(bio.get());
-
-  file = temp.Open("r");
-  ASSERT_TRUE(file);
-  bio.reset(BIO_new_fp(file.get(), BIO_NOCLOSE | BIO_FP_TEXT));
-  ASSERT_TRUE(bio);
-  expect_text_mode(bio.get());
-
-  // |BIO_new_fd| inherits the FD's existing mode.
-  bssl::ScopedFD fd = temp.OpenFD(kOpenReadOnlyBinary);
-  ASSERT_TRUE(fd.is_valid());
-  bio.reset(BIO_new_fd(fd.get(), BIO_NOCLOSE));
-  ASSERT_TRUE(bio);
-  expect_binary_mode(bio.get());
-
-  fd = temp.OpenFD(kOpenReadOnlyText);
-  ASSERT_TRUE(fd.is_valid());
-  bio.reset(BIO_new_fd(fd.get(), BIO_NOCLOSE));
-  ASSERT_TRUE(bio);
-  expect_text_mode(bio.get());
-}
-
-// Run through the tests twice, swapping |bio1| and |bio2|, for symmetry.
-class BIOPairTest : public testing::TestWithParam<bool> {};
-
-TEST_P(BIOPairTest, TestPair) {
-  BIO *bio1, *bio2;
-  ASSERT_TRUE(BIO_new_bio_pair(&bio1, 10, &bio2, 10));
-  bssl::UniquePtr<BIO> free_bio1(bio1), free_bio2(bio2);
-
-  if (GetParam()) {
-    std::swap(bio1, bio2);
-  }
-
-  // Check initial states.
-  EXPECT_EQ(10u, BIO_ctrl_get_write_guarantee(bio1));
-  EXPECT_EQ(0u, BIO_ctrl_get_read_request(bio1));
-
-  // Data written in one end may be read out the other.
-  uint8_t buf[20];
-  EXPECT_EQ(5, BIO_write(bio1, "12345", 5));
-  EXPECT_EQ(5u, BIO_ctrl_get_write_guarantee(bio1));
-  ASSERT_EQ(5, BIO_read(bio2, buf, sizeof(buf)));
-  EXPECT_EQ(Bytes("12345"), Bytes(buf, 5));
-  EXPECT_EQ(10u, BIO_ctrl_get_write_guarantee(bio1));
-
-  // Attempting to write more than 10 bytes will write partially.
-  EXPECT_EQ(10, BIO_write(bio1, "1234567890___", 13));
-  EXPECT_EQ(0u, BIO_ctrl_get_write_guarantee(bio1));
-  EXPECT_EQ(-1, BIO_write(bio1, "z", 1));
-  EXPECT_TRUE(BIO_should_write(bio1));
-  ASSERT_EQ(10, BIO_read(bio2, buf, sizeof(buf)));
-  EXPECT_EQ(Bytes("1234567890"), Bytes(buf, 10));
-  EXPECT_EQ(10u, BIO_ctrl_get_write_guarantee(bio1));
-
-  // Unsuccessful reads update the read request.
-  EXPECT_EQ(-1, BIO_read(bio2, buf, 5));
-  EXPECT_TRUE(BIO_should_read(bio2));
-  EXPECT_EQ(5u, BIO_ctrl_get_read_request(bio1));
-
-  // The read request is clamped to the size of the buffer.
-  EXPECT_EQ(-1, BIO_read(bio2, buf, 20));
-  EXPECT_TRUE(BIO_should_read(bio2));
-  EXPECT_EQ(10u, BIO_ctrl_get_read_request(bio1));
-
-  // Data may be written and read in chunks.
-  EXPECT_EQ(5, BIO_write(bio1, "12345", 5));
-  EXPECT_EQ(5u, BIO_ctrl_get_write_guarantee(bio1));
-  EXPECT_EQ(5, BIO_write(bio1, "67890___", 8));
-  EXPECT_EQ(0u, BIO_ctrl_get_write_guarantee(bio1));
-  ASSERT_EQ(3, BIO_read(bio2, buf, 3));
-  EXPECT_EQ(Bytes("123"), Bytes(buf, 3));
-  EXPECT_EQ(3u, BIO_ctrl_get_write_guarantee(bio1));
-  ASSERT_EQ(7, BIO_read(bio2, buf, sizeof(buf)));
-  EXPECT_EQ(Bytes("4567890"), Bytes(buf, 7));
-  EXPECT_EQ(10u, BIO_ctrl_get_write_guarantee(bio1));
-
-  // Successful reads reset the read request.
-  EXPECT_EQ(0u, BIO_ctrl_get_read_request(bio1));
-
-  // Test writes and reads starting in the middle of the ring buffer and
-  // wrapping to front.
-  EXPECT_EQ(8, BIO_write(bio1, "abcdefgh", 8));
-  EXPECT_EQ(2u, BIO_ctrl_get_write_guarantee(bio1));
-  ASSERT_EQ(3, BIO_read(bio2, buf, 3));
-  EXPECT_EQ(Bytes("abc"), Bytes(buf, 3));
-  EXPECT_EQ(5u, BIO_ctrl_get_write_guarantee(bio1));
-  EXPECT_EQ(5, BIO_write(bio1, "ijklm___", 8));
-  EXPECT_EQ(0u, BIO_ctrl_get_write_guarantee(bio1));
-  ASSERT_EQ(10, BIO_read(bio2, buf, sizeof(buf)));
-  EXPECT_EQ(Bytes("defghijklm"), Bytes(buf, 10));
-  EXPECT_EQ(10u, BIO_ctrl_get_write_guarantee(bio1));
-
-  // Data may flow from both ends in parallel.
-  EXPECT_EQ(5, BIO_write(bio1, "12345", 5));
-  EXPECT_EQ(5, BIO_write(bio2, "67890", 5));
-  ASSERT_EQ(5, BIO_read(bio2, buf, sizeof(buf)));
-  EXPECT_EQ(Bytes("12345"), Bytes(buf, 5));
-  ASSERT_EQ(5, BIO_read(bio1, buf, sizeof(buf)));
-  EXPECT_EQ(Bytes("67890"), Bytes(buf, 5));
-
-  // Closing the write end causes an EOF on the read half, after draining.
-  EXPECT_EQ(5, BIO_write(bio1, "12345", 5));
-  EXPECT_TRUE(BIO_shutdown_wr(bio1));
-  ASSERT_EQ(5, BIO_read(bio2, buf, sizeof(buf)));
-  EXPECT_EQ(Bytes("12345"), Bytes(buf, 5));
-  EXPECT_EQ(0, BIO_read(bio2, buf, sizeof(buf)));
-
-  // A closed write end may not be written to.
-  EXPECT_EQ(0u, BIO_ctrl_get_write_guarantee(bio1));
-  EXPECT_EQ(-1, BIO_write(bio1, "_____", 5));
-  EXPECT_TRUE(ErrorEquals(ERR_get_error(), ERR_LIB_BIO, BIO_R_BROKEN_PIPE));
-
-  // The other end is still functional.
-  EXPECT_EQ(5, BIO_write(bio2, "12345", 5));
-  ASSERT_EQ(5, BIO_read(bio1, buf, sizeof(buf)));
-  EXPECT_EQ(Bytes("12345"), Bytes(buf, 5));
-}
-
-INSTANTIATE_TEST_SUITE_P(All, BIOPairTest, testing::Values(false, true));
-
-}  // namespace
diff --git a/src/crypto/bio/connect.cc b/src/crypto/bio/connect.cc
deleted file mode 100644
index 21f09b9..0000000
--- a/src/crypto/bio/connect.cc
+++ /dev/null
@@ -1,509 +0,0 @@
-// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
-//
-// 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
-//
-//     https://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 <openssl/bio.h>
-
-#if !defined(OPENSSL_NO_SOCK)
-
-#include <assert.h>
-#include <errno.h>
-#include <string.h>
-
-#if !defined(OPENSSL_WINDOWS)
-#include <arpa/inet.h>
-#include <netinet/in.h>
-#include <sys/socket.h>
-#include <unistd.h>
-#else
-#include <winsock2.h>
-#include <ws2tcpip.h>
-#endif
-
-#include <openssl/err.h>
-#include <openssl/mem.h>
-
-#include "../internal.h"
-#include "internal.h"
-
-
-enum {
-  BIO_CONN_S_BEFORE,
-  BIO_CONN_S_BLOCKED_CONNECT,
-  BIO_CONN_S_OK,
-};
-
-namespace {
-typedef struct bio_connect_st {
-  int state;
-
-  char *param_hostname;
-  char *param_port;
-  int nbio;
-
-  unsigned short port;
-
-  struct sockaddr_storage them;
-  socklen_t them_length;
-
-  // the file descriptor is kept in bio->num in order to match the socket
-  // BIO.
-
-  // info_callback is called when the connection is initially made
-  // callback(BIO,state,ret);  The callback should return 'ret', state is for
-  // compatibility with the SSL info_callback.
-  int (*info_callback)(const BIO *bio, int state, int ret);
-} BIO_CONNECT;
-}  // namespace
-
-#if !defined(OPENSSL_WINDOWS)
-static int closesocket(int sock) { return close(sock); }
-#endif
-
-// split_host_and_port sets |*out_host| and |*out_port| to the host and port
-// parsed from |name|. It returns one on success or zero on error. Even when
-// successful, |*out_port| may be NULL on return if no port was specified.
-static int split_host_and_port(char **out_host, char **out_port,
-                               const char *name) {
-  const char *host, *port = NULL;
-  size_t host_len = 0;
-
-  *out_host = NULL;
-  *out_port = NULL;
-
-  if (name[0] == '[') {  // bracketed IPv6 address
-    const char *close = strchr(name, ']');
-    if (close == NULL) {
-      return 0;
-    }
-    host = name + 1;
-    host_len = close - host;
-    if (close[1] == ':') {  // [IP]:port
-      port = close + 2;
-    } else if (close[1] != 0) {
-      return 0;
-    }
-  } else {
-    const char *colon = strchr(name, ':');
-    if (colon == NULL || strchr(colon + 1, ':') != NULL) {  // IPv6 address
-      host = name;
-      host_len = strlen(name);
-    } else {  // host:port
-      host = name;
-      host_len = colon - name;
-      port = colon + 1;
-    }
-  }
-
-  *out_host = OPENSSL_strndup(host, host_len);
-  if (*out_host == NULL) {
-    return 0;
-  }
-  if (port == NULL) {
-    *out_port = NULL;
-    return 1;
-  }
-  *out_port = OPENSSL_strdup(port);
-  if (*out_port == NULL) {
-    OPENSSL_free(*out_host);
-    *out_host = NULL;
-    return 0;
-  }
-  return 1;
-}
-
-static int conn_state(BIO *bio, BIO_CONNECT *c) {
-  int ret = -1, i;
-  int (*cb)(const BIO *, int, int) = NULL;
-
-  if (c->info_callback != NULL) {
-    cb = c->info_callback;
-  }
-
-  for (;;) {
-    switch (c->state) {
-      case BIO_CONN_S_BEFORE:
-        // If there's a hostname and a port, assume that both are
-        // exactly what they say. If there is only a hostname, try
-        // (just once) to split it into a hostname and port.
-
-        if (c->param_hostname == NULL) {
-          OPENSSL_PUT_ERROR(BIO, BIO_R_NO_HOSTNAME_SPECIFIED);
-          goto exit_loop;
-        }
-
-        if (c->param_port == NULL) {
-          char *host, *port;
-          if (!split_host_and_port(&host, &port, c->param_hostname) ||
-              port == NULL) {
-            OPENSSL_free(host);
-            OPENSSL_free(port);
-            OPENSSL_PUT_ERROR(BIO, BIO_R_NO_PORT_SPECIFIED);
-            ERR_add_error_data(2, "host=", c->param_hostname);
-            goto exit_loop;
-          }
-
-          OPENSSL_free(c->param_port);
-          c->param_port = port;
-          OPENSSL_free(c->param_hostname);
-          c->param_hostname = host;
-        }
-
-        if (!bio_ip_and_port_to_socket_and_addr(
-                &bio->num, &c->them, &c->them_length, c->param_hostname,
-                c->param_port)) {
-          OPENSSL_PUT_ERROR(BIO, BIO_R_UNABLE_TO_CREATE_SOCKET);
-          ERR_add_error_data(4, "host=", c->param_hostname, ":", c->param_port);
-          goto exit_loop;
-        }
-
-        if (c->nbio) {
-          if (!bio_socket_nbio(bio->num, 1)) {
-            OPENSSL_PUT_ERROR(BIO, BIO_R_ERROR_SETTING_NBIO);
-            ERR_add_error_data(4, "host=", c->param_hostname, ":",
-                               c->param_port);
-            goto exit_loop;
-          }
-        }
-
-        i = 1;
-        ret = setsockopt(bio->num, SOL_SOCKET, SO_KEEPALIVE, (char *)&i,
-                         sizeof(i));
-        if (ret < 0) {
-          OPENSSL_PUT_SYSTEM_ERROR();
-          OPENSSL_PUT_ERROR(BIO, BIO_R_KEEPALIVE);
-          ERR_add_error_data(4, "host=", c->param_hostname, ":", c->param_port);
-          goto exit_loop;
-        }
-
-        BIO_clear_retry_flags(bio);
-        ret = connect(bio->num, (struct sockaddr *)&c->them, c->them_length);
-        if (ret < 0) {
-          if (bio_socket_should_retry(ret)) {
-            BIO_set_flags(bio, (BIO_FLAGS_IO_SPECIAL | BIO_FLAGS_SHOULD_RETRY));
-            c->state = BIO_CONN_S_BLOCKED_CONNECT;
-            bio->retry_reason = BIO_RR_CONNECT;
-          } else {
-            OPENSSL_PUT_SYSTEM_ERROR();
-            OPENSSL_PUT_ERROR(BIO, BIO_R_CONNECT_ERROR);
-            ERR_add_error_data(4, "host=", c->param_hostname, ":",
-                               c->param_port);
-          }
-          goto exit_loop;
-        } else {
-          c->state = BIO_CONN_S_OK;
-        }
-        break;
-
-      case BIO_CONN_S_BLOCKED_CONNECT:
-        i = bio_sock_error(bio->num);
-        if (i) {
-          if (bio_socket_should_retry(ret)) {
-            BIO_set_flags(bio, (BIO_FLAGS_IO_SPECIAL | BIO_FLAGS_SHOULD_RETRY));
-            c->state = BIO_CONN_S_BLOCKED_CONNECT;
-            bio->retry_reason = BIO_RR_CONNECT;
-            ret = -1;
-          } else {
-            BIO_clear_retry_flags(bio);
-            OPENSSL_PUT_SYSTEM_ERROR();
-            OPENSSL_PUT_ERROR(BIO, BIO_R_NBIO_CONNECT_ERROR);
-            ERR_add_error_data(4, "host=", c->param_hostname, ":",
-                               c->param_port);
-            ret = 0;
-          }
-          goto exit_loop;
-        } else {
-          c->state = BIO_CONN_S_OK;
-        }
-        break;
-
-      case BIO_CONN_S_OK:
-        ret = 1;
-        goto exit_loop;
-      default:
-        assert(0);
-        goto exit_loop;
-    }
-
-    if (cb != NULL) {
-      ret = cb((BIO *)bio, c->state, ret);
-      if (ret == 0) {
-        goto end;
-      }
-    }
-  }
-
-exit_loop:
-  if (cb != NULL) {
-    ret = cb((BIO *)bio, c->state, ret);
-  }
-
-end:
-  return ret;
-}
-
-static BIO_CONNECT *BIO_CONNECT_new(void) {
-  BIO_CONNECT *ret =
-      reinterpret_cast<BIO_CONNECT *>(OPENSSL_zalloc(sizeof(BIO_CONNECT)));
-  if (ret == NULL) {
-    return NULL;
-  }
-  ret->state = BIO_CONN_S_BEFORE;
-  return ret;
-}
-
-static void BIO_CONNECT_free(BIO_CONNECT *c) {
-  if (c == nullptr) {
-    return;
-  }
-  OPENSSL_free(c->param_hostname);
-  OPENSSL_free(c->param_port);
-  OPENSSL_free(c);
-}
-
-static int conn_new(BIO *bio) {
-  bio->init = 0;
-  bio->num = -1;
-  bio->flags = 0;
-  bio->ptr = BIO_CONNECT_new();
-  return bio->ptr != NULL;
-}
-
-static void conn_close_socket(BIO *bio) {
-  BIO_CONNECT *c = (BIO_CONNECT *)bio->ptr;
-
-  if (bio->num == -1) {
-    return;
-  }
-
-  // Only do a shutdown if things were established
-  if (c->state == BIO_CONN_S_OK) {
-    shutdown(bio->num, 2);
-  }
-  closesocket(bio->num);
-  bio->num = -1;
-}
-
-static int conn_free(BIO *bio) {
-  if (bio->shutdown) {
-    conn_close_socket(bio);
-  }
-
-  BIO_CONNECT_free((BIO_CONNECT *)bio->ptr);
-
-  return 1;
-}
-
-static int conn_read(BIO *bio, char *out, int out_len) {
-  int ret = 0;
-  BIO_CONNECT *data;
-
-  data = (BIO_CONNECT *)bio->ptr;
-  if (data->state != BIO_CONN_S_OK) {
-    ret = conn_state(bio, data);
-    if (ret <= 0) {
-      return ret;
-    }
-  }
-
-  bio_clear_socket_error();
-  ret = (int)recv(bio->num, out, out_len, 0);
-  BIO_clear_retry_flags(bio);
-  if (ret <= 0) {
-    if (bio_socket_should_retry(ret)) {
-      BIO_set_retry_read(bio);
-    }
-  }
-
-  return ret;
-}
-
-static int conn_write(BIO *bio, const char *in, int in_len) {
-  int ret;
-  BIO_CONNECT *data;
-
-  data = (BIO_CONNECT *)bio->ptr;
-  if (data->state != BIO_CONN_S_OK) {
-    ret = conn_state(bio, data);
-    if (ret <= 0) {
-      return ret;
-    }
-  }
-
-  bio_clear_socket_error();
-  ret = (int)send(bio->num, in, in_len, 0);
-  BIO_clear_retry_flags(bio);
-  if (ret <= 0) {
-    if (bio_socket_should_retry(ret)) {
-      BIO_set_retry_write(bio);
-    }
-  }
-
-  return ret;
-}
-
-static long conn_ctrl(BIO *bio, int cmd, long num, void *ptr) {
-  int *ip;
-  long ret = 1;
-  BIO_CONNECT *data;
-
-  data = (BIO_CONNECT *)bio->ptr;
-
-  switch (cmd) {
-    case BIO_CTRL_RESET:
-      ret = 0;
-      data->state = BIO_CONN_S_BEFORE;
-      conn_close_socket(bio);
-      bio->flags = 0;
-      break;
-    case BIO_C_DO_STATE_MACHINE:
-      // use this one to start the connection
-      if (data->state != BIO_CONN_S_OK) {
-        ret = (long)conn_state(bio, data);
-      } else {
-        ret = 1;
-      }
-      break;
-    case BIO_C_SET_CONNECT:
-      if (ptr != NULL) {
-        bio->init = 1;
-        if (num == 0) {
-          OPENSSL_free(data->param_hostname);
-          data->param_hostname =
-              OPENSSL_strdup(reinterpret_cast<const char *>(ptr));
-          if (data->param_hostname == NULL) {
-            ret = 0;
-          }
-        } else if (num == 1) {
-          OPENSSL_free(data->param_port);
-          data->param_port =
-              OPENSSL_strdup(reinterpret_cast<const char *>(ptr));
-          if (data->param_port == NULL) {
-            ret = 0;
-          }
-        } else {
-          ret = 0;
-        }
-      }
-      break;
-    case BIO_C_SET_NBIO:
-      data->nbio = (int)num;
-      break;
-    case BIO_C_GET_FD:
-      if (bio->init) {
-        ip = (int *)ptr;
-        if (ip != NULL) {
-          *ip = bio->num;
-        }
-        ret = bio->num;
-      } else {
-        ret = -1;
-      }
-      break;
-    case BIO_CTRL_GET_CLOSE:
-      ret = bio->shutdown;
-      break;
-    case BIO_CTRL_SET_CLOSE:
-      bio->shutdown = (int)num;
-      break;
-    case BIO_CTRL_PENDING:
-    case BIO_CTRL_WPENDING:
-      ret = 0;
-      break;
-    case BIO_CTRL_FLUSH:
-      break;
-    case BIO_CTRL_GET_CALLBACK: {
-      int (**fptr)(const BIO *bio, int state, int xret);
-      fptr = reinterpret_cast<decltype(fptr)>(ptr);
-      *fptr = data->info_callback;
-    } break;
-    default:
-      ret = 0;
-      break;
-  }
-  return ret;
-}
-
-static long conn_callback_ctrl(BIO *bio, int cmd, bio_info_cb fp) {
-  long ret = 1;
-  BIO_CONNECT *data;
-
-  data = (BIO_CONNECT *)bio->ptr;
-
-  switch (cmd) {
-    case BIO_CTRL_SET_CALLBACK:
-      // This is the actual type signature of |fp|. The caller is expected to
-      // cast it to |bio_info_cb| due to the |BIO_callback_ctrl| calling
-      // convention.
-      OPENSSL_MSVC_PRAGMA(warning(push))
-      OPENSSL_MSVC_PRAGMA(warning(disable : 4191))
-      OPENSSL_CLANG_PRAGMA("clang diagnostic push")
-      OPENSSL_CLANG_PRAGMA(
-          "clang diagnostic ignored \"-Wunknown-warning-option\"")
-      OPENSSL_CLANG_PRAGMA("clang diagnostic ignored \"-Wcast-function-type\"")
-      data->info_callback = (int (*)(const struct bio_st *, int, int))fp;
-      OPENSSL_CLANG_PRAGMA("clang diagnostic pop")
-      OPENSSL_MSVC_PRAGMA(warning(pop))
-      break;
-    default:
-      ret = 0;
-      break;
-  }
-  return ret;
-}
-
-BIO *BIO_new_connect(const char *hostname) {
-  BIO *ret;
-
-  ret = BIO_new(BIO_s_connect());
-  if (ret == NULL) {
-    return NULL;
-  }
-  if (!BIO_set_conn_hostname(ret, hostname)) {
-    BIO_free(ret);
-    return NULL;
-  }
-  return ret;
-}
-
-static const BIO_METHOD methods_connectp = {
-    BIO_TYPE_CONNECT, "socket connect",   conn_write, conn_read,
-    NULL /* puts */,  NULL /* gets */,    conn_ctrl,  conn_new,
-    conn_free,        conn_callback_ctrl,
-};
-
-const BIO_METHOD *BIO_s_connect(void) { return &methods_connectp; }
-
-int BIO_set_conn_hostname(BIO *bio, const char *name) {
-  return (int)BIO_ctrl(bio, BIO_C_SET_CONNECT, 0, (void *)name);
-}
-
-int BIO_set_conn_port(BIO *bio, const char *port_str) {
-  return (int)BIO_ctrl(bio, BIO_C_SET_CONNECT, 1, (void *)port_str);
-}
-
-int BIO_set_conn_int_port(BIO *bio, const int *port) {
-  char buf[DECIMAL_SIZE(int) + 1];
-  snprintf(buf, sizeof(buf), "%d", *port);
-  return BIO_set_conn_port(bio, buf);
-}
-
-int BIO_set_nbio(BIO *bio, int on) {
-  return (int)BIO_ctrl(bio, BIO_C_SET_NBIO, on, NULL);
-}
-
-int BIO_do_connect(BIO *bio) {
-  return (int)BIO_ctrl(bio, BIO_C_DO_STATE_MACHINE, 0, NULL);
-}
-
-#endif  // OPENSSL_NO_SOCK
diff --git a/src/crypto/bio/errno.cc b/src/crypto/bio/errno.cc
deleted file mode 100644
index 6c0df07..0000000
--- a/src/crypto/bio/errno.cc
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
-//
-// 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
-//
-//     https://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 <openssl/bio.h>
-
-#include <errno.h>
-
-#include "internal.h"
-
-
-int bio_errno_should_retry(int return_value) {
-  if (return_value != -1) {
-    return 0;
-  }
-
-  return
-#ifdef EWOULDBLOCK
-      errno == EWOULDBLOCK ||
-#endif
-#ifdef ENOTCONN
-      errno == ENOTCONN ||
-#endif
-#ifdef EINTR
-      errno == EINTR ||
-#endif
-#ifdef EAGAIN
-      errno == EAGAIN ||
-#endif
-#ifdef EPROTO
-      errno == EPROTO ||
-#endif
-#ifdef EINPROGRESS
-      errno == EINPROGRESS ||
-#endif
-#ifdef EALREADY
-      errno == EALREADY ||
-#endif
-      0;
-}
diff --git a/src/crypto/bio/fd.cc b/src/crypto/bio/fd.cc
deleted file mode 100644
index 45819d7..0000000
--- a/src/crypto/bio/fd.cc
+++ /dev/null
@@ -1,193 +0,0 @@
-// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
-//
-// 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
-//
-//     https://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 <openssl/bio.h>
-
-#if !defined(OPENSSL_NO_POSIX_IO)
-
-#include <errno.h>
-#include <string.h>
-
-#if !defined(OPENSSL_WINDOWS)
-#include <unistd.h>
-#else
-#include <io.h>
-#endif
-
-#include <openssl/err.h>
-#include <openssl/mem.h>
-
-#include "internal.h"
-#include "../internal.h"
-
-
-#if defined(OPENSSL_WINDOWS)
-  #define BORINGSSL_CLOSE _close
-  #define BORINGSSL_LSEEK _lseek
-  #define BORINGSSL_READ _read
-  #define BORINGSSL_WRITE _write
-#else
-  #define BORINGSSL_CLOSE close
-  #define BORINGSSL_LSEEK lseek
-  #define BORINGSSL_READ read
-  #define BORINGSSL_WRITE write
-#endif
-
-BIO *BIO_new_fd(int fd, int close_flag) {
-  BIO *ret = BIO_new(BIO_s_fd());
-  if (ret == NULL) {
-    return NULL;
-  }
-  BIO_set_fd(ret, fd, close_flag);
-  return ret;
-}
-
-static int fd_new(BIO *bio) {
-  // num is used to store the file descriptor.
-  bio->num = -1;
-  return 1;
-}
-
-static int fd_free(BIO *bio) {
-  if (bio->shutdown) {
-    if (bio->init) {
-      BORINGSSL_CLOSE(bio->num);
-    }
-    bio->init = 0;
-  }
-  return 1;
-}
-
-static int fd_read(BIO *b, char *out, int outl) {
-  int ret = 0;
-
-  ret = (int)BORINGSSL_READ(b->num, out, outl);
-  BIO_clear_retry_flags(b);
-  if (ret <= 0) {
-    if (bio_errno_should_retry(ret)) {
-      BIO_set_retry_read(b);
-    }
-  }
-
-  return ret;
-}
-
-static int fd_write(BIO *b, const char *in, int inl) {
-  int ret = (int)BORINGSSL_WRITE(b->num, in, inl);
-  BIO_clear_retry_flags(b);
-  if (ret <= 0) {
-    if (bio_errno_should_retry(ret)) {
-      BIO_set_retry_write(b);
-    }
-  }
-
-  return ret;
-}
-
-static long fd_ctrl(BIO *b, int cmd, long num, void *ptr) {
-  long ret = 1;
-  int *ip;
-
-  switch (cmd) {
-    case BIO_CTRL_RESET:
-      num = 0;
-      [[fallthrough]];
-    case BIO_C_FILE_SEEK:
-      ret = 0;
-      if (b->init) {
-        ret = (long)BORINGSSL_LSEEK(b->num, num, SEEK_SET);
-      }
-      break;
-    case BIO_C_FILE_TELL:
-    case BIO_CTRL_INFO:
-      ret = 0;
-      if (b->init) {
-        ret = (long)BORINGSSL_LSEEK(b->num, 0, SEEK_CUR);
-      }
-      break;
-    case BIO_C_SET_FD:
-      fd_free(b);
-      b->num = *((int *)ptr);
-      b->shutdown = (int)num;
-      b->init = 1;
-      break;
-    case BIO_C_GET_FD:
-      if (b->init) {
-        ip = (int *)ptr;
-        if (ip != NULL) {
-          *ip = b->num;
-        }
-        return b->num;
-      } else {
-        ret = -1;
-      }
-      break;
-    case BIO_CTRL_GET_CLOSE:
-      ret = b->shutdown;
-      break;
-    case BIO_CTRL_SET_CLOSE:
-      b->shutdown = (int)num;
-      break;
-    case BIO_CTRL_PENDING:
-    case BIO_CTRL_WPENDING:
-      ret = 0;
-      break;
-    case BIO_CTRL_FLUSH:
-      ret = 1;
-      break;
-    default:
-      ret = 0;
-      break;
-  }
-
-  return ret;
-}
-
-static int fd_gets(BIO *bp, char *buf, int size) {
-  if (size <= 0) {
-    return 0;
-  }
-
-  char *ptr = buf;
-  char *end = buf + size - 1;
-  while (ptr < end && fd_read(bp, ptr, 1) > 0) {
-    char c = ptr[0];
-    ptr++;
-    if (c == '\n') {
-      break;
-    }
-  }
-
-  ptr[0] = '\0';
-
-  // The output length is bounded by |size|.
-  return (int)(ptr - buf);
-}
-
-static const BIO_METHOD methods_fdp = {
-    BIO_TYPE_FD, "file descriptor", fd_write, fd_read, NULL /* puts */,
-    fd_gets,     fd_ctrl,           fd_new,   fd_free, NULL /* callback_ctrl */,
-};
-
-const BIO_METHOD *BIO_s_fd(void) { return &methods_fdp; }
-
-#endif  // OPENSSL_NO_POSIX_IO
-
-int BIO_set_fd(BIO *bio, int fd, int close_flag) {
-  return (int)BIO_int_ctrl(bio, BIO_C_SET_FD, close_flag, fd);
-}
-
-int BIO_get_fd(BIO *bio, int *out_fd) {
-  return (int)BIO_ctrl(bio, BIO_C_GET_FD, 0, (char *) out_fd);
-}
diff --git a/src/crypto/bio/file.cc b/src/crypto/bio/file.cc
deleted file mode 100644
index 40ca725..0000000
--- a/src/crypto/bio/file.cc
+++ /dev/null
@@ -1,292 +0,0 @@
-// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
-//
-// 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
-//
-//     https://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(__sun) || defined(__hpux)
-// Following definition aliases fopen to fopen64 on above mentioned
-// platforms. This makes it possible to open and sequentially access
-// files larger than 2GB from 32-bit application. It does not allow to
-// traverse them beyond 2GB with fseek/ftell, but on the other hand *no*
-// 32-bit platform permits that, not with fseek/ftell. Not to mention
-// that breaking 2GB limit for seeking would require surgery to *our*
-// API. But sequential access suffices for practical cases when you
-// can run into large files, such as fingerprinting, so we can let API
-// alone. For reference, the list of 32-bit platforms which allow for
-// sequential access of large files without extra "magic" comprise *BSD,
-// Darwin, IRIX...
-#ifndef _FILE_OFFSET_BITS
-#define _FILE_OFFSET_BITS 64
-#endif
-#endif
-
-#include <openssl/bio.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-#include <string.h>
-
-#include <openssl/err.h>
-#include <openssl/mem.h>
-
-#include "../internal.h"
-
-#if defined(OPENSSL_WINDOWS)
-#include <fcntl.h>
-#include <io.h>
-#endif
-
-#define BIO_FP_READ 0x02
-#define BIO_FP_WRITE 0x04
-#define BIO_FP_APPEND 0x08
-
-#if !defined(OPENSSL_NO_FILESYSTEM)
-#define fopen_if_available fopen
-#else
-static FILE *fopen_if_available(const char *path, const char *mode) {
-  errno = ENOENT;
-  return NULL;
-}
-#endif
-
-BIO *BIO_new_file(const char *filename, const char *mode) {
-  BIO *ret;
-  FILE *file;
-
-  file = fopen_if_available(filename, mode);
-  if (file == NULL) {
-    OPENSSL_PUT_SYSTEM_ERROR();
-
-    ERR_add_error_data(5, "fopen('", filename, "','", mode, "')");
-    if (errno == ENOENT) {
-      OPENSSL_PUT_ERROR(BIO, BIO_R_NO_SUCH_FILE);
-    } else {
-      OPENSSL_PUT_ERROR(BIO, BIO_R_SYS_LIB);
-    }
-    return NULL;
-  }
-
-  ret = BIO_new_fp(file, BIO_CLOSE);
-  if (ret == NULL) {
-    fclose(file);
-    return NULL;
-  }
-
-  return ret;
-}
-
-BIO *BIO_new_fp(FILE *stream, int flags) {
-  BIO *ret = BIO_new(BIO_s_file());
-  if (ret == NULL) {
-    return NULL;
-  }
-
-  BIO_set_fp(ret, stream, flags);
-  return ret;
-}
-
-static int file_free(BIO *bio) {
-  if (!bio->shutdown) {
-    return 1;
-  }
-
-  if (bio->init && bio->ptr != NULL) {
-    fclose(reinterpret_cast<FILE *>(bio->ptr));
-    bio->ptr = NULL;
-  }
-  bio->init = 0;
-
-  return 1;
-}
-
-static int file_read(BIO *b, char *out, int outl) {
-  if (!b->init) {
-    return 0;
-  }
-
-  size_t ret = fread(out, 1, outl, (FILE *)b->ptr);
-  if (ret == 0 && ferror((FILE *)b->ptr)) {
-    OPENSSL_PUT_SYSTEM_ERROR();
-    OPENSSL_PUT_ERROR(BIO, ERR_R_SYS_LIB);
-    return -1;
-  }
-
-  // fread reads at most |outl| bytes, so |ret| fits in an int.
-  return (int)ret;
-}
-
-static int file_write(BIO *b, const char *in, int inl) {
-  if (!b->init) {
-    return 0;
-  }
-
-  int ret = (int)fwrite(in, inl, 1, (FILE *)b->ptr);
-  if (ret > 0) {
-    ret = inl;
-  }
-  return ret;
-}
-
-static long file_ctrl(BIO *b, int cmd, long num, void *ptr) {
-  long ret = 1;
-  FILE *fp = (FILE *)b->ptr;
-  FILE **fpp;
-
-  switch (cmd) {
-    case BIO_CTRL_RESET:
-      num = 0;
-      [[fallthrough]];
-    case BIO_C_FILE_SEEK:
-      ret = (long)fseek(fp, num, 0);
-      break;
-    case BIO_CTRL_EOF:
-      ret = (long)feof(fp);
-      break;
-    case BIO_C_FILE_TELL:
-    case BIO_CTRL_INFO:
-      ret = ftell(fp);
-      break;
-    case BIO_C_SET_FILE_PTR:
-      file_free(b);
-      static_assert((BIO_CLOSE & BIO_FP_TEXT) == 0,
-                    "BIO_CLOSE and BIO_FP_TEXT must not collide");
-#if defined(OPENSSL_WINDOWS)
-      // If |BIO_FP_TEXT| is not set, OpenSSL will switch the file to binary
-      // mode. BoringSSL intentionally diverges here because it means code
-      // tested under POSIX will inadvertently change the state of |FILE|
-      // objects when wrapping them in a |BIO|.
-      if (num & BIO_FP_TEXT) {
-        _setmode(_fileno(reinterpret_cast<FILE *>(ptr)), _O_TEXT);
-      }
-#endif
-      b->shutdown = (int)num & BIO_CLOSE;
-      b->ptr = ptr;
-      b->init = 1;
-      break;
-    case BIO_C_SET_FILENAME:
-      file_free(b);
-      b->shutdown = (int)num & BIO_CLOSE;
-      const char *mode;
-      if (num & BIO_FP_APPEND) {
-        if (num & BIO_FP_READ) {
-          mode = "ab+";
-        } else {
-          mode = "ab";
-        }
-      } else if ((num & BIO_FP_READ) && (num & BIO_FP_WRITE)) {
-        mode = "rb+";
-      } else if (num & BIO_FP_WRITE) {
-        mode = "wb";
-      } else if (num & BIO_FP_READ) {
-        mode = "rb";
-      } else {
-        OPENSSL_PUT_ERROR(BIO, BIO_R_BAD_FOPEN_MODE);
-        ret = 0;
-        break;
-      }
-      fp = fopen_if_available(reinterpret_cast<const char *>(ptr), mode);
-      if (fp == NULL) {
-        OPENSSL_PUT_SYSTEM_ERROR();
-        ERR_add_error_data(5, "fopen('", ptr, "','", mode, "')");
-        OPENSSL_PUT_ERROR(BIO, ERR_R_SYS_LIB);
-        ret = 0;
-        break;
-      }
-      b->ptr = fp;
-      b->init = 1;
-      break;
-    case BIO_C_GET_FILE_PTR:
-      // the ptr parameter is actually a FILE ** in this case.
-      if (ptr != NULL) {
-        fpp = (FILE **)ptr;
-        *fpp = (FILE *)b->ptr;
-      }
-      break;
-    case BIO_CTRL_GET_CLOSE:
-      ret = (long)b->shutdown;
-      break;
-    case BIO_CTRL_SET_CLOSE:
-      b->shutdown = (int)num;
-      break;
-    case BIO_CTRL_FLUSH:
-      ret = 0 == fflush((FILE *)b->ptr);
-      break;
-    case BIO_CTRL_WPENDING:
-    case BIO_CTRL_PENDING:
-    default:
-      ret = 0;
-      break;
-  }
-  return ret;
-}
-
-static int file_gets(BIO *bp, char *buf, int size) {
-  if (size == 0) {
-    return 0;
-  }
-
-  if (!fgets(buf, size, (FILE *)bp->ptr)) {
-    buf[0] = 0;
-    // TODO(davidben): This doesn't distinguish error and EOF. This should check
-    // |ferror| as in |file_read|.
-    return 0;
-  }
-
-  return (int)strlen(buf);
-}
-
-static const BIO_METHOD methods_filep = {
-    BIO_TYPE_FILE,   "FILE pointer",
-    file_write,      file_read,
-    NULL /* puts */, file_gets,
-    file_ctrl,       NULL /* create */,
-    file_free,       NULL /* callback_ctrl */,
-};
-
-const BIO_METHOD *BIO_s_file(void) { return &methods_filep; }
-
-
-int BIO_get_fp(BIO *bio, FILE **out_file) {
-  return (int)BIO_ctrl(bio, BIO_C_GET_FILE_PTR, 0, (char *)out_file);
-}
-
-int BIO_set_fp(BIO *bio, FILE *file, int flags) {
-  return (int)BIO_ctrl(bio, BIO_C_SET_FILE_PTR, flags, (char *)file);
-}
-
-int BIO_read_filename(BIO *bio, const char *filename) {
-  return (int)BIO_ctrl(bio, BIO_C_SET_FILENAME, BIO_CLOSE | BIO_FP_READ,
-                       (char *)filename);
-}
-
-int BIO_write_filename(BIO *bio, const char *filename) {
-  return (int)BIO_ctrl(bio, BIO_C_SET_FILENAME, BIO_CLOSE | BIO_FP_WRITE,
-                       (char *)filename);
-}
-
-int BIO_append_filename(BIO *bio, const char *filename) {
-  return (int)BIO_ctrl(bio, BIO_C_SET_FILENAME, BIO_CLOSE | BIO_FP_APPEND,
-                       (char *)filename);
-}
-
-int BIO_rw_filename(BIO *bio, const char *filename) {
-  return (int)BIO_ctrl(bio, BIO_C_SET_FILENAME,
-                       BIO_CLOSE | BIO_FP_READ | BIO_FP_WRITE,
-                       (char *)filename);
-}
-
-long BIO_tell(BIO *bio) { return BIO_ctrl(bio, BIO_C_FILE_TELL, 0, NULL); }
-
-long BIO_seek(BIO *bio, long offset) {
-  return BIO_ctrl(bio, BIO_C_FILE_SEEK, offset, NULL);
-}
diff --git a/src/crypto/bio/hexdump.cc b/src/crypto/bio/hexdump.cc
deleted file mode 100644
index d7a9bef..0000000
--- a/src/crypto/bio/hexdump.cc
+++ /dev/null
@@ -1,152 +0,0 @@
-// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
-//
-// 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
-//
-//     https://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 <openssl/bio.h>
-
-#include <limits.h>
-#include <string.h>
-
-#include "../internal.h"
-
-
-namespace {
-// hexdump_ctx contains the state of a hexdump.
-struct hexdump_ctx {
-  BIO *bio;
-  char right_chars[18];  // the contents of the right-hand side, ASCII dump.
-  unsigned used;         // number of bytes in the current line.
-  size_t n;              // number of bytes total.
-  unsigned indent;
-};
-}  // namespace
-
-static void hexbyte(char *out, uint8_t b) {
-  static const char hextable[] = "0123456789abcdef";
-  out[0] = hextable[b >> 4];
-  out[1] = hextable[b & 0x0f];
-}
-
-static char to_char(uint8_t b) {
-  if (b < 32 || b > 126) {
-    return '.';
-  }
-  return b;
-}
-
-// hexdump_write adds |len| bytes of |data| to the current hex dump described by
-// |ctx|.
-static int hexdump_write(struct hexdump_ctx *ctx, const uint8_t *data,
-                         size_t len) {
-  char buf[10];
-  unsigned l;
-
-  // Output lines look like:
-  // 00000010  2e 2f 30 31 32 33 34 35  36 37 38 ... 3c 3d // |./0123456789:;<=|
-  // ^ offset                          ^ extra space           ^ ASCII of line
-
-  for (size_t i = 0; i < len; i++) {
-    if (ctx->used == 0) {
-      // The beginning of a line.
-      BIO_indent(ctx->bio, ctx->indent, UINT_MAX);
-
-      hexbyte(&buf[0], ctx->n >> 24);
-      hexbyte(&buf[2], ctx->n >> 16);
-      hexbyte(&buf[4], ctx->n >> 8);
-      hexbyte(&buf[6], ctx->n);
-      buf[8] = buf[9] = ' ';
-      if (BIO_write(ctx->bio, buf, 10) < 0) {
-        return 0;
-      }
-    }
-
-    hexbyte(buf, data[i]);
-    buf[2] = ' ';
-    l = 3;
-    if (ctx->used == 7) {
-      // There's an additional space after the 8th byte.
-      buf[3] = ' ';
-      l = 4;
-    } else if (ctx->used == 15) {
-      // At the end of the line there's an extra space and the bar for the
-      // right column.
-      buf[3] = ' ';
-      buf[4] = '|';
-      l = 5;
-    }
-
-    if (BIO_write(ctx->bio, buf, l) < 0) {
-      return 0;
-    }
-    ctx->right_chars[ctx->used] = to_char(data[i]);
-    ctx->used++;
-    ctx->n++;
-    if (ctx->used == 16) {
-      ctx->right_chars[16] = '|';
-      ctx->right_chars[17] = '\n';
-      if (BIO_write(ctx->bio, ctx->right_chars, sizeof(ctx->right_chars)) < 0) {
-        return 0;
-      }
-      ctx->used = 0;
-    }
-  }
-
-  return 1;
-}
-
-// finish flushes any buffered data in |ctx|.
-static int finish(struct hexdump_ctx *ctx) {
-  // See the comments in |hexdump| for the details of this format.
-  const unsigned n_bytes = ctx->used;
-  unsigned l;
-  char buf[5];
-
-  if (n_bytes == 0) {
-    return 1;
-  }
-
-  OPENSSL_memset(buf, ' ', 4);
-  buf[4] = '|';
-
-  for (; ctx->used < 16; ctx->used++) {
-    l = 3;
-    if (ctx->used == 7) {
-      l = 4;
-    } else if (ctx->used == 15) {
-      l = 5;
-    }
-    if (BIO_write(ctx->bio, buf, l) < 0) {
-      return 0;
-    }
-  }
-
-  ctx->right_chars[n_bytes] = '|';
-  ctx->right_chars[n_bytes + 1] = '\n';
-  if (BIO_write(ctx->bio, ctx->right_chars, n_bytes + 2) < 0) {
-    return 0;
-  }
-  return 1;
-}
-
-int BIO_hexdump(BIO *bio, const uint8_t *data, size_t len, unsigned indent) {
-  struct hexdump_ctx ctx;
-  OPENSSL_memset(&ctx, 0, sizeof(ctx));
-  ctx.bio = bio;
-  ctx.indent = indent;
-
-  if (!hexdump_write(&ctx, data, len) || !finish(&ctx)) {
-    return 0;
-  }
-
-  return 1;
-}
diff --git a/src/crypto/bio/internal.h b/src/crypto/bio/internal.h
deleted file mode 100644
index d06be4d..0000000
--- a/src/crypto/bio/internal.h
+++ /dev/null
@@ -1,77 +0,0 @@
-// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
-//
-// 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
-//
-//     https://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 OPENSSL_HEADER_CRYPTO_BIO_INTERNAL_H
-#define OPENSSL_HEADER_CRYPTO_BIO_INTERNAL_H
-
-#include <openssl/base.h>
-
-#if !defined(OPENSSL_NO_SOCK)
-#if !defined(OPENSSL_WINDOWS)
-#if defined(OPENSSL_PNACL)
-// newlib uses u_short in socket.h without defining it.
-typedef unsigned short u_short;
-#endif
-#include <sys/types.h>
-#include <sys/socket.h>
-#else
-#include <winsock2.h>
-typedef int socklen_t;
-#endif
-#endif  // !OPENSSL_NO_SOCK
-
-#if defined(__cplusplus)
-extern "C" {
-#endif
-
-
-#if !defined(OPENSSL_NO_SOCK)
-
-// bio_ip_and_port_to_socket_and_addr creates a socket and fills in |*out_addr|
-// and |*out_addr_length| with the correct values for connecting to |hostname|
-// on |port_str|. It returns one on success or zero on error.
-int bio_ip_and_port_to_socket_and_addr(int *out_sock,
-                                       struct sockaddr_storage *out_addr,
-                                       socklen_t *out_addr_length,
-                                       const char *hostname,
-                                       const char *port_str);
-
-// bio_socket_nbio sets whether |sock| is non-blocking. It returns one on
-// success and zero otherwise.
-int bio_socket_nbio(int sock, int on);
-
-// bio_clear_socket_error clears the last system socket error.
-//
-// TODO(fork): remove all callers of this.
-void bio_clear_socket_error(void);
-
-// bio_sock_error returns the last socket error on |sock|.
-int bio_sock_error(int sock);
-
-// bio_socket_should_retry returns non-zero if |return_value| indicates an error
-// and the last socket error indicates that it's non-fatal.
-int bio_socket_should_retry(int return_value);
-
-#endif  // !OPENSSL_NO_SOCK
-
-// bio_errno_should_retry returns non-zero if |return_value| indicates an error
-// and |errno| indicates that it's non-fatal.
-int bio_errno_should_retry(int return_value);
-
-
-#if defined(__cplusplus)
-}  // extern C
-#endif
-
-#endif  // OPENSSL_HEADER_CRYPTO_BIO_INTERNAL_H
diff --git a/src/crypto/bio/pair.cc b/src/crypto/bio/pair.cc
deleted file mode 100644
index d12ea9d..0000000
--- a/src/crypto/bio/pair.cc
+++ /dev/null
@@ -1,446 +0,0 @@
-// Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved.
-//
-// 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
-//
-//     https://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 <openssl/bio.h>
-
-#include <assert.h>
-#include <string.h>
-
-#include <openssl/err.h>
-#include <openssl/mem.h>
-
-#include "../internal.h"
-
-
-namespace {
-struct bio_bio_st {
-  BIO *peer;  // NULL if buf == NULL.
-              // If peer != NULL, then peer->ptr is also a bio_bio_st,
-              // and its "peer" member points back to us.
-              // peer != NULL iff init != 0 in the BIO.
-
-  // This is for what we write (i.e. reading uses peer's struct):
-  int closed;     // valid iff peer != NULL
-  size_t len;     // valid iff buf != NULL; 0 if peer == NULL
-  size_t offset;  // valid iff buf != NULL; 0 if len == 0
-  size_t size;
-  uint8_t *buf;  // "size" elements (if != NULL)
-
-  size_t request;  // valid iff peer != NULL; 0 if len != 0,
-                   // otherwise set by peer to number of bytes
-                   // it (unsuccessfully) tried to read,
-                   // never more than buffer space (size-len) warrants.
-};
-}  // namespace
-
-static int bio_new(BIO *bio) {
-  struct bio_bio_st *b =
-      reinterpret_cast<bio_bio_st *>(OPENSSL_zalloc(sizeof *b));
-  if (b == NULL) {
-    return 0;
-  }
-
-  b->size = 17 * 1024;  // enough for one TLS record (just a default)
-  bio->ptr = b;
-  return 1;
-}
-
-static void bio_destroy_pair(BIO *bio) {
-  struct bio_bio_st *b = reinterpret_cast<bio_bio_st *>(bio->ptr);
-  BIO *peer_bio;
-  struct bio_bio_st *peer_b;
-
-  if (b == NULL) {
-    return;
-  }
-
-  peer_bio = b->peer;
-  if (peer_bio == NULL) {
-    return;
-  }
-
-  peer_b = reinterpret_cast<bio_bio_st *>(peer_bio->ptr);
-
-  assert(peer_b != NULL);
-  assert(peer_b->peer == bio);
-
-  peer_b->peer = NULL;
-  peer_bio->init = 0;
-  assert(peer_b->buf != NULL);
-  peer_b->len = 0;
-  peer_b->offset = 0;
-
-  b->peer = NULL;
-  bio->init = 0;
-  assert(b->buf != NULL);
-  b->len = 0;
-  b->offset = 0;
-}
-
-static int bio_free(BIO *bio) {
-  struct bio_bio_st *b = reinterpret_cast<bio_bio_st *>(bio->ptr);
-
-  assert(b != NULL);
-
-  if (b->peer) {
-    bio_destroy_pair(bio);
-  }
-
-  OPENSSL_free(b->buf);
-  OPENSSL_free(b);
-
-  return 1;
-}
-
-static int bio_read(BIO *bio, char *buf, int size_) {
-  size_t size = size_;
-  size_t rest;
-  struct bio_bio_st *b, *peer_b;
-
-  BIO_clear_retry_flags(bio);
-
-  if (!bio->init) {
-    return 0;
-  }
-
-  b = reinterpret_cast<bio_bio_st *>(bio->ptr);
-  assert(b != NULL);
-  assert(b->peer != NULL);
-  peer_b = reinterpret_cast<bio_bio_st *>(b->peer->ptr);
-  assert(peer_b != NULL);
-  assert(peer_b->buf != NULL);
-
-  peer_b->request = 0;  // will be set in "retry_read" situation
-
-  if (buf == NULL || size == 0) {
-    return 0;
-  }
-
-  if (peer_b->len == 0) {
-    if (peer_b->closed) {
-      return 0;  // writer has closed, and no data is left
-    } else {
-      BIO_set_retry_read(bio);  // buffer is empty
-      if (size <= peer_b->size) {
-        peer_b->request = size;
-      } else {
-        // don't ask for more than the peer can
-        // deliver in one write
-        peer_b->request = peer_b->size;
-      }
-      return -1;
-    }
-  }
-
-  // we can read
-  if (peer_b->len < size) {
-    size = peer_b->len;
-  }
-
-  // now read "size" bytes
-  rest = size;
-
-  assert(rest > 0);
-  // one or two iterations
-  do {
-    size_t chunk;
-
-    assert(rest <= peer_b->len);
-    if (peer_b->offset + rest <= peer_b->size) {
-      chunk = rest;
-    } else {
-      // wrap around ring buffer
-      chunk = peer_b->size - peer_b->offset;
-    }
-    assert(peer_b->offset + chunk <= peer_b->size);
-
-    OPENSSL_memcpy(buf, peer_b->buf + peer_b->offset, chunk);
-
-    peer_b->len -= chunk;
-    if (peer_b->len) {
-      peer_b->offset += chunk;
-      assert(peer_b->offset <= peer_b->size);
-      if (peer_b->offset == peer_b->size) {
-        peer_b->offset = 0;
-      }
-      buf += chunk;
-    } else {
-      // buffer now empty, no need to advance "buf"
-      assert(chunk == rest);
-      peer_b->offset = 0;
-    }
-    rest -= chunk;
-  } while (rest);
-
-  // |size| is bounded by the buffer size, which fits in |int|.
-  return (int)size;
-}
-
-static int bio_write(BIO *bio, const char *buf, int num_) {
-  size_t num = num_;
-  size_t rest;
-  struct bio_bio_st *b;
-
-  BIO_clear_retry_flags(bio);
-
-  if (!bio->init || buf == NULL || num == 0) {
-    return 0;
-  }
-
-  b = reinterpret_cast<bio_bio_st *>(bio->ptr);
-  assert(b != NULL);
-  assert(b->peer != NULL);
-  assert(b->buf != NULL);
-
-  b->request = 0;
-  if (b->closed) {
-    // we already closed
-    OPENSSL_PUT_ERROR(BIO, BIO_R_BROKEN_PIPE);
-    return -1;
-  }
-
-  assert(b->len <= b->size);
-
-  if (b->len == b->size) {
-    BIO_set_retry_write(bio);  // buffer is full
-    return -1;
-  }
-
-  // we can write
-  if (num > b->size - b->len) {
-    num = b->size - b->len;
-  }
-
-  // now write "num" bytes
-  rest = num;
-
-  assert(rest > 0);
-  // one or two iterations
-  do {
-    size_t write_offset;
-    size_t chunk;
-
-    assert(b->len + rest <= b->size);
-
-    write_offset = b->offset + b->len;
-    if (write_offset >= b->size) {
-      write_offset -= b->size;
-    }
-    // b->buf[write_offset] is the first byte we can write to.
-
-    if (write_offset + rest <= b->size) {
-      chunk = rest;
-    } else {
-      // wrap around ring buffer
-      chunk = b->size - write_offset;
-    }
-
-    OPENSSL_memcpy(b->buf + write_offset, buf, chunk);
-
-    b->len += chunk;
-
-    assert(b->len <= b->size);
-
-    rest -= chunk;
-    buf += chunk;
-  } while (rest);
-
-  // |num| is bounded by the buffer size, which fits in |int|.
-  return (int)num;
-}
-
-static int bio_make_pair(BIO *bio1, BIO *bio2, size_t writebuf1_len,
-                         size_t writebuf2_len) {
-  struct bio_bio_st *b1, *b2;
-
-  assert(bio1 != NULL);
-  assert(bio2 != NULL);
-
-  b1 = reinterpret_cast<bio_bio_st *>(bio1->ptr);
-  b2 = reinterpret_cast<bio_bio_st *>(bio2->ptr);
-
-  if (b1->peer != NULL || b2->peer != NULL) {
-    OPENSSL_PUT_ERROR(BIO, BIO_R_IN_USE);
-    return 0;
-  }
-
-  if (b1->buf == NULL) {
-    if (writebuf1_len) {
-      b1->size = writebuf1_len;
-    }
-    b1->buf = reinterpret_cast<uint8_t *>(OPENSSL_malloc(b1->size));
-    if (b1->buf == NULL) {
-      return 0;
-    }
-    b1->len = 0;
-    b1->offset = 0;
-  }
-
-  if (b2->buf == NULL) {
-    if (writebuf2_len) {
-      b2->size = writebuf2_len;
-    }
-    b2->buf = reinterpret_cast<uint8_t *>(OPENSSL_malloc(b2->size));
-    if (b2->buf == NULL) {
-      return 0;
-    }
-    b2->len = 0;
-    b2->offset = 0;
-  }
-
-  b1->peer = bio2;
-  b1->closed = 0;
-  b1->request = 0;
-  b2->peer = bio1;
-  b2->closed = 0;
-  b2->request = 0;
-
-  bio1->init = 1;
-  bio2->init = 1;
-
-  return 1;
-}
-
-static long bio_ctrl(BIO *bio, int cmd, long num, void *ptr) {
-  long ret;
-  struct bio_bio_st *b = reinterpret_cast<bio_bio_st *>(bio->ptr);
-
-  assert(b != NULL);
-
-  switch (cmd) {
-    // Specific control codes first:
-    case BIO_C_GET_WRITE_BUF_SIZE:
-      ret = (long)b->size;
-      break;
-
-    case BIO_C_GET_WRITE_GUARANTEE:
-      // How many bytes can the caller feed to the next write
-      // without having to keep any?
-      if (b->peer == NULL || b->closed) {
-        ret = 0;
-      } else {
-        ret = (long)b->size - b->len;
-      }
-      break;
-
-    case BIO_C_GET_READ_REQUEST:
-      // If the peer unsuccessfully tried to read, how many bytes
-      // were requested?  (As with BIO_CTRL_PENDING, that number
-      // can usually be treated as boolean.)
-      ret = (long)b->request;
-      break;
-
-    case BIO_C_RESET_READ_REQUEST:
-      // Reset request.  (Can be useful after read attempts
-      // at the other side that are meant to be non-blocking,
-      // e.g. when probing SSL_read to see if any data is
-      // available.)
-      b->request = 0;
-      ret = 1;
-      break;
-
-    case BIO_C_SHUTDOWN_WR:
-      // similar to shutdown(..., SHUT_WR)
-      b->closed = 1;
-      ret = 1;
-      break;
-
-
-    // Standard control codes:
-    case BIO_CTRL_GET_CLOSE:
-      ret = bio->shutdown;
-      break;
-
-    case BIO_CTRL_SET_CLOSE:
-      bio->shutdown = (int)num;
-      ret = 1;
-      break;
-
-    case BIO_CTRL_PENDING:
-      if (b->peer != NULL) {
-        struct bio_bio_st *peer_b =
-            reinterpret_cast<bio_bio_st *>(b->peer->ptr);
-        ret = (long)peer_b->len;
-      } else {
-        ret = 0;
-      }
-      break;
-
-    case BIO_CTRL_WPENDING:
-      ret = 0;
-      if (b->buf != NULL) {
-        ret = (long)b->len;
-      }
-      break;
-
-    case BIO_CTRL_FLUSH:
-      ret = 1;
-      break;
-
-    case BIO_CTRL_EOF: {
-      BIO *other_bio = reinterpret_cast<BIO *>(ptr);
-
-      if (other_bio) {
-        struct bio_bio_st *other_b =
-            reinterpret_cast<bio_bio_st *>(other_bio->ptr);
-        assert(other_b != NULL);
-        ret = other_b->len == 0 && other_b->closed;
-      } else {
-        ret = 1;
-      }
-    } break;
-
-    default:
-      ret = 0;
-  }
-  return ret;
-}
-
-
-static const BIO_METHOD methods_biop = {
-    BIO_TYPE_BIO,    "BIO pair", bio_write, bio_read, NULL /* puts */,
-    NULL /* gets */, bio_ctrl,   bio_new,   bio_free, NULL /* callback_ctrl */,
-};
-
-static const BIO_METHOD *bio_s_bio(void) { return &methods_biop; }
-
-int BIO_new_bio_pair(BIO **bio1_p, size_t writebuf1_len, BIO **bio2_p,
-                     size_t writebuf2_len) {
-  BIO *bio1 = BIO_new(bio_s_bio());
-  BIO *bio2 = BIO_new(bio_s_bio());
-  if (bio1 == NULL || bio2 == NULL ||
-      !bio_make_pair(bio1, bio2, writebuf1_len, writebuf2_len)) {
-    BIO_free(bio1);
-    BIO_free(bio2);
-    *bio1_p = NULL;
-    *bio2_p = NULL;
-    return 0;
-  }
-
-  *bio1_p = bio1;
-  *bio2_p = bio2;
-  return 1;
-}
-
-size_t BIO_ctrl_get_read_request(BIO *bio) {
-  return BIO_ctrl(bio, BIO_C_GET_READ_REQUEST, 0, NULL);
-}
-
-size_t BIO_ctrl_get_write_guarantee(BIO *bio) {
-  return BIO_ctrl(bio, BIO_C_GET_WRITE_GUARANTEE, 0, NULL);
-}
-
-int BIO_shutdown_wr(BIO *bio) {
-  return (int)BIO_ctrl(bio, BIO_C_SHUTDOWN_WR, 0, NULL);
-}
diff --git a/src/crypto/bio/printf.cc b/src/crypto/bio/printf.cc
deleted file mode 100644
index ca74f95..0000000
--- a/src/crypto/bio/printf.cc
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
-//
-// 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
-//
-//     https://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 <openssl/bio.h>
-
-#include <assert.h>
-#include <stdarg.h>
-#include <stdio.h>
-
-#include <openssl/err.h>
-#include <openssl/mem.h>
-
-int BIO_printf(BIO *bio, const char *format, ...) {
-  va_list args;
-  char buf[256], *out, out_malloced = 0;
-  int out_len, ret;
-
-  va_start(args, format);
-  out_len = vsnprintf(buf, sizeof(buf), format, args);
-  va_end(args);
-  if (out_len < 0) {
-    return -1;
-  }
-
-  if ((size_t)out_len >= sizeof(buf)) {
-    const size_t requested_len = (size_t)out_len;
-    // The output was truncated. Note that vsnprintf's return value does not
-    // include a trailing NUL, but the buffer must be sized for it.
-    out = reinterpret_cast<char *>(OPENSSL_malloc(requested_len + 1));
-    out_malloced = 1;
-    if (out == NULL) {
-      return -1;
-    }
-    va_start(args, format);
-    out_len = vsnprintf(out, requested_len + 1, format, args);
-    va_end(args);
-    assert(out_len == (int)requested_len);
-  } else {
-    out = buf;
-  }
-
-  ret = BIO_write(bio, out, out_len);
-  if (out_malloced) {
-    OPENSSL_free(out);
-  }
-
-  return ret;
-}
diff --git a/src/crypto/bio/socket.cc b/src/crypto/bio/socket.cc
deleted file mode 100644
index 672c9b5..0000000
--- a/src/crypto/bio/socket.cc
+++ /dev/null
@@ -1,144 +0,0 @@
-// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
-//
-// 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
-//
-//     https://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 <openssl/bio.h>
-
-#if !defined(OPENSSL_NO_SOCK)
-
-#include <fcntl.h>
-#include <string.h>
-
-#if !defined(OPENSSL_WINDOWS)
-#include <unistd.h>
-#else
-#include <winsock2.h>
-OPENSSL_MSVC_PRAGMA(comment(lib, "Ws2_32.lib"))
-#endif
-
-#include "internal.h"
-
-
-#if !defined(OPENSSL_WINDOWS)
-static int closesocket(int sock) {
-  return close(sock);
-}
-#endif
-
-static int sock_free(BIO *bio) {
-  if (bio->shutdown) {
-    if (bio->init) {
-      closesocket(bio->num);
-    }
-    bio->init = 0;
-    bio->flags = 0;
-  }
-  return 1;
-}
-
-static int sock_read(BIO *b, char *out, int outl) {
-  if (out == NULL) {
-    return 0;
-  }
-
-  bio_clear_socket_error();
-#if defined(OPENSSL_WINDOWS)
-  int ret = recv(b->num, out, outl, 0);
-#else
-  int ret = (int)read(b->num, out, outl);
-#endif
-  BIO_clear_retry_flags(b);
-  if (ret <= 0) {
-    if (bio_socket_should_retry(ret)) {
-      BIO_set_retry_read(b);
-    }
-  }
-  return ret;
-}
-
-static int sock_write(BIO *b, const char *in, int inl) {
-  bio_clear_socket_error();
-#if defined(OPENSSL_WINDOWS)
-  int ret = send(b->num, in, inl, 0);
-#else
-  int ret = (int)write(b->num, in, inl);
-#endif
-  BIO_clear_retry_flags(b);
-  if (ret <= 0) {
-    if (bio_socket_should_retry(ret)) {
-      BIO_set_retry_write(b);
-    }
-  }
-  return ret;
-}
-
-static long sock_ctrl(BIO *b, int cmd, long num, void *ptr) {
-  long ret = 1;
-  int *ip;
-
-  switch (cmd) {
-    case BIO_C_SET_FD:
-      sock_free(b);
-      b->num = *((int *)ptr);
-      b->shutdown = (int)num;
-      b->init = 1;
-      break;
-    case BIO_C_GET_FD:
-      if (b->init) {
-        ip = (int *)ptr;
-        if (ip != NULL) {
-          *ip = b->num;
-        }
-        ret = b->num;
-      } else {
-        ret = -1;
-      }
-      break;
-    case BIO_CTRL_GET_CLOSE:
-      ret = b->shutdown;
-      break;
-    case BIO_CTRL_SET_CLOSE:
-      b->shutdown = (int)num;
-      break;
-    case BIO_CTRL_FLUSH:
-      ret = 1;
-      break;
-    default:
-      ret = 0;
-      break;
-  }
-  return ret;
-}
-
-static const BIO_METHOD methods_sockp = {
-    BIO_TYPE_SOCKET, "socket",
-    sock_write,      sock_read,
-    NULL /* puts */, NULL /* gets, */,
-    sock_ctrl,       NULL /* create */,
-    sock_free,       NULL /* callback_ctrl */,
-};
-
-const BIO_METHOD *BIO_s_socket(void) { return &methods_sockp; }
-
-BIO *BIO_new_socket(int fd, int close_flag) {
-  BIO *ret;
-
-  ret = BIO_new(BIO_s_socket());
-  if (ret == NULL) {
-    return NULL;
-  }
-  BIO_set_fd(ret, fd, close_flag);
-  return ret;
-}
-
-#endif  // OPENSSL_NO_SOCK
diff --git a/src/crypto/bio/socket_helper.cc b/src/crypto/bio/socket_helper.cc
deleted file mode 100644
index 7d1e2a3..0000000
--- a/src/crypto/bio/socket_helper.cc
+++ /dev/null
@@ -1,131 +0,0 @@
-// Copyright 2014 The BoringSSL Authors
-//
-// 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
-//
-//     https://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__)
-#undef _POSIX_C_SOURCE
-#define _POSIX_C_SOURCE 200112L
-#endif
-
-#include <openssl/bio.h>
-#include <openssl/err.h>
-
-#if !defined(OPENSSL_NO_SOCK)
-
-#include <fcntl.h>
-#include <string.h>
-#include <sys/types.h>
-
-#if !defined(OPENSSL_WINDOWS)
-#include <netdb.h>
-#include <unistd.h>
-#else
-#include <winsock2.h>
-#include <ws2tcpip.h>
-#endif
-
-#include "internal.h"
-#include "../internal.h"
-
-
-int bio_ip_and_port_to_socket_and_addr(int *out_sock,
-                                       struct sockaddr_storage *out_addr,
-                                       socklen_t *out_addr_length,
-                                       const char *hostname,
-                                       const char *port_str) {
-  struct addrinfo hint, *result, *cur;
-  int ret;
-
-  *out_sock = -1;
-
-  OPENSSL_memset(&hint, 0, sizeof(hint));
-  hint.ai_family = AF_UNSPEC;
-  hint.ai_socktype = SOCK_STREAM;
-
-  ret = getaddrinfo(hostname, port_str, &hint, &result);
-  if (ret != 0) {
-    OPENSSL_PUT_ERROR(SYS, 0);
-#if defined(OPENSSL_WINDOWS)
-    ERR_add_error_data(1, gai_strerrorA(ret));
-#else
-    ERR_add_error_data(1, gai_strerror(ret));
-#endif
-    return 0;
-  }
-
-  ret = 0;
-
-  for (cur = result; cur; cur = cur->ai_next) {
-    if ((size_t) cur->ai_addrlen > sizeof(struct sockaddr_storage)) {
-      continue;
-    }
-    OPENSSL_memset(out_addr, 0, sizeof(struct sockaddr_storage));
-    OPENSSL_memcpy(out_addr, cur->ai_addr, cur->ai_addrlen);
-    *out_addr_length = cur->ai_addrlen;
-
-    *out_sock = socket(cur->ai_family, cur->ai_socktype, cur->ai_protocol);
-    if (*out_sock < 0) {
-      OPENSSL_PUT_SYSTEM_ERROR();
-      goto out;
-    }
-
-    ret = 1;
-    break;
-  }
-
-out:
-  freeaddrinfo(result);
-  return ret;
-}
-
-int bio_socket_nbio(int sock, int on) {
-#if defined(OPENSSL_WINDOWS)
-  u_long arg = on;
-
-  return 0 == ioctlsocket(sock, FIONBIO, &arg);
-#else
-  int flags = fcntl(sock, F_GETFL, 0);
-  if (flags < 0) {
-    return 0;
-  }
-  if (!on) {
-    flags &= ~O_NONBLOCK;
-  } else {
-    flags |= O_NONBLOCK;
-  }
-  return fcntl(sock, F_SETFL, flags) == 0;
-#endif
-}
-
-void bio_clear_socket_error(void) {}
-
-int bio_sock_error(int sock) {
-  int error;
-  socklen_t error_size = sizeof(error);
-
-  if (getsockopt(sock, SOL_SOCKET, SO_ERROR, (char *)&error, &error_size) < 0) {
-    return 1;
-  }
-  return error;
-}
-
-int bio_socket_should_retry(int return_value) {
-#if defined(OPENSSL_WINDOWS)
-  return return_value == -1 && WSAGetLastError() == WSAEWOULDBLOCK;
-#else
-  // On POSIX platforms, sockets and fds are the same.
-  return bio_errno_should_retry(return_value);
-#endif
-}
-
-#endif  // OPENSSL_NO_SOCK
diff --git a/src/crypto/blake2/blake2.cc b/src/crypto/blake2/blake2.cc
deleted file mode 100644
index d514b36..0000000
--- a/src/crypto/blake2/blake2.cc
+++ /dev/null
@@ -1,169 +0,0 @@
-// Copyright 2021 The BoringSSL Authors
-//
-// 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
-//
-//     https://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 <openssl/blake2.h>
-
-#include <assert.h>
-
-#include "../internal.h"
-
-// https://tools.ietf.org/html/rfc7693#section-2.6
-static const uint64_t kIV[8] = {
-    UINT64_C(0x6a09e667f3bcc908), UINT64_C(0xbb67ae8584caa73b),
-    UINT64_C(0x3c6ef372fe94f82b), UINT64_C(0xa54ff53a5f1d36f1),
-    UINT64_C(0x510e527fade682d1), UINT64_C(0x9b05688c2b3e6c1f),
-    UINT64_C(0x1f83d9abfb41bd6b), UINT64_C(0x5be0cd19137e2179),
-};
-
-// https://tools.ietf.org/html/rfc7693#section-2.7
-static const uint8_t kSigma[10 * 16] = {
-    // clang-format off
-    0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
-    14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3,
-    11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4,
-    7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8,
-    9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13,
-    2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9,
-    12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11,
-    13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10,
-    6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5,
-    10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13, 0,
-    // clang-format on
-};
-
-// https://tools.ietf.org/html/rfc7693#section-3.1
-static void blake2b_mix(uint64_t v[16], int a, int b, int c, int d, uint64_t x,
-                        uint64_t y) {
-  v[a] = v[a] + v[b] + x;
-  v[d] = CRYPTO_rotr_u64(v[d] ^ v[a], 32);
-  v[c] = v[c] + v[d];
-  v[b] = CRYPTO_rotr_u64(v[b] ^ v[c], 24);
-  v[a] = v[a] + v[b] + y;
-  v[d] = CRYPTO_rotr_u64(v[d] ^ v[a], 16);
-  v[c] = v[c] + v[d];
-  v[b] = CRYPTO_rotr_u64(v[b] ^ v[c], 63);
-}
-
-static uint64_t blake2b_load(const uint8_t block[BLAKE2B_CBLOCK], size_t i) {
-  return CRYPTO_load_u64_le(block + 8 * i);
-}
-
-static void blake2b_transform(BLAKE2B_CTX *b2b,
-                              const uint8_t block[BLAKE2B_CBLOCK],
-                              size_t num_bytes, int is_final_block) {
-  // https://tools.ietf.org/html/rfc7693#section-3.2
-  uint64_t v[16];
-  static_assert(sizeof(v) == sizeof(b2b->h) + sizeof(kIV), "");
-  OPENSSL_memcpy(v, b2b->h, sizeof(b2b->h));
-  OPENSSL_memcpy(&v[8], kIV, sizeof(kIV));
-
-  b2b->t_low += num_bytes;
-  if (b2b->t_low < num_bytes) {
-    b2b->t_high++;
-  }
-  v[12] ^= b2b->t_low;
-  v[13] ^= b2b->t_high;
-
-  if (is_final_block) {
-    v[14] = ~v[14];
-  }
-
-  for (int round = 0; round < 12; round++) {
-    const uint8_t *const s = &kSigma[16 * (round % 10)];
-    blake2b_mix(v, 0, 4, 8, 12, blake2b_load(block, s[0]),
-                blake2b_load(block, s[1]));
-    blake2b_mix(v, 1, 5, 9, 13, blake2b_load(block, s[2]),
-                blake2b_load(block, s[3]));
-    blake2b_mix(v, 2, 6, 10, 14, blake2b_load(block, s[4]),
-                blake2b_load(block, s[5]));
-    blake2b_mix(v, 3, 7, 11, 15, blake2b_load(block, s[6]),
-                blake2b_load(block, s[7]));
-    blake2b_mix(v, 0, 5, 10, 15, blake2b_load(block, s[8]),
-                blake2b_load(block, s[9]));
-    blake2b_mix(v, 1, 6, 11, 12, blake2b_load(block, s[10]),
-                blake2b_load(block, s[11]));
-    blake2b_mix(v, 2, 7, 8, 13, blake2b_load(block, s[12]),
-                blake2b_load(block, s[13]));
-    blake2b_mix(v, 3, 4, 9, 14, blake2b_load(block, s[14]),
-                blake2b_load(block, s[15]));
-  }
-
-  for (size_t i = 0; i < OPENSSL_ARRAY_SIZE(b2b->h); i++) {
-    b2b->h[i] ^= v[i];
-    b2b->h[i] ^= v[i + 8];
-  }
-}
-
-void BLAKE2B256_Init(BLAKE2B_CTX *b2b) {
-  OPENSSL_memset(b2b, 0, sizeof(BLAKE2B_CTX));
-
-  static_assert(sizeof(kIV) == sizeof(b2b->h), "");
-  OPENSSL_memcpy(&b2b->h, kIV, sizeof(kIV));
-
-  // https://tools.ietf.org/html/rfc7693#section-2.5
-  b2b->h[0] ^= 0x01010000 | BLAKE2B256_DIGEST_LENGTH;
-}
-
-void BLAKE2B256_Update(BLAKE2B_CTX *b2b, const void *in_data, size_t len) {
-  if (len == 0) {
-    // Work around a C language bug. See https://crbug.com/1019588.
-    return;
-  }
-
-  const uint8_t *data = reinterpret_cast<const uint8_t *>(in_data);
-  size_t todo = sizeof(b2b->block) - b2b->block_used;
-  if (todo > len) {
-    todo = len;
-  }
-  OPENSSL_memcpy(&b2b->block[b2b->block_used], data, todo);
-  b2b->block_used += todo;
-  data += todo;
-  len -= todo;
-
-  if (!len) {
-    return;
-  }
-
-  // More input remains therefore we must have filled |b2b->block|.
-  assert(b2b->block_used == BLAKE2B_CBLOCK);
-  blake2b_transform(b2b, b2b->block, BLAKE2B_CBLOCK,
-                    /*is_final_block=*/0);
-  b2b->block_used = 0;
-
-  while (len > BLAKE2B_CBLOCK) {
-    blake2b_transform(b2b, data, BLAKE2B_CBLOCK, /*is_final_block=*/0);
-    data += BLAKE2B_CBLOCK;
-    len -= BLAKE2B_CBLOCK;
-  }
-
-  OPENSSL_memcpy(b2b->block, data, len);
-  b2b->block_used = len;
-}
-
-void BLAKE2B256_Final(uint8_t out[BLAKE2B256_DIGEST_LENGTH], BLAKE2B_CTX *b2b) {
-  OPENSSL_memset(&b2b->block[b2b->block_used], 0,
-                 sizeof(b2b->block) - b2b->block_used);
-  blake2b_transform(b2b, b2b->block, b2b->block_used,
-                    /*is_final_block=*/1);
-  static_assert(BLAKE2B256_DIGEST_LENGTH <= sizeof(b2b->h), "");
-  memcpy(out, b2b->h, BLAKE2B256_DIGEST_LENGTH);
-}
-
-void BLAKE2B256(const uint8_t *data, size_t len,
-                uint8_t out[BLAKE2B256_DIGEST_LENGTH]) {
-  BLAKE2B_CTX ctx;
-  BLAKE2B256_Init(&ctx);
-  BLAKE2B256_Update(&ctx, data, len);
-  BLAKE2B256_Final(out, &ctx);
-}
diff --git a/src/crypto/blake2/blake2_test.cc b/src/crypto/blake2/blake2_test.cc
deleted file mode 100644
index e3ed764..0000000
--- a/src/crypto/blake2/blake2_test.cc
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright 2021 The BoringSSL Authors
-//
-// 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
-//
-//     https://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 <openssl/blake2.h>
-
-#include <gtest/gtest.h>
-
-#include "../test/file_test.h"
-#include "../test/test_util.h"
-
-TEST(BLAKE2B256Test, ABC) {
-  // https://tools.ietf.org/html/rfc7693#appendix-A, except updated for the
-  // 256-bit hash output.
-  const uint8_t kExpected[] = {
-      0xbd, 0xdd, 0x81, 0x3c, 0x63, 0x42, 0x39, 0x72, 0x31, 0x71, 0xef,
-      0x3f, 0xee, 0x98, 0x57, 0x9b, 0x94, 0x96, 0x4e, 0x3b, 0xb1, 0xcb,
-      0x3e, 0x42, 0x72, 0x62, 0xc8, 0xc0, 0x68, 0xd5, 0x23, 0x19,
-  };
-
-  uint8_t digest[BLAKE2B256_DIGEST_LENGTH];
-  BLAKE2B256((const uint8_t *)"abc", 3, digest);
-  EXPECT_EQ(Bytes(kExpected), Bytes(digest));
-}
-
-TEST(BLAKE2B256Test, TestVectors) {
-  FileTestGTest("crypto/blake2/blake2b256_tests.txt", [](FileTest *t) {
-    std::vector<uint8_t> msg, expected;
-    ASSERT_TRUE(t->GetBytes(&msg, "IN"));
-    ASSERT_TRUE(t->GetBytes(&expected, "HASH"));
-
-    uint8_t digest[BLAKE2B256_DIGEST_LENGTH];
-    BLAKE2B256(msg.data(), msg.size(), digest);
-    EXPECT_EQ(Bytes(digest), Bytes(expected)) << msg.size();
-
-    OPENSSL_memset(digest, 0, sizeof(digest));
-    BLAKE2B_CTX b2b;
-    BLAKE2B256_Init(&b2b);
-    for (uint8_t b : msg) {
-      BLAKE2B256_Update(&b2b, &b, 1);
-    }
-    BLAKE2B256_Final(digest, &b2b);
-    EXPECT_EQ(Bytes(digest), Bytes(expected)) << msg.size();
-  });
-}
diff --git a/src/crypto/blake2/blake2b256_tests.txt b/src/crypto/blake2/blake2b256_tests.txt
deleted file mode 100644
index b0632db..0000000
--- a/src/crypto/blake2/blake2b256_tests.txt
+++ /dev/null
@@ -1,820 +0,0 @@
-# Copyright 2021 The BoringSSL Authors
-#
-# 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
-#
-#     https://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.
-#
-# Generated by the following Go program.
-#
-# package main
-#
-# import (
-#   "fmt"
-#   "golang.org/x/crypto/blake2b"
-# )
-#
-# func main() {
-#   var buf [256]byte
-#   for i := range buf {
-#     buf[i] = byte(i)
-#   }
-#
-#   for i := 0; i < 256; i++ {
-#     h, err := blake2b.New256(nil)
-#     if err != nil {
-#       panic(err)
-#     }
-#     h.Write(buf[:i])
-#     fmt.Printf("IN: %x\n", buf[:i])
-#     fmt.Printf("HASH: %x\n", h.Sum(nil))
-#     fmt.Printf("\n")
-#   }
-# }
-
-IN:
-HASH: 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8
-
-IN: 00
-HASH: 03170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c111314
-
-IN: 0001
-HASH: 01cf79da4945c370c68b265ef70641aaa65eaa8f5953e3900d97724c2c5aa095
-
-IN: 000102
-HASH: 3d8c3d594928271f44aad7a04b177154806867bcf918e1549c0bc16f9da2b09b
-
-IN: 00010203
-HASH: e1eae5a8adae652ec9af9677346a9d60eced61e3a0a69bfacf518db31f86e36b
-
-IN: 0001020304
-HASH: 663694ac6520bdce7caab1cf3929ffe78cb2fea67a3dfc8559753a9f512a0c85
-
-IN: 000102030405
-HASH: 274327d0e2a207844988fac0b39e071422e3f621913d69a5cfef23b38601a56f
-
-IN: 00010203040506
-HASH: 9df14b7248764a869197c35e392d2a6d6fdc5b79d597297920fd3f1491b442d2
-
-IN: 0001020304050607
-HASH: 77065d25b622a8251094d869edf6b4e9ba0708a8db1f239cb68e4eeb45851621
-
-IN: 000102030405060708
-HASH: 8660231b62ce1d61fc8be93bd6acdb43ff61a7ab4cc9494f0cc803362360b07b
-
-IN: 00010203040506070809
-HASH: 8b57a796a5d07cb04cc1614dfc2acb3f73edc712d7f433619ca3bbe66bb15f49
-
-IN: 000102030405060708090a
-HASH: cc932bee351be391849c87925f2e00a83051419dc310b288d4304d4adea3d0e0
-
-IN: 000102030405060708090a0b
-HASH: 99bd72c73bea193f7040ac279bd656cdec7fd35e097a657b6c03b4fa967223ed
-
-IN: 000102030405060708090a0b0c
-HASH: 695e93b723e0a08e8dd8dd4656389363519564daf4cde5fe95a6a0ca71d3705e
-
-IN: 000102030405060708090a0b0c0d
-HASH: 4cce7128e4f659ba41ee163c45280d468163adc8c76c4937a0bbfa0cf3bdeae7
-
-IN: 000102030405060708090a0b0c0d0e
-HASH: 929cec40e9e746e771c6ad05cfcf37641254ef5e802fa71a02f8982f525f2b00
-
-IN: 000102030405060708090a0b0c0d0e0f
-HASH: c7cb5d1a1a214f1d833a21fe6c7b2420e417c2f220784cbe90072975131bc367
-
-IN: 000102030405060708090a0b0c0d0e0f10
-HASH: ced0cd609f3c8ff85b9cec93bba556dbe3caa996ac5beb629d4512473d6b31ae
-
-IN: 000102030405060708090a0b0c0d0e0f1011
-HASH: 584c9cb4da3be635d86e803c9eebccfd27fbed4aae27b0207ce3c934a0043aa4
-
-IN: 000102030405060708090a0b0c0d0e0f101112
-HASH: 9b508680d1f75d5f1e5306fbfaf7e88621cebf39f7f5cbf9e2dbb7ebb88504d4
-
-IN: 000102030405060708090a0b0c0d0e0f10111213
-HASH: 5d597f201ead11daa0687185c579efd702e288d5bd72b6b21238a4ecb52d288a
-
-IN: 000102030405060708090a0b0c0d0e0f1011121314
-HASH: 85b8afd95165d04681ab948f2f0545c47a8d11d9d1866cb7ecc88bc31a634891
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415
-HASH: 93c541c87fb52d506b1b262e49ed71689a15b745e8f3e003893c8c59cfc669fe
-
-IN: 000102030405060708090a0b0c0d0e0f10111213141516
-HASH: 395d6a5e3b41b6151411b9b22f07fcbae6c7c30df59c10ca2dfcfe333ac8e3fb
-
-IN: 000102030405060708090a0b0c0d0e0f1011121314151617
-HASH: 8d71aeb3137041d31ed42466ea5fdca2ec7a35c7701d142ccb813f8c614ceca2
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718
-HASH: 3b0b9b4027203daeb62f4ff868ac6cdd78a5cbbf7664725421a613794702f4f4
-
-IN: 000102030405060708090a0b0c0d0e0f10111213141516171819
-HASH: 7384c8812f6803d8649bed21a3acbbf36239bbd17274d249369dd65e6329fd84
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a
-HASH: 3890962f7d604fe0fcade7d8fc03c7e6285da2035bac5a9362c1d68a353d5350
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b
-HASH: 9dc0b41d6a6a6c194d04336eb383ac7f4ea537700d5926346dfb1379e9453460
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c
-HASH: bd78e1c368d70b968e194dca2c6fbda605a67d5e52824289e058c93eee073ef5
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d
-HASH: 4cc3e428d63dc132471d3135d406f8d6e30d2480d571bffbd64957bbb090f582
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e
-HASH: 9adf65b53153b1caec84cd717e00e01c2000d0569704ce38d065180adee5d964
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
-HASH: cb2f5160fc1f7e05a55ef49d340b48da2e5a78099d53393351cd579dd42503d6
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20
-HASH: b7634fe13c7aca3914ee896e22cfabc9da5b4f13e72a2ccbecb6d44bbda95bcc
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021
-HASH: 9badddebf24552cb1f66d32990476594e5249a729254f7b5c840728a42749a45
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122
-HASH: 13891b823d3a2cfe0d1a5e60fe89d8c091524f994cdc3241c4da19c4bb3c2c6b
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223
-HASH: c1b7eb8d130d705c5fa9ee8061076a3151f2e36e42d9c9289d85065b9ab343dd
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324
-HASH: ee6a288c4fcae34572fc6dba3e0b7d698bef65dcc63bf28ebd74207a2065718a
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425
-HASH: 1b5ad5f31e4061f423ee11e3de88fef05dfed9393c268fd360d05fe4465fe40a
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526
-HASH: 87c40636d0ee94687fdf020e3d165f4e45f21d62fa04aa2b9103a8187da6e64a
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324252627
-HASH: 70a3082dfc7582b9d252939a474338db1f94a6dcc7724709377797d17ff51ac5
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728
-HASH: 109036d1dece657ac6471f7f7ed33846986fdcb9dae8a73ea0881607e5e45f13
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526272829
-HASH: deda4f3e98e58392adaee3c2e7b91d172551c50945a8ae9e9e1ad10c2ae510a8
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a
-HASH: 2a82cabbbb09956d212d182cfaf7cde2f55fa33f96e3a1ab19fccfdb668ce2f2
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b
-HASH: 4a21b38c69f755c016ebb4a66eb76b4f9d4087a02fc8c3c257c1183efebda824
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c
-HASH: d3ecaa4853a092755c3692cac3fea5d9ccfaca2d32b59ccae151705333359e79
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d
-HASH: 0ab5250248686afe6eca3f3ed89e061c0b3ae2a13454b907bbdb643a72b25a66
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e
-HASH: 2fb57ab5fc0927e8301b6933325530e90fa7a94eaea95bad7c3f2f1052032900
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f
-HASH: 48de881e6c1dc35253d9c8d56e773743640f097bb7274b80ec090f1b33d1dc2e
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30
-HASH: 71745158a70425e25a8446122dda82fcfeb6bfcb593b25d79c539c6b989c526d
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031
-HASH: 45d3d95f04f304be5a61ef38357bd01e61f9bb7f8c9979458d846d9899436167
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132
-HASH: d5afebad633b7d595e6c8482d8c9a429091f58acbd84725adbac12e8be80ada9
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233
-HASH: 06bbb3b17ea95e7e00ac21b8632f84615f11456fabcda9d99cbf079e3134cfe5
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334
-HASH: 02b8e881b5f78b451995f07116af3549066cbce498497f546a9772981779d908
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435
-HASH: 370c5efe99822c30460a123467e8f151f012065ba3639bc0407ed3b3609e5d56
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233343536
-HASH: ace7db9e8f298e823b7b265bbcd004577e0029256c48684b2d7a7cdfcbff5e47
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637
-HASH: a6c1d35f74218e57b4dbd4ed467b41981208666738ffa0d9dc53d3de96be702a
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738
-HASH: 25e44457f063ae4ea799502c38d66eeefb46f520b4fc9a298df9826c9d62eea9
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233343536373839
-HASH: 1b35b64cf659d6d7d0ca933c9a52fb0e67fba76a304fadb7c47dd8ff6b6ff0fa
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a
-HASH: a72de68ff63bbe9ccfaccfa6859af660bb413f9e5d0200106100919c10301ef8
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b
-HASH: cfe37ab9c02bf84afa7a734a10317150479b791a27efc374dd669f4ef67a801d
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c
-HASH: a55a2c06f3db74c95b33d1e962da18772c3601eb13fe0b86a78667b2b9f9df86
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d
-HASH: 1b8a9195724ac01ad7da4a76c2545d2f3dc223a0242537050d7395f588748079
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e
-HASH: 29e41a64fbdd2fd27612228623c0702222bf367451e7324287f181cb3dcf7237
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f
-HASH: 10d8e6d534b00939843fe9dcc4dae48cdf008f6b8b2b82b156f5404d874887f5
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f40
-HASH: 84c04ab082c8ae24206561f77397704b627892089a05887a2a1996472bcfe15d
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041
-HASH: 2b684baba4a7245e38c3263d85b5524a51baa8ca18444af1b5958596bc30d424
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142
-HASH: 1d59fa9501213440975a0b27e4b52eea7274f8794ec35b8ee4824f7b00897ed7
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f40414243
-HASH: 60669608711b9df3715b631b474d5206179a81d054ef5494612899728b55e103
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041424344
-HASH: 46060cb9dc6be177bafe5425c4f84f9143b71cfc75dd958e15ff7a26cc92859b
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445
-HASH: e7f909c8e018bc36b59a8e7848d16c05d6bdb0ebb91fb9baf54cc328192cc362
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f40414243444546
-HASH: 7a9f75439c68869a6595eb63c61db2bc213d3ef067ec0cb3f25e02e554fce2a9
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041424344454647
-HASH: adb39b3e53a791dfd32eca83191eb82fdef4321ac504539b257c3376da240aca
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748
-HASH: 240ca19b3671dcc5ef174331fb0dd24b845dfcd01b0fbe52fa72a29bcaef1373
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f40414243444546474849
-HASH: ebae0805fd52d3e9f5f29aeb33b6be8cab0f28e668990d3cb95444d9ef90b932
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a
-HASH: ea7c3c052928f0fa3b8d86b19c87dee905e8a4b26a0a23b3c8e8dc7255ea82d6
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b
-HASH: 4ad32c1f2d18c8b7dc29d1526d7c751b89b86882fb12aa3cc9c6eddb7991d266
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c
-HASH: c61f81c3e6b899d0501b05df1de32099a7b0e878689dc2a3fd5583de90a74164
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d
-HASH: 068a8a0b96076a2773a8e00e00e57eef4fb26886b521285a6c747130850792d7
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e
-HASH: efab0151162523b18147cba89679bdab2d9b670f5ae222a34c360c094af1d441
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f
-HASH: 066de1009daca2b8390a9dc734bce547ac4e3cc4531645bb8b9cbc0070941d88
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f50
-HASH: 9fbb33b95e79c5c1683ab09a6abff6612fffb4458543dc8bbc7723a6dc2bf2ed
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f5051
-HASH: 88fea89237618cfc0270cbcd08e7ffdaa8933607c0dbccb8dd075b84fba83b11
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152
-HASH: b1960beaa4fed01453679c7d6cf78d25442bdf92ae51be479dab18e1b2b922d3
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f50515253
-HASH: a7d6821a97bc57cf6b5e25953c689439beda79364c903a3e64b6671dc9eceb2f
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f5051525354
-HASH: 90ca93ecd3e0e7c839e4fc0f2e4748954a89b2c7338e55fc18a53ccd08abed2e
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455
-HASH: 58fe5f45b9915a5b177f4256b51ce5781662352a2dd620a946b8755213fbd61f
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f50515253545556
-HASH: d109c8ec77e2253b5e7c761f59b184815e46b06cc5132a92511a93dead6315c2
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f5051525354555657
-HASH: fd9664ecb814785c8474188706e6ab0952925f9b9d8e351665ced12e84d92fad
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758
-HASH: 81342700c48f41ec5b54180d560e73e5ad6782717b2d3320b42280be11f0873e
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f50515253545556575859
-HASH: 523cf9a356076fe8c3538bdd752bc43712c7d28f29499aaae7812f1e4167840e
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a
-HASH: 9706d70e28a9e99db15974b1c01635868a62c6567eb40903adae58d417b882f2
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b
-HASH: 2216f01255ff24422e18d906c64506924940451e09d4ec17e4dbc8ea6d14ef59
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c
-HASH: 64ad22e77fc9f8a03ad6e06a067add9f0e0360d4533014fa286ccdf40dceb231
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d
-HASH: 9908418a2bb564ab9607d2f863b841dd4fe47ee370dde05a9368e400f7f9904b
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e
-HASH: 981a7989084e74f6d5fd8870321e860991729eed88e60d85ab5fdaa769be6fd2
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f
-HASH: 6528ea458efd23391e968e0dd3a40202ac94e3854d1a4642cbbe0d13a15cb849
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f60
-HASH: 767fdcd43cf16cbf980fd560dfc55f67be20510f9a0c8fcd5c749da8ef23fd7b
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061
-HASH: 90afc4e366bcee748591d93ba9f7c2e05a1fda261b58d094f8f0450c8a31ffb8
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162
-HASH: 660f9f5d430bf89f5946fd4649ad41f806937641c808a80da70660f53179a941
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f60616263
-HASH: 5ac86383dec1db602fdbc2c978c3fe1bf4328fea1e1b495b68be2c3b67ba033b
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061626364
-HASH: 7c15cdf3705457eb6b8edd79fb75bf568692ccb778f85fa2e1d462f48ee55c4f
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465
-HASH: a8df989766fc245edbb4b7268afb7380e4ea3f7123802b72ae2adb938211c9f9
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f60616263646566
-HASH: 707aa875c6162027ac2829894c0be750f5ee8fe8a64465080025f708dc200f0e
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061626364656667
-HASH: 6efd41538fec50459b6c2583ade5754c86617580eef3071d38723aaf743f93c7
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768
-HASH: 5c22d6a56a4fbdb85aa70994b4e118224bb6db2afd017a98c2b992ce26ea8925
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f60616263646566676869
-HASH: a4a9739a1c83135bab3334990b470164ed81f633d7fe79722b3ac6e65dadd38e
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a
-HASH: f1ac1ad3348ea6c949fde09cbee706ea0aecf3a93fc51a8a7e2bdb8cd7400b01
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b
-HASH: 492d9eae92f27ecce118d3fd8df63158cf709ed5069502263b8be1c105196ea3
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c
-HASH: 8691c32810f3220c0df76816af0a73b3fade2594cbcc711b855e2cd81dbdec95
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d
-HASH: cab341f7059d974cbc620bc423b02f58b5e1a899f416b0858ae1a736d4681162
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e
-HASH: e08b3d16f0a3b663f319da999db897488d1677048a38fa7b4f1f783e4f1974e6
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f
-HASH: d5587e0b33166a320dd69417adb01cb1129aff5506a2f655574cf2e264636bdb
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f70
-HASH: 5a69194c22af2b7040a8488738f96c901ae215965d611a572932464261539fc8
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f7071
-HASH: d8e7d58cd37acad505940843a8bb046971c43e4d0593c6bb946b07926644f78f
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172
-HASH: 46b07cc026b633e6245661813d5aca2bcc295d0b8ab01f27f517b4f2823d0b3e
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f70717273
-HASH: fc169b3e5480e72057d828702f9da4f08d141a178eb8adef03ca0708c1a10df7
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f7071727374
-HASH: ae3e241c1c394190fbac7fccb3df0d0bc317c6e1a15993330e9b648c80264066
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475
-HASH: f430aeef864823d8c8b448f2d25452ea3ed7abe2966adc8c42636b69d0a1bad9
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f70717273747576
-HASH: b0d6518afa4e3590746aa5fd1e58f7ec06a347981177737ad6631b22c53b6617
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f7071727374757677
-HASH: 16684ddd272dfc18dd40c16a7f57cecca70df0a96c4a066b97646953e7c7691a
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778
-HASH: e8208de0982f3d8e9ac258eb26eb3f130ced7331797b625d6b65ba4ba2064c9c
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f70717273747576777879
-HASH: 8ecd4bdc226fb29dd486cd77b566723e44c77194ba7a000734736dbb76f61c7c
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a
-HASH: 153d5c1d5edb08f51f6353b6b7bdd48a9bba14068923b8991be59346a4f932f7
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b
-HASH: 60e555a694396b48273d2d778709c208c0757cd15697a43cf0c2115599c80e68
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c
-HASH: 7a4a15b47029005972a6b814d5e7f2c86c616bd98e6a06bd95cbed2f47400c67
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d
-HASH: 3de5adb8e3bf8dfabb41afe53c58fad23427a148755148011b5c12b88aba3dc0
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e
-HASH: f2fe67ff342e21b8f45e8f2e0bcd1d9243245d50ee6c78042e9c491388791c72
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f
-HASH: c3582f71ebb2be66fa5dd750f80baae97554f3b015663c8be377cfcb2488c1d1
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80
-HASH: f7f3c46ba2564ff4c4c162da1f5b605f9f1c4aa6a20652a9f9a337c1a2f5b9c9
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f8081
-HASH: d3b11b4cbe513ec7b6f4bb5ff0c411de405a8641cf221493447a35927ca3aea7
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182
-HASH: 62323574c7cdaaca448fcbc7091ae4af3e04decb0d3c7c55636baa0a99c88699
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80818283
-HASH: 89b7d0203387e0332622ca84a879bddbcff155a213997560fc05428e79e06891
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f8081828384
-HASH: be5cce3e365fbbb139f68a3da3367e42aa8bd79b15f5252f7c08c3c8f0dcab27
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485
-HASH: 7ae7702bc025692f2ea5ab0c2eb6552c7975a57c5acb93ff115d303f341a579c
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80818283848586
-HASH: f7c4efacc0a4cb5836f170ea0bf5dc5ce36fe2d88e76a9f259eaab71aef0ff13
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f8081828384858687
-HASH: 6a35d3dadc62dfe7819519f92181b2f8d38f5e0ed3d51a22cf8a133ab628d6f4
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788
-HASH: bacecc2948c41beb73c815ca7cee6c7dbf2e4219190936edac5e4680500dd4d2
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80818283848586878889
-HASH: 2dce89f76f4f37472ae6374b0825a9cd61619a995c7f49733f62b606a7ce905a
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a
-HASH: 7b65e63a0d17d68c798b5d5631f17c35faff70dbe90006589ca89277dbeeafc0
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b
-HASH: 9477e374453099d2f8679e1d9b167b5f1c4e3cc66f32bdd9a3748a10876a27b3
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c
-HASH: 448437adad41878e6529fcc2fad9bbdb13697b6cbb2669fc8150d3aa7e0418b8
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d
-HASH: ce4936743020825f508ca72c8355c88224a52c348a21567e65526ff8f82632fd
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e
-HASH: 556a195bf23cba5c3193fbbe472f1cd5478ea4cad2dc6d6a193102a2abd0fac4
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f
-HASH: e15dc6238e2e58e9ea212b0d7abfd700da3ae5120d4d601341ce9e424a7c5828
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f90
-HASH: a22022450276c5018d51cd321e0e195a0add003e33ecaa97028d6974b5712187
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f9091
-HASH: 044cabb79e57da22b772249c332bfb43c5d1c9b683d1b2d2b75f4c5e6773a216
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192
-HASH: 766e1167593896bdc8793fb7ccdb1d35dc430aaeafe1e7a96aba870416587e7e
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f90919293
-HASH: e19d72ca8438477db71e1bfa48924c4e75ee4f84c7aa9b0911521c60a2ba6440
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f9091929394
-HASH: 512ee7aa89497a761f0798c29a1dd37d1d86f1c0870519a0aab69d265df118c0
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495
-HASH: 80c199310a2ab7af6a808f6d68843136c30e9228a766618632d4e1210edf365c
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f90919293949596
-HASH: 43fdffd19c692b6ef87c103cad9b80fb86919e6ecdcb73364d260da29a5f28d3
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f9091929394959697
-HASH: 1d1dc1909a6a8e552a0f8964601102d0edc89f5a02d3acced71826bbc5ca37af
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798
-HASH: fa77dac317e8c531246e14265ed42a87ade6fc3ce351652e6ad9290f8a157617
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f90919293949596979899
-HASH: 5bbc0f8b1a52732ed548e600865ae53360f0642a5674ecc7c6185f2cdeeb6601
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a
-HASH: 89c5fcbaf3a61d6fa4fa33c3eca8761ebab3c3467aba7d255394a0e70811ef3f
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b
-HASH: 9b3ecec85fa5ba5e0f1542085fff46bb2262163979879c9565294b2c56842a28
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c
-HASH: 4e301b852d473b5d12271209bdc350b4ec615c99cb07bdc2b379f86679b465bb
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d
-HASH: b306fbbb65eedbd07aea67a6490db9158a768d8223772d9414b124fe184098ba
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e
-HASH: de9fc91112ba62a5b732d4b708d6cc27a4b77d88e8f9c50db361c6f27295b46c
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
-HASH: f3aac26dc5197ea8dc068d6bfc9e3ee2217d908df5115fd236ba31828637ab7a
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0
-HASH: 3a0126ec4db7bd8c0c44e5197a84465c9c97c45f9d1fb8ab256eb5681dc25000
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1
-HASH: 7b6b55e2623a8eb6d70fa0913012e3db03cea4a6ddc0f5b875673a225f95d86e
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2
-HASH: be3ed738f221b53726d8a54ab7171189d77700bca86a2c614f5fefbca37eb5b0
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3
-HASH: c90bcb90aea0ab6a2331ecc17f4e68507b544910f3561d20a41916d8abb421db
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4
-HASH: 72f18a50776c9efbbb1d360342235bf28ab259648dbc08480390333314e02672
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5
-HASH: 2f1c635728444b5189540cf99d92a77057aed5a8c6fd7deadbbf9d86815cf5f9
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6
-HASH: c372e87d3540fb30e7316af85b65378384de4664a04e51b30ada778e3a226d85
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7
-HASH: d244f4ce129ef1c84eb40d30da099a2d65682e025e132b94f630fa3fdbda05af
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8
-HASH: 930a3e1f69ef7bcf3b9a81c1feb9758f60f9086b331fc170e6fa20b2a5738540
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9
-HASH: 84c3e0415a9d4da972a4fd9ee82d63b00099a2620889bc274ecb8606912cf92f
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aa
-HASH: 6d0d4cde9886218e9240a0c956836ea3939b558b8da0b309ca686f3c631f4942
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaab
-HASH: 86e476f2f8bacabc996360a0d6d57f0e045c9d3085ffe06d2305601c30d2340c
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabac
-HASH: 6ca5fcf07d2d4b1449924c8c84ad2c2e432a1f923dd365d81d9fde3c4985724f
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacad
-HASH: 9a7e1a3b1e01f24fce4d115eb98e2bb9eef349cf0d40493b8ab33727c9a1ccc8
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadae
-HASH: 165509739c09ec3486143b0c7c009d5b588736aff2813a2dbbfd733d5840ef98
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeaf
-HASH: ad191a623337f01563824b493bd735bee26833e9224d971a67b453d6e113d96a
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0
-HASH: f99e6d680bcbc6bb384290a5f966b18d4db38951abe695c6444c319058bb8904
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1
-HASH: 20e7e81e12c9ad28b7d65d3917051c327031f334a2f82b1f746cbcd7dc41f87d
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2
-HASH: 14675c8fe5cbe514491f7093aad58e9dcf8dd33ab22f3a8bca1ca5130d5e5bea
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3
-HASH: e105be1caf056cf599b91423df3cc1fb2808e0c6a50da68fc9db5693d1e0a9dc
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4
-HASH: 8fcade674361487f88d58330acb439a4b3e717341615ba691370becf4905e057
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5
-HASH: 70251dcdf7c899bddd4bc745597b998506c34bebc5de115d4fe85af2aa420171
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6
-HASH: d987826931a47b9ff871a0f2a8f10bbb659598da57d8abf81714b48a475a1356
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7
-HASH: fea31b338415f503dcb3708d68f377c4267e96345158e7b88d24ec8c232ef2b7
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8
-HASH: 3f2084debfeafa75d0c078bed7eda160459a3792a440c3718fb5c14c118e3263
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9
-HASH: e55583bd588fb053f040c541db36603e4959a7421d6281fca88454720da34c17
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9ba
-HASH: 0f433de1bbca62440be5d1ceaec8138a2154b374921d17e2d6493f85529a5ee2
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babb
-HASH: 39cc27d72466d2d63f70f28c59950a0665005b4bc8cfaaa662aeeaf34a19601f
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbc
-HASH: e7a556efdac11394b6058496b06dad0eb7315cae4cbd509e77e496c85f202aa4
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbd
-HASH: b90cf1fd5dbee8a9c18764962bff431dc560e113073828d839e11929d7d602ff
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbe
-HASH: 62b227effe8222299e757a065f1b64ab73fe6d2aac5d762303db956bc82b78ce
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebf
-HASH: 7b8f54247422c43a6d36977260e195d06e1dbba44c392b3fe76dcf4a96c433d5
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0
-HASH: d1400c9e8c7758b19e29c38e356ebc7abe8c0887741b845426821c7f74ebd35e
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1
-HASH: 9c557316ebd1e9cde622271e48f654553067c08d58986190bd3108d8bf54f130
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2
-HASH: f005478fb35b7a389377b35fb6193aab0e9f3c4138127d0905e488a3e5ed1bd6
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3
-HASH: f62114d69c3bfa8493061f44df01566e3a932e83b050b94eca7a1f7f189d6471
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4
-HASH: fd915ae6a50c06ba3917bb6d001a4b84c2ff8a906813ba78e80b043a91e7d1d6
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5
-HASH: 2176a39525e6a57ceed2f28eda5179172ec4f5a15be41b6cece8ab140ff1194c
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6
-HASH: bb831d2653af40b4e8a1048309c1f058d21334aa20c78dc63b8eb74a56fbde3c
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7
-HASH: 63c3d97a9f8894d5e043a707b0fee7f7ec4c049a23bbf1079df20b4165f9e22d
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8
-HASH: 3e53214e700694863284e7dc8dec3b98c1eaf97add0c1431e3bd321d6742a586
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9
-HASH: cb4e69b8adacdcb20dd2d79655117de489030ecc86c210a268b9985126ca9df3
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9ca
-HASH: 33eb4a42f46198eb7b52f8fd556fee08430872d3ad16fc3fca466a2d63cc4932
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacb
-HASH: 4fb1c07cd6e6ed8dbfac72210f3ff9707293dad1f8a4aa19f0ac8ff6c80f3ce9
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcc
-HASH: 22349aa35acbcffa6c84ab0e0231199d8353adde248ca1ff91010234886c94de
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccd
-HASH: 4ddf8cb3d4e80c9971a9ab171f9bc29fa4fd23eceed01e3bc297892de389d6f7
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdce
-HASH: 69be23136e4af5f52bb333deb3f32f76610b9fd9dac9ede75b2ef0491bf218ab
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecf
-HASH: 0b5ce2869ebbbc91bcc4d2e9560bcc21f4da20fffc96cd4eec422b795641c808
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0
-HASH: 82c17ce6066f792df2dce06eacd03ab4d202185a0a531e4af9a1a2d7b2d43def
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1
-HASH: 97b1b2e7e7aa6a9d1821ee2ad6c8062af397072eb9a8547c75817d0f0ad1659e
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2
-HASH: 5aa4d29af9903050d5d329d4d7f3a657ccd038543da764ed931560f799690a50
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3
-HASH: c78b17ff5ea603a809668bc06dbd99b78561b37ff615f6f5e5b86165a442ec2c
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4
-HASH: 2d1f5fb13901a205b158c5dc01bf54a5bfa9914c6b19ab66f501da64975e3a4d
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5
-HASH: ef7d3f61c537cac2a217cc214cd9d3e80f4adaac8431768f9db88a6571d3a57d
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6
-HASH: b23a6eb1184e297b5e9ec2e3aeeaec3c8de411dc614f2979de285ce4d3802e18
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7
-HASH: 6598f5924005cd92e779a5525636fb061a1cfe4e7afe97d468eb3106817d6c7a
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8
-HASH: f0aec1c2872dff14f3592c5f7e83c0dc4d299f94a7cfb247d0a4b95b9b0fc077
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9
-HASH: 709da24c1ca042c055a3cff57280d72f2b50094bbf029d9aed1dcca3288022c8
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9da
-HASH: afb0abb463999cc9ab124c95993d62e839bf7409d91d1c377912a895523c3125
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadb
-HASH: 049eb53d4bc939e817c9572a5f0def95e4e38b4614969d866e738e3ae6e24936
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdc
-HASH: 1f9df26fb5219482437297326737c0558eb557da4eb6374805dd9a30f842aae4
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdd
-HASH: 11151481e2199be550f9ae696cbd9ddc9be9686dbc77b619c005d0fb5aef9b89
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcddde
-HASH: 0767c2de1353f58b416e3fa492173c9c39792de46a34c6153d5878ba01e5f07d
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedf
-HASH: 46d743927ec8ad5e403c9e20405200481961e7335e90c4ea9c5ad35b77f3681c
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0
-HASH: d5ffd30325257614674de0b40f7b2ded3a287f48ae229b02c91dd2be28404171
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1
-HASH: c36f10f2463b839f4bbe7130c8f3abf29a56608bdf767199faccadecc8245631
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2
-HASH: 4265605e9d5b02fc438c15823bdd01cbcec073d57ad7a699d0126312fdbe4322
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3
-HASH: 829f989b205831d3c5c002ebf8cea1b5fba3daf966539e3b421b6c2c768f7554
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4
-HASH: 406a227d2d1767e0cf417d6bf7ca58a262c79460f421b9c155513714187d10d2
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5
-HASH: adf7d0028e41121e47aef77dca9de82fef7fe4f4c82f2d6df253adb4e756f2ec
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6
-HASH: b9a11305f92002de551314de53739b1c7e31c257149aee21f3a5ba4af068215d
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7
-HASH: 49f9abbe9007e85091827b49256730f552e4a2170a7b6f9cc461483bd8ae0d52
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8
-HASH: 98ebce2d0b548d9fb99fbd63d842c119f2ce671317cd080ee036fa69457fccda
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9
-HASH: 779042d9184c626289868dc73662e71f413c1df4fecd2f08b0edf40bd8d520f4
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9ea
-HASH: f8ad01320e4bbab09282a97511598384089a447f9a6a8fa298b65a82f1731806
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaeb
-HASH: 1d799e024fd1627cc0395c68bec456631153bffaeb625cda58411b9cbe137b34
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebec
-HASH: a9ba7072400dac24052ef744ca60c8273d743af357c851a7016cafd599225672
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebeced
-HASH: b02147bf83730cc51219f660fe93c63a7463c765395b6721bb842e3ef230e6f5
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedee
-HASH: b642374d57afa89053dcb7f6e1e72680fb96e3f28adaaf5aed89ab4cfc78214a
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeef
-HASH: 546b4be370ba614a1761fe8cef8c023d6a7f968981e23a1e8e1168b25cce2efa
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0
-HASH: 72dab9724f6e174d48e6b8caf489747995d649828a1b1d7a6e8527d9a01523a4
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1
-HASH: 30b611734127b847bed5c68a867bcded79b2b9da0a358dbe15c4dd578f81e6c0
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2
-HASH: 986317b1d1afd4692dd533a712718196d412f46a6f3166f417ef01306ab695dd
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3
-HASH: db6329f783adf7cf5a10e47369fe03c95bcf523558f3aedf18b51a355a252517
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4
-HASH: 54bb60a43c1e045644420916bac42cc72f86649fe8efeec866cd8e8128a88def
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5
-HASH: 802875948f79eefb707094e323a0faa2d6d88949a08c044ed3757174492bd2eb
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6
-HASH: ffc9e261842e1afdaed9f364f125301f20ac8fb0eea556db975211c7db281daa
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7
-HASH: edfe0aa71067c62e894a516a72dd4bef8c3917e46eb22d39626ea826b90804e9
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8
-HASH: 98832102b93bab4f82ee872d1dc96d2651ccc9e908c3cf25a56b59cce20319df
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9
-HASH: 1248d2d1736f1c125c6928bf893f581ea25be6e6e3d3c46081c557de591d6c6c
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fa
-HASH: 7a01651d8ffa44f6695270c73066ca9d61733ae3c181e3477d11e7c9563594a3
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafb
-HASH: ced595397cfd128aadbf451002457ff5b0fc2ac3993cabd47f0fc3ddbc6d0f32
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfc
-HASH: 8797db8dd8ddd1ecbee1f1d71aed5d41adca8345277a7bc0b12df75bb4536722
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfd
-HASH: 369b09e04be27275df75c180d7283c083162f35456152f0b16ae680dda5195bc
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfe
-HASH: 1d0850ee9bca0abc9601e9deabe1418fedec2fb6ac4150bd5302d2430f9be943
-
-
-# Longer test vectors
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfe
-HASH: 450eee5f3502c7d5ac7f223d4b4f2c76a11e5bd02d253a37ca9e6e901d5fb56e
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff
-HASH: 6ed9bf545705dba5971e83a1f2a46a9dd5ac2fe8a934f13cee8d353003eaf908
-
-IN: 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff00
-HASH: a43b19ed8f147f18c304bffeec559e63e83877507cac11924edaf9eb6b6c1bac
diff --git a/src/crypto/bn/bn_asn1.cc b/src/crypto/bn/bn_asn1.cc
deleted file mode 100644
index 38b03eb..0000000
--- a/src/crypto/bn/bn_asn1.cc
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright 2015 The BoringSSL Authors
-//
-// 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
-//
-//     https://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 <openssl/bn.h>
-
-#include <openssl/bytestring.h>
-#include <openssl/err.h>
-
-
-int BN_parse_asn1_unsigned(CBS *cbs, BIGNUM *ret) {
-  CBS child;
-  int is_negative;
-  if (!CBS_get_asn1(cbs, &child, CBS_ASN1_INTEGER) ||
-      !CBS_is_valid_asn1_integer(&child, &is_negative)) {
-    OPENSSL_PUT_ERROR(BN, BN_R_BAD_ENCODING);
-    return 0;
-  }
-
-  if (is_negative) {
-    OPENSSL_PUT_ERROR(BN, BN_R_NEGATIVE_NUMBER);
-    return 0;
-  }
-
-  return BN_bin2bn(CBS_data(&child), CBS_len(&child), ret) != NULL;
-}
-
-int BN_marshal_asn1(CBB *cbb, const BIGNUM *bn) {
-  // Negative numbers are unsupported.
-  if (BN_is_negative(bn)) {
-    OPENSSL_PUT_ERROR(BN, BN_R_NEGATIVE_NUMBER);
-    return 0;
-  }
-
-  CBB child;
-  if (!CBB_add_asn1(cbb, &child, CBS_ASN1_INTEGER) ||
-      // The number must be padded with a leading zero if the high bit would
-      // otherwise be set or if |bn| is zero.
-      (BN_num_bits(bn) % 8 == 0 && !CBB_add_u8(&child, 0x00)) ||
-      !BN_bn2cbb_padded(&child, BN_num_bytes(bn), bn) ||
-      !CBB_flush(cbb)) {
-    OPENSSL_PUT_ERROR(BN, BN_R_ENCODE_ERROR);
-    return 0;
-  }
-
-  return 1;
-}
diff --git a/src/crypto/bn/convert.cc b/src/crypto/bn/convert.cc
deleted file mode 100644
index 59ea6d4..0000000
--- a/src/crypto/bn/convert.cc
+++ /dev/null
@@ -1,407 +0,0 @@
-// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
-//
-// 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
-//
-//     https://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 <openssl/bn.h>
-
-#include <assert.h>
-#include <ctype.h>
-#include <limits.h>
-#include <stdio.h>
-
-#include <algorithm>
-
-#include <openssl/bio.h>
-#include <openssl/bytestring.h>
-#include <openssl/err.h>
-#include <openssl/mem.h>
-
-#include "../fipsmodule/bn/internal.h"
-
-
-int BN_bn2cbb_padded(CBB *out, size_t len, const BIGNUM *in) {
-  uint8_t *ptr;
-  return CBB_add_space(out, &ptr, len) && BN_bn2bin_padded(ptr, len, in);
-}
-
-static const char hextable[] = "0123456789abcdef";
-
-char *BN_bn2hex(const BIGNUM *bn) {
-  int width = bn_minimal_width(bn);
-  char *buf = reinterpret_cast<char *>(
-      OPENSSL_malloc(1 /* leading '-' */ + 1 /* zero is non-empty */ +
-                     width * BN_BYTES * 2 + 1 /* trailing NUL */));
-  if (buf == NULL) {
-    return NULL;
-  }
-
-  char *p = buf;
-  if (bn->neg) {
-    *(p++) = '-';
-  }
-
-  if (BN_is_zero(bn)) {
-    *(p++) = '0';
-  }
-
-  int z = 0;
-  for (int i = width - 1; i >= 0; i--) {
-    for (int j = BN_BITS2 - 8; j >= 0; j -= 8) {
-      // strip leading zeros
-      int v = ((int)(bn->d[i] >> (long)j)) & 0xff;
-      if (z || v != 0) {
-        *(p++) = hextable[v >> 4];
-        *(p++) = hextable[v & 0x0f];
-        z = 1;
-      }
-    }
-  }
-  *p = '\0';
-
-  return buf;
-}
-
-// decode_hex decodes |in_len| bytes of hex data from |in| and updates |bn|.
-static int decode_hex(BIGNUM *bn, const char *in, int in_len) {
-  if (in_len > INT_MAX / 4) {
-    OPENSSL_PUT_ERROR(BN, BN_R_BIGNUM_TOO_LONG);
-    return 0;
-  }
-  // |in_len| is the number of hex digits.
-  if (!bn_expand(bn, in_len * 4)) {
-    return 0;
-  }
-
-  int i = 0;
-  while (in_len > 0) {
-    // Decode one |BN_ULONG| at a time.
-    int todo = BN_BYTES * 2;
-    if (todo > in_len) {
-      todo = in_len;
-    }
-
-    BN_ULONG word = 0;
-    int j;
-    for (j = todo; j > 0; j--) {
-      uint8_t hex = 0;
-      if (!OPENSSL_fromxdigit(&hex, in[in_len - j])) {
-        // This shouldn't happen. The caller checks |OPENSSL_isxdigit|.
-        assert(0);
-      }
-      word = (word << 4) | hex;
-    }
-
-    bn->d[i++] = word;
-    in_len -= todo;
-  }
-  assert(i <= bn->dmax);
-  bn->width = i;
-  return 1;
-}
-
-// decode_dec decodes |in_len| bytes of decimal data from |in| and updates |bn|.
-static int decode_dec(BIGNUM *bn, const char *in, int in_len) {
-  int i, j;
-  BN_ULONG l = 0;
-
-  // Decode |BN_DEC_NUM| digits at a time.
-  j = BN_DEC_NUM - (in_len % BN_DEC_NUM);
-  if (j == BN_DEC_NUM) {
-    j = 0;
-  }
-  l = 0;
-  for (i = 0; i < in_len; i++) {
-    l *= 10;
-    l += in[i] - '0';
-    if (++j == BN_DEC_NUM) {
-      if (!BN_mul_word(bn, BN_DEC_CONV) || !BN_add_word(bn, l)) {
-        return 0;
-      }
-      l = 0;
-      j = 0;
-    }
-  }
-  return 1;
-}
-
-typedef int (*decode_func)(BIGNUM *bn, const char *in, int in_len);
-typedef int (*char_test_func)(int c);
-
-static int bn_x2bn(BIGNUM **outp, const char *in, decode_func decode,
-                   char_test_func want_char) {
-  BIGNUM *ret = NULL;
-  int neg = 0, i;
-  int num;
-
-  if (in == NULL || *in == 0) {
-    return 0;
-  }
-
-  if (*in == '-') {
-    neg = 1;
-    in++;
-  }
-
-  for (i = 0; want_char((unsigned char)in[i]) && i + neg < INT_MAX; i++) {
-  }
-
-  num = i + neg;
-  if (outp == NULL) {
-    return num;
-  }
-
-  // in is the start of the hex digits, and it is 'i' long
-  if (*outp == NULL) {
-    ret = BN_new();
-    if (ret == NULL) {
-      return 0;
-    }
-  } else {
-    ret = *outp;
-    BN_zero(ret);
-  }
-
-  if (!decode(ret, in, i)) {
-    goto err;
-  }
-
-  bn_set_minimal_width(ret);
-  if (!BN_is_zero(ret)) {
-    ret->neg = neg;
-  }
-
-  *outp = ret;
-  return num;
-
-err:
-  if (*outp == NULL) {
-    BN_free(ret);
-  }
-
-  return 0;
-}
-
-int BN_hex2bn(BIGNUM **outp, const char *in) {
-  return bn_x2bn(outp, in, decode_hex, OPENSSL_isxdigit);
-}
-
-char *BN_bn2dec(const BIGNUM *a) {
-  // It is easier to print strings little-endian, so we assemble it in reverse
-  // and fix at the end.
-  bssl::ScopedCBB cbb;
-  if (!CBB_init(cbb.get(), 16) || //
-      !CBB_add_u8(cbb.get(), 0 /* trailing NUL */)) {
-    return nullptr;
-  }
-
-  if (BN_is_zero(a)) {
-    if (!CBB_add_u8(cbb.get(), '0')) {
-      return nullptr;
-    }
-  } else {
-    bssl::UniquePtr<BIGNUM> copy(BN_dup(a));
-    if (copy == nullptr) {
-      return nullptr;
-    }
-
-    while (!BN_is_zero(copy.get())) {
-      BN_ULONG word = BN_div_word(copy.get(), BN_DEC_CONV);
-      if (word == (BN_ULONG)-1) {
-        return nullptr;
-      }
-
-      const int add_leading_zeros = !BN_is_zero(copy.get());
-      for (int i = 0; i < BN_DEC_NUM && (add_leading_zeros || word != 0); i++) {
-        if (!CBB_add_u8(cbb.get(), '0' + word % 10)) {
-          return nullptr;
-        }
-        word /= 10;
-      }
-      assert(word == 0);
-    }
-  }
-
-  if (BN_is_negative(a) && //
-      !CBB_add_u8(cbb.get(), '-')) {
-    return nullptr;
-  }
-
-  uint8_t *data;
-  size_t len;
-  if (!CBB_finish(cbb.get(), &data, &len)) {
-    return nullptr;
-  }
-
-  std::reverse(data, data + len);
-  return reinterpret_cast<char *>(data);
-}
-
-int BN_dec2bn(BIGNUM **outp, const char *in) {
-  return bn_x2bn(outp, in, decode_dec, OPENSSL_isdigit);
-}
-
-int BN_asc2bn(BIGNUM **outp, const char *in) {
-  const char *const orig_in = in;
-  if (*in == '-') {
-    in++;
-  }
-
-  if (in[0] == '0' && (in[1] == 'X' || in[1] == 'x')) {
-    if (!BN_hex2bn(outp, in + 2)) {
-      return 0;
-    }
-  } else {
-    if (!BN_dec2bn(outp, in)) {
-      return 0;
-    }
-  }
-
-  if (*orig_in == '-' && !BN_is_zero(*outp)) {
-    (*outp)->neg = 1;
-  }
-
-  return 1;
-}
-
-int BN_print(BIO *bp, const BIGNUM *a) {
-  if (a->neg && BIO_write(bp, "-", 1) != 1) {
-    return 0;
-  }
-
-  if (BN_is_zero(a) && BIO_write(bp, "0", 1) != 1) {
-    return 0;
-  }
-
-  int z = 0;
-  for (int i = bn_minimal_width(a) - 1; i >= 0; i--) {
-    for (int j = BN_BITS2 - 4; j >= 0; j -= 4) {
-      // strip leading zeros
-      int v = ((int)(a->d[i] >> (long)j)) & 0x0f;
-      if (z || v != 0) {
-        if (BIO_write(bp, &hextable[v], 1) != 1) {
-          return 0;
-        }
-        z = 1;
-      }
-    }
-  }
-  return 1;
-}
-
-int BN_print_fp(FILE *fp, const BIGNUM *a) {
-  BIO *b = BIO_new_fp(fp, BIO_NOCLOSE);
-  if (b == NULL) {
-    return 0;
-  }
-
-  int ret = BN_print(b, a);
-  BIO_free(b);
-  return ret;
-}
-
-
-size_t BN_bn2mpi(const BIGNUM *in, uint8_t *out) {
-  const size_t bits = BN_num_bits(in);
-  const size_t bytes = (bits + 7) / 8;
-  // If the number of bits is a multiple of 8, i.e. if the MSB is set,
-  // prefix with a zero byte.
-  int extend = 0;
-  if (bytes != 0 && (bits & 0x07) == 0) {
-    extend = 1;
-  }
-
-  const size_t len = bytes + extend;
-  if (len < bytes || 4 + len < len || (len & 0xffffffff) != len) {
-    // If we cannot represent the number then we emit zero as the interface
-    // doesn't allow an error to be signalled.
-    if (out) {
-      OPENSSL_memset(out, 0, 4);
-    }
-    return 4;
-  }
-
-  if (out == NULL) {
-    return 4 + len;
-  }
-
-  out[0] = len >> 24;
-  out[1] = len >> 16;
-  out[2] = len >> 8;
-  out[3] = len;
-  if (extend) {
-    out[4] = 0;
-  }
-  BN_bn2bin(in, out + 4 + extend);
-  if (in->neg && len > 0) {
-    out[4] |= 0x80;
-  }
-  return len + 4;
-}
-
-BIGNUM *BN_mpi2bn(const uint8_t *in, size_t len, BIGNUM *out) {
-  if (len < 4) {
-    OPENSSL_PUT_ERROR(BN, BN_R_BAD_ENCODING);
-    return NULL;
-  }
-  const size_t in_len = ((size_t)in[0] << 24) | //
-                        ((size_t)in[1] << 16) | //
-                        ((size_t)in[2] << 8) | //
-                        ((size_t)in[3]);
-  if (in_len != len - 4) {
-    OPENSSL_PUT_ERROR(BN, BN_R_BAD_ENCODING);
-    return NULL;
-  }
-
-  int out_is_alloced = 0;
-  if (out == NULL) {
-    out = BN_new();
-    if (out == NULL) {
-      return NULL;
-    }
-    out_is_alloced = 1;
-  }
-
-  if (in_len == 0) {
-    BN_zero(out);
-    return out;
-  }
-
-  in += 4;
-  if (BN_bin2bn(in, in_len, out) == NULL) {
-    if (out_is_alloced) {
-      BN_free(out);
-    }
-    return NULL;
-  }
-  out->neg = ((*in) & 0x80) != 0;
-  if (out->neg) {
-    BN_clear_bit(out, BN_num_bits(out) - 1);
-  }
-  return out;
-}
-
-int BN_bn2binpad(const BIGNUM *in, uint8_t *out, int len) {
-  if (len < 0 || //
-      !BN_bn2bin_padded(out, (size_t)len, in)) {
-    return -1;
-  }
-  return len;
-}
-
-int BN_bn2lebinpad(const BIGNUM *in, uint8_t *out, int len) {
-  if (len < 0 || //
-      !BN_bn2le_padded(out, (size_t)len, in)) {
-    return -1;
-  }
-  return len;
-}
diff --git a/src/crypto/bn/div.cc b/src/crypto/bn/div.cc
deleted file mode 100644
index 868a2a3..0000000
--- a/src/crypto/bn/div.cc
+++ /dev/null
@@ -1,100 +0,0 @@
-// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
-//
-// 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
-//
-//     https://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 <openssl/bn.h>
-
-#include <openssl/err.h>
-
-#include "../fipsmodule/bn/internal.h"
-#include "../internal.h"
-
-
-int BN_mod_pow2(BIGNUM *r, const BIGNUM *a, size_t e) {
-  if (e == 0 || a->width == 0) {
-    BN_zero(r);
-    return 1;
-  }
-
-  size_t num_words = 1 + ((e - 1) / BN_BITS2);
-
-  // If |a| definitely has less than |e| bits, just BN_copy.
-  if ((size_t)a->width < num_words) {
-    return BN_copy(r, a) != NULL;
-  }
-
-  // Otherwise, first make sure we have enough space in |r|.
-  // Note that this will fail if num_words > INT_MAX.
-  if (!bn_wexpand(r, num_words)) {
-    return 0;
-  }
-
-  // Copy the content of |a| into |r|.
-  OPENSSL_memcpy(r->d, a->d, num_words * sizeof(BN_ULONG));
-
-  // If |e| isn't word-aligned, we have to mask off some of our bits.
-  size_t top_word_exponent = e % (sizeof(BN_ULONG) * 8);
-  if (top_word_exponent != 0) {
-    r->d[num_words - 1] &= (((BN_ULONG)1) << top_word_exponent) - 1;
-  }
-
-  // Fill in the remaining fields of |r|.
-  r->neg = a->neg;
-  r->width = (int)num_words;
-  bn_set_minimal_width(r);
-  return 1;
-}
-
-int BN_nnmod_pow2(BIGNUM *r, const BIGNUM *a, size_t e) {
-  if (!BN_mod_pow2(r, a, e)) {
-    return 0;
-  }
-
-  // If the returned value was non-negative, we're done.
-  if (BN_is_zero(r) || !r->neg) {
-    return 1;
-  }
-
-  size_t num_words = 1 + (e - 1) / BN_BITS2;
-
-  // Expand |r| to the size of our modulus.
-  if (!bn_wexpand(r, num_words)) {
-    return 0;
-  }
-
-  // Clear the upper words of |r|.
-  OPENSSL_memset(&r->d[r->width], 0, (num_words - r->width) * BN_BYTES);
-
-  // Set parameters of |r|.
-  r->neg = 0;
-  r->width = (int)num_words;
-
-  // Now, invert every word. The idea here is that we want to compute 2^e-|x|,
-  // which is actually equivalent to the twos-complement representation of |x|
-  // in |e| bits, which is -x = ~x + 1.
-  for (int i = 0; i < r->width; i++) {
-    r->d[i] = ~r->d[i];
-  }
-
-  // If our exponent doesn't span the top word, we have to mask the rest.
-  size_t top_word_exponent = e % BN_BITS2;
-  if (top_word_exponent != 0) {
-    r->d[r->width - 1] &= (((BN_ULONG)1) << top_word_exponent) - 1;
-  }
-
-  // Keep the minimal-width invariant for |BIGNUM|.
-  bn_set_minimal_width(r);
-
-  // Finally, add one, for the reason described above.
-  return BN_add(r, r, BN_value_one());
-}
diff --git a/src/crypto/bn/exponentiation.cc b/src/crypto/bn/exponentiation.cc
deleted file mode 100644
index 07f9ec6..0000000
--- a/src/crypto/bn/exponentiation.cc
+++ /dev/null
@@ -1,166 +0,0 @@
-// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
-//
-// 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
-//
-//     https://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 <openssl/bn.h>
-
-#include <assert.h>
-
-#include <openssl/err.h>
-
-#include "../fipsmodule/bn/internal.h"
-
-
-int BN_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx) {
-  bssl::BN_CTXScope scope(ctx);
-  BIGNUM *rr;
-  if (r == a || r == p) {
-    rr = BN_CTX_get(ctx);
-  } else {
-    rr = r;
-  }
-
-  BIGNUM *v = BN_CTX_get(ctx);
-  if (rr == NULL || v == NULL) {
-    return 0;
-  }
-
-  if (BN_copy(v, a) == NULL) {
-    return 0;
-  }
-  int bits = BN_num_bits(p);
-
-  if (BN_is_odd(p)) {
-    if (BN_copy(rr, a) == NULL) {
-      return 0;
-    }
-  } else {
-    if (!BN_one(rr)) {
-      return 0;
-    }
-  }
-
-  for (int i = 1; i < bits; i++) {
-    if (!BN_sqr(v, v, ctx)) {
-      return 0;
-    }
-    if (BN_is_bit_set(p, i)) {
-      if (!BN_mul(rr, rr, v, ctx)) {
-        return 0;
-      }
-    }
-  }
-
-  if (r != rr && !BN_copy(r, rr)) {
-    return 0;
-  }
-  return 1;
-}
-
-static int mod_exp_even(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
-                        const BIGNUM *m, BN_CTX *ctx) {
-  // No cryptographic operations require modular exponentiation with an even
-  // modulus. We support it for backwards compatibility with any applications
-  // that may have relied on the operation, but optimize for simplicity over
-  // performance with straightforward square-and-multiply routine.
-  int bits = BN_num_bits(p);
-  if (bits == 0) {
-    return BN_one(r);
-  }
-
-  // Make a copy of |a|, in case it aliases |r|.
-  bssl::BN_CTXScope scope(ctx);
-  BIGNUM *tmp = BN_CTX_get(ctx);
-  if (tmp == nullptr || !BN_copy(tmp, a)) {
-    return 0;
-  }
-
-  assert(BN_is_bit_set(p, bits - 1));
-  if (!BN_copy(r, tmp)) {
-    return 0;
-  }
-
-  for (int i = bits - 2; i >= 0; i--) {
-    if (!BN_mod_sqr(r, r, m, ctx) ||
-        (BN_is_bit_set(p, i) && !BN_mod_mul(r, r, tmp, m, ctx))) {
-      return 0;
-    }
-  }
-
-  return 1;
-}
-
-int BN_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, const BIGNUM *m,
-               BN_CTX *ctx) {
-  if (m->neg) {
-    OPENSSL_PUT_ERROR(BN, BN_R_NEGATIVE_NUMBER);
-    return 0;
-  }
-  if (a->neg || BN_ucmp(a, m) >= 0) {
-    if (!BN_nnmod(r, a, m, ctx)) {
-      return 0;
-    }
-    a = r;
-  }
-
-  if (BN_is_odd(m)) {
-    return BN_mod_exp_mont(r, a, p, m, ctx, NULL);
-  }
-
-  return mod_exp_even(r, a, p, m, ctx);
-}
-
-int BN_mod_exp_mont_word(BIGNUM *rr, BN_ULONG a, const BIGNUM *p,
-                         const BIGNUM *m, BN_CTX *ctx,
-                         const BN_MONT_CTX *mont) {
-  // BN_mod_exp_mont requires reduced inputs.
-  if (bn_minimal_width(m) == 1) {
-    a %= m->d[0];
-  }
-
-  bssl::UniquePtr<BIGNUM> a_bignum(BN_new());
-  if (a_bignum == nullptr || !BN_set_word(a_bignum.get(), a)) {
-    OPENSSL_PUT_ERROR(BN, ERR_R_INTERNAL_ERROR);
-    return 0;
-  }
-
-  return BN_mod_exp_mont(rr, a_bignum.get(), p, m, ctx, mont);
-}
-
-int BN_mod_exp2_mont(BIGNUM *rr, const BIGNUM *a1, const BIGNUM *p1,
-                     const BIGNUM *a2, const BIGNUM *p2, const BIGNUM *m,
-                     BN_CTX *ctx, const BN_MONT_CTX *mont) {
-  // Allocate a montgomery context if it was not supplied by the caller.
-  bssl::UniquePtr<BN_MONT_CTX> new_mont;
-  if (mont == nullptr) {
-    new_mont.reset(BN_MONT_CTX_new_for_modulus(m, ctx));
-    if (new_mont == nullptr) {
-      return 0;
-    }
-    mont = new_mont.get();
-  }
-
-  // BN_mod_mul_montgomery removes one Montgomery factor, so passing one
-  // Montgomery-encoded and one non-Montgomery-encoded value gives a
-  // non-Montgomery-encoded result.
-  bssl::UniquePtr<BIGNUM> tmp(BN_new());
-  if (tmp == nullptr ||  //
-      !BN_mod_exp_mont(rr, a1, p1, m, ctx, mont) ||
-      !BN_mod_exp_mont(tmp.get(), a2, p2, m, ctx, mont) ||
-      !BN_to_montgomery(rr, rr, mont, ctx) ||
-      !BN_mod_mul_montgomery(rr, rr, tmp.get(), mont, ctx)) {
-    return 0;
-  }
-
-  return 1;
-}
diff --git a/src/crypto/bn/sqrt.cc b/src/crypto/bn/sqrt.cc
deleted file mode 100644
index e23f1a3..0000000
--- a/src/crypto/bn/sqrt.cc
+++ /dev/null
@@ -1,93 +0,0 @@
-// Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved.
-//
-// 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
-//
-//     https://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 <openssl/bn.h>
-
-#include <openssl/err.h>
-
-
-int BN_sqrt(BIGNUM *out_sqrt, const BIGNUM *in, BN_CTX *ctx) {
-  BIGNUM *estimate, *tmp, *delta, *last_delta, *tmp2;
-  int ok = 0, last_delta_valid = 0;
-
-  if (in->neg) {
-    OPENSSL_PUT_ERROR(BN, BN_R_NEGATIVE_NUMBER);
-    return 0;
-  }
-  if (BN_is_zero(in)) {
-    BN_zero(out_sqrt);
-    return 1;
-  }
-
-  bssl::BN_CTXScope scope(ctx);
-  if (out_sqrt == in) {
-    estimate = BN_CTX_get(ctx);
-  } else {
-    estimate = out_sqrt;
-  }
-  tmp = BN_CTX_get(ctx);
-  last_delta = BN_CTX_get(ctx);
-  delta = BN_CTX_get(ctx);
-  if (estimate == NULL || tmp == NULL || last_delta == NULL || delta == NULL) {
-    goto err;
-  }
-
-  // We estimate that the square root of an n-bit number is 2^{n/2}.
-  if (!BN_lshift(estimate, BN_value_one(), BN_num_bits(in)/2)) {
-    goto err;
-  }
-
-  // This is Newton's method for finding a root of the equation |estimate|^2 -
-  // |in| = 0.
-  for (;;) {
-    // |estimate| = 1/2 * (|estimate| + |in|/|estimate|)
-    if (!BN_div(tmp, NULL, in, estimate, ctx) ||
-        !BN_add(tmp, tmp, estimate) ||
-        !BN_rshift1(estimate, tmp) ||
-        // |tmp| = |estimate|^2
-        !BN_sqr(tmp, estimate, ctx) ||
-        // |delta| = |in| - |tmp|
-        !BN_sub(delta, in, tmp)) {
-      OPENSSL_PUT_ERROR(BN, ERR_R_BN_LIB);
-      goto err;
-    }
-
-    delta->neg = 0;
-    // The difference between |in| and |estimate| squared is required to always
-    // decrease. This ensures that the loop always terminates, but I don't have
-    // a proof that it always finds the square root for a given square.
-    if (last_delta_valid && BN_cmp(delta, last_delta) >= 0) {
-      break;
-    }
-
-    last_delta_valid = 1;
-
-    tmp2 = last_delta;
-    last_delta = delta;
-    delta = tmp2;
-  }
-
-  if (BN_cmp(tmp, in) != 0) {
-    OPENSSL_PUT_ERROR(BN, BN_R_NOT_A_SQUARE);
-    goto err;
-  }
-
-  ok = 1;
-
-err:
-  if (ok && out_sqrt == in && !BN_copy(out_sqrt, estimate)) {
-    ok = 0;
-  }
-  return ok;
-}
diff --git a/src/crypto/buf/buf.cc b/src/crypto/buf/buf.cc
deleted file mode 100644
index cb797b2..0000000
--- a/src/crypto/buf/buf.cc
+++ /dev/null
@@ -1,118 +0,0 @@
-// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
-//
-// 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
-//
-//     https://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 <openssl/buf.h>
-
-#include <string.h>
-
-#include <openssl/err.h>
-#include <openssl/mem.h>
-
-#include "../internal.h"
-
-
-BUF_MEM *BUF_MEM_new(void) {
-  return reinterpret_cast<BUF_MEM *>(OPENSSL_zalloc(sizeof(BUF_MEM)));
-}
-
-void BUF_MEM_free(BUF_MEM *buf) {
-  if (buf == nullptr) {
-    return;
-  }
-  OPENSSL_free(buf->data);
-  OPENSSL_free(buf);
-}
-
-int BUF_MEM_reserve(BUF_MEM *buf, size_t cap) {
-  if (buf->max >= cap) {
-    return 1;
-  }
-
-  size_t n = cap + 3;
-  if (n < cap) {
-    OPENSSL_PUT_ERROR(BUF, ERR_R_OVERFLOW);
-    return 0;
-  }
-  n = n / 3;
-  size_t alloc_size = n * 4;
-  if (alloc_size / 4 != n) {
-    OPENSSL_PUT_ERROR(BUF, ERR_R_OVERFLOW);
-    return 0;
-  }
-
-  char *new_buf =
-      reinterpret_cast<char *>(OPENSSL_realloc(buf->data, alloc_size));
-  if (new_buf == NULL) {
-    return 0;
-  }
-
-  buf->data = new_buf;
-  buf->max = alloc_size;
-  return 1;
-}
-
-size_t BUF_MEM_grow(BUF_MEM *buf, size_t len) {
-  if (!BUF_MEM_reserve(buf, len)) {
-    return 0;
-  }
-  if (buf->length < len) {
-    OPENSSL_memset(&buf->data[buf->length], 0, len - buf->length);
-  }
-  buf->length = len;
-  return len;
-}
-
-size_t BUF_MEM_grow_clean(BUF_MEM *buf, size_t len) {
-  return BUF_MEM_grow(buf, len);
-}
-
-int BUF_MEM_append(BUF_MEM *buf, const void *in, size_t len) {
-  // Work around a C language bug. See https://crbug.com/1019588.
-  if (len == 0) {
-    return 1;
-  }
-  size_t new_len = buf->length + len;
-  if (new_len < len) {
-    OPENSSL_PUT_ERROR(BUF, ERR_R_OVERFLOW);
-    return 0;
-  }
-  if (!BUF_MEM_reserve(buf, new_len)) {
-    return 0;
-  }
-  OPENSSL_memcpy(buf->data + buf->length, in, len);
-  buf->length = new_len;
-  return 1;
-}
-
-char *BUF_strdup(const char *str) { return OPENSSL_strdup(str); }
-
-size_t BUF_strnlen(const char *str, size_t max_len) {
-  return OPENSSL_strnlen(str, max_len);
-}
-
-char *BUF_strndup(const char *str, size_t size) {
-  return OPENSSL_strndup(str, size);
-}
-
-size_t BUF_strlcpy(char *dst, const char *src, size_t dst_size) {
-  return OPENSSL_strlcpy(dst, src, dst_size);
-}
-
-size_t BUF_strlcat(char *dst, const char *src, size_t dst_size) {
-  return OPENSSL_strlcat(dst, src, dst_size);
-}
-
-void *BUF_memdup(const void *data, size_t size) {
-  return OPENSSL_memdup(data, size);
-}
diff --git a/src/crypto/buf/buf_test.cc b/src/crypto/buf/buf_test.cc
deleted file mode 100644
index 9fc773a..0000000
--- a/src/crypto/buf/buf_test.cc
+++ /dev/null
@@ -1,97 +0,0 @@
-// Copyright 2017 The BoringSSL Authors
-//
-// 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
-//
-//     https://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 <openssl/buf.h>
-
-#include <string.h>
-
-#include <string>
-
-#include <gtest/gtest.h>
-
-
-TEST(BufTest, Basic) {
-  bssl::UniquePtr<BUF_MEM> buf(BUF_MEM_new());
-  ASSERT_TRUE(buf);
-  EXPECT_EQ(0u, buf->length);
-
-  // Use BUF_MEM_reserve to increase buf->max.
-  ASSERT_TRUE(BUF_MEM_reserve(buf.get(), 200));
-  EXPECT_GE(buf->max, 200u);
-  EXPECT_EQ(0u, buf->length);
-
-  // BUF_MEM_reserve with a smaller cap is a no-op.
-  size_t old_max = buf->max;
-  ASSERT_TRUE(BUF_MEM_reserve(buf.get(), 100));
-  EXPECT_EQ(old_max, buf->max);
-  EXPECT_EQ(0u, buf->length);
-
-  // BUF_MEM_grow can increase the length without reallocating.
-  ASSERT_EQ(100u, BUF_MEM_grow(buf.get(), 100));
-  EXPECT_EQ(100u, buf->length);
-  EXPECT_EQ(old_max, buf->max);
-  memset(buf->data, 'A', buf->length);
-
-  // If BUF_MEM_reserve reallocates, it preserves the contents.
-  ASSERT_TRUE(BUF_MEM_reserve(buf.get(), old_max + 1));
-  ASSERT_GE(buf->max, old_max + 1);
-  EXPECT_EQ(100u, buf->length);
-  for (size_t i = 0; i < 100; i++) {
-    EXPECT_EQ('A', buf->data[i]);
-  }
-
-  // BUF_MEM_grow should zero everything beyond buf->length.
-  memset(buf->data, 'B', buf->max);
-  ASSERT_EQ(150u, BUF_MEM_grow(buf.get(), 150));
-  EXPECT_EQ(150u, buf->length);
-  for (size_t i = 0; i < 100; i++) {
-    EXPECT_EQ('B', buf->data[i]);
-  }
-  for (size_t i = 100; i < 150; i++) {
-    EXPECT_EQ(0, buf->data[i]);
-  }
-
-  // BUF_MEM_grow can rellocate if necessary.
-  size_t new_len = buf->max + 1;
-  ASSERT_EQ(new_len, BUF_MEM_grow(buf.get(), new_len));
-  EXPECT_GE(buf->max, new_len);
-  EXPECT_EQ(new_len, buf->length);
-  for (size_t i = 0; i < 100; i++) {
-    EXPECT_EQ('B', buf->data[i]);
-  }
-  for (size_t i = 100; i < new_len; i++) {
-    EXPECT_EQ(0, buf->data[i]);
-  }
-
-  // BUF_MEM_grow can shink.
-  ASSERT_EQ(50u, BUF_MEM_grow(buf.get(), 50));
-  EXPECT_EQ(50u, buf->length);
-  for (size_t i = 0; i < 50; i++) {
-    EXPECT_EQ('B', buf->data[i]);
-  }
-}
-
-TEST(BufTest, Append) {
-  bssl::UniquePtr<BUF_MEM> buf(BUF_MEM_new());
-  ASSERT_TRUE(buf);
-
-  ASSERT_TRUE(BUF_MEM_append(buf.get(), nullptr, 0));
-  ASSERT_TRUE(BUF_MEM_append(buf.get(), "hello ", 6));
-  ASSERT_TRUE(BUF_MEM_append(buf.get(), nullptr, 0));
-  ASSERT_TRUE(BUF_MEM_append(buf.get(), "world", 5));
-  std::string str(128, 'A');
-  ASSERT_TRUE(BUF_MEM_append(buf.get(), str.data(), str.size()));
-
-  EXPECT_EQ("hello world" + str, std::string(buf->data, buf->length));
-}
diff --git a/src/crypto/bytestring/asn1_compat.cc b/src/crypto/bytestring/asn1_compat.cc
deleted file mode 100644
index 6c9770b..0000000
--- a/src/crypto/bytestring/asn1_compat.cc
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright 2016 The BoringSSL Authors
-//
-// 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
-//
-//     https://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 <openssl/bytestring.h>
-
-#include <assert.h>
-#include <limits.h>
-#include <string.h>
-
-#include <openssl/mem.h>
-
-#include "internal.h"
-#include "../internal.h"
-
-
-int CBB_finish_i2d(CBB *cbb, uint8_t **outp) {
-  assert(!cbb->is_child);
-  assert(cbb->u.base.can_resize);
-
-  uint8_t *der;
-  size_t der_len;
-  if (!CBB_finish(cbb, &der, &der_len)) {
-    CBB_cleanup(cbb);
-    return -1;
-  }
-  if (der_len > INT_MAX) {
-    OPENSSL_free(der);
-    return -1;
-  }
-  if (outp != NULL) {
-    if (*outp == NULL) {
-      *outp = der;
-      der = NULL;
-    } else {
-      OPENSSL_memcpy(*outp, der, der_len);
-      *outp += der_len;
-    }
-  }
-  OPENSSL_free(der);
-  return (int)der_len;
-}
diff --git a/src/crypto/bytestring/ber.cc b/src/crypto/bytestring/ber.cc
deleted file mode 100644
index 758bf0a..0000000
--- a/src/crypto/bytestring/ber.cc
+++ /dev/null
@@ -1,266 +0,0 @@
-// Copyright 2014 The BoringSSL Authors
-//
-// 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
-//
-//     https://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 <openssl/bytestring.h>
-
-#include <assert.h>
-#include <string.h>
-
-#include "internal.h"
-
-
-// kMaxDepth limits the recursion depth to avoid overflowing the stack.
-static const uint32_t kMaxDepth = 128;
-
-// is_string_type returns one if |tag| is a string type and zero otherwise. It
-// ignores the constructed bit.
-static int is_string_type(CBS_ASN1_TAG tag) {
-  // While BER supports constructed BIT STRINGS, OpenSSL misparses them. To
-  // avoid acting on an ambiguous input, we do not support constructed BIT
-  // STRINGS. See https://github.com/openssl/openssl/issues/12810.
-  switch (tag & ~CBS_ASN1_CONSTRUCTED) {
-    case CBS_ASN1_OCTETSTRING:
-    case CBS_ASN1_UTF8STRING:
-    case CBS_ASN1_NUMERICSTRING:
-    case CBS_ASN1_PRINTABLESTRING:
-    case CBS_ASN1_T61STRING:
-    case CBS_ASN1_VIDEOTEXSTRING:
-    case CBS_ASN1_IA5STRING:
-    case CBS_ASN1_GRAPHICSTRING:
-    case CBS_ASN1_VISIBLESTRING:
-    case CBS_ASN1_GENERALSTRING:
-    case CBS_ASN1_UNIVERSALSTRING:
-    case CBS_ASN1_BMPSTRING:
-      return 1;
-    default:
-      return 0;
-  }
-}
-
-// cbs_find_ber walks an ASN.1 structure in |orig_in| and sets |*ber_found|
-// depending on whether an indefinite length element or constructed string was
-// found. The value of |orig_in| is not changed. It returns one on success (i.e.
-// |*ber_found| was set) and zero on error.
-static int cbs_find_ber(const CBS *orig_in, int *ber_found, uint32_t depth) {
-  if (depth > kMaxDepth) {
-    return 0;
-  }
-
-  CBS in = *orig_in;
-  *ber_found = 0;
-
-  while (CBS_len(&in) > 0) {
-    CBS contents;
-    CBS_ASN1_TAG tag;
-    size_t header_len;
-    int indefinite;
-    if (!CBS_get_any_ber_asn1_element(&in, &contents, &tag, &header_len,
-                                      ber_found, &indefinite)) {
-      return 0;
-    }
-    if (*ber_found) {
-      return 1;
-    }
-    if (tag & CBS_ASN1_CONSTRUCTED) {
-      if (is_string_type(tag)) {
-        // Constructed strings are only legal in BER and require conversion.
-        *ber_found = 1;
-        return 1;
-      }
-      if (!CBS_skip(&contents, header_len) ||
-          !cbs_find_ber(&contents, ber_found, depth + 1)) {
-        return 0;
-      }
-      if (*ber_found) {
-        // We already found BER. No need to continue parsing.
-        return 1;
-      }
-    }
-  }
-
-  return 1;
-}
-
-// cbs_get_eoc returns one if |cbs| begins with an "end of contents" (EOC) value
-// and zero otherwise. If an EOC was found, it advances |cbs| past it.
-static int cbs_get_eoc(CBS *cbs) {
-  if (CBS_len(cbs) >= 2 &&
-      CBS_data(cbs)[0] == 0 && CBS_data(cbs)[1] == 0) {
-    return CBS_skip(cbs, 2);
-  }
-  return 0;
-}
-
-// cbs_convert_ber reads BER data from |in| and writes DER data to |out|. If
-// |string_tag| is non-zero, then all elements must match |string_tag| up to the
-// constructed bit and primitive element bodies are written to |out| without
-// element headers. This is used when concatenating the fragments of a
-// constructed string. If |looking_for_eoc| is set then any EOC elements found
-// will cause the function to return after consuming it. It returns one on
-// success and zero on error.
-static int cbs_convert_ber(CBS *in, CBB *out, CBS_ASN1_TAG string_tag,
-                           int looking_for_eoc, uint32_t depth) {
-  assert(!(string_tag & CBS_ASN1_CONSTRUCTED));
-
-  if (depth > kMaxDepth) {
-    return 0;
-  }
-
-  while (CBS_len(in) > 0) {
-    if (looking_for_eoc && cbs_get_eoc(in)) {
-      return 1;
-    }
-
-    CBS contents;
-    CBS_ASN1_TAG tag, child_string_tag = string_tag;
-    size_t header_len;
-    int indefinite;
-    CBB *out_contents, out_contents_storage;
-    if (!CBS_get_any_ber_asn1_element(in, &contents, &tag, &header_len,
-                                      /*out_ber_found=*/NULL, &indefinite)) {
-      return 0;
-    }
-
-    if (string_tag != 0) {
-      // This is part of a constructed string. All elements must match
-      // |string_tag| up to the constructed bit and get appended to |out|
-      // without a child element.
-      if ((tag & ~CBS_ASN1_CONSTRUCTED) != string_tag) {
-        return 0;
-      }
-      out_contents = out;
-    } else {
-      CBS_ASN1_TAG out_tag = tag;
-      if ((tag & CBS_ASN1_CONSTRUCTED) && is_string_type(tag)) {
-        // If a constructed string, clear the constructed bit and inform
-        // children to concatenate bodies.
-        out_tag &= ~CBS_ASN1_CONSTRUCTED;
-        child_string_tag = out_tag;
-      }
-      if (!CBB_add_asn1(out, &out_contents_storage, out_tag)) {
-        return 0;
-      }
-      out_contents = &out_contents_storage;
-    }
-
-    if (indefinite) {
-      if (!cbs_convert_ber(in, out_contents, child_string_tag,
-                           /*looking_for_eoc=*/1, depth + 1) ||
-          !CBB_flush(out)) {
-        return 0;
-      }
-      continue;
-    }
-
-    if (!CBS_skip(&contents, header_len)) {
-      return 0;
-    }
-
-    if (tag & CBS_ASN1_CONSTRUCTED) {
-      // Recurse into children.
-      if (!cbs_convert_ber(&contents, out_contents, child_string_tag,
-                           /*looking_for_eoc=*/0, depth + 1)) {
-        return 0;
-      }
-    } else {
-      // Copy primitive contents as-is.
-      if (!CBB_add_bytes(out_contents, CBS_data(&contents),
-                         CBS_len(&contents))) {
-        return 0;
-      }
-    }
-
-    if (!CBB_flush(out)) {
-      return 0;
-    }
-  }
-
-  return looking_for_eoc == 0;
-}
-
-int CBS_asn1_ber_to_der(CBS *in, CBS *out, uint8_t **out_storage) {
-  CBB cbb;
-
-  // First, do a quick walk to find any indefinite-length elements. Most of the
-  // time we hope that there aren't any and thus we can quickly return.
-  int conversion_needed;
-  if (!cbs_find_ber(in, &conversion_needed, 0)) {
-    return 0;
-  }
-
-  if (!conversion_needed) {
-    if (!CBS_get_any_asn1_element(in, out, NULL, NULL)) {
-      return 0;
-    }
-    *out_storage = NULL;
-    return 1;
-  }
-
-  size_t len;
-  if (!CBB_init(&cbb, CBS_len(in)) ||
-      !cbs_convert_ber(in, &cbb, 0, 0, 0) ||
-      !CBB_finish(&cbb, out_storage, &len)) {
-    CBB_cleanup(&cbb);
-    return 0;
-  }
-
-  CBS_init(out, *out_storage, len);
-  return 1;
-}
-
-int CBS_get_asn1_implicit_string(CBS *in, CBS *out, uint8_t **out_storage,
-                                 CBS_ASN1_TAG outer_tag,
-                                 CBS_ASN1_TAG inner_tag) {
-  assert(!(outer_tag & CBS_ASN1_CONSTRUCTED));
-  assert(!(inner_tag & CBS_ASN1_CONSTRUCTED));
-  assert(is_string_type(inner_tag));
-
-  if (CBS_peek_asn1_tag(in, outer_tag)) {
-    // Normal implicitly-tagged string.
-    *out_storage = NULL;
-    return CBS_get_asn1(in, out, outer_tag);
-  }
-
-  // Otherwise, try to parse an implicitly-tagged constructed string.
-  // |CBS_asn1_ber_to_der| is assumed to have run, so only allow one level deep
-  // of nesting.
-  CBB result;
-  CBS child;
-  if (!CBB_init(&result, CBS_len(in)) ||
-      !CBS_get_asn1(in, &child, outer_tag | CBS_ASN1_CONSTRUCTED)) {
-    goto err;
-  }
-
-  while (CBS_len(&child) > 0) {
-    CBS chunk;
-    if (!CBS_get_asn1(&child, &chunk, inner_tag) ||
-        !CBB_add_bytes(&result, CBS_data(&chunk), CBS_len(&chunk))) {
-      goto err;
-    }
-  }
-
-  uint8_t *data;
-  size_t len;
-  if (!CBB_finish(&result, &data, &len)) {
-    goto err;
-  }
-
-  CBS_init(out, data, len);
-  *out_storage = data;
-  return 1;
-
-err:
-  CBB_cleanup(&result);
-  return 0;
-}
diff --git a/src/crypto/bytestring/bytestring_test.cc b/src/crypto/bytestring/bytestring_test.cc
deleted file mode 100644
index c5fff11..0000000
--- a/src/crypto/bytestring/bytestring_test.cc
+++ /dev/null
@@ -1,1881 +0,0 @@
-// Copyright 2014 The BoringSSL Authors
-//
-// 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
-//
-//     https://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 <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <vector>
-
-#include <gtest/gtest.h>
-
-#include <openssl/bytestring.h>
-#include <openssl/crypto.h>
-#include <openssl/span.h>
-
-#include "../internal.h"
-#include "../test/test_util.h"
-#include "internal.h"
-
-
-namespace {
-
-TEST(CBSTest, Skip) {
-  static const uint8_t kData[] = {1, 2, 3};
-  CBS data;
-
-  CBS_init(&data, kData, sizeof(kData));
-  EXPECT_EQ(3u, CBS_len(&data));
-  EXPECT_TRUE(CBS_skip(&data, 1));
-  EXPECT_EQ(2u, CBS_len(&data));
-  EXPECT_TRUE(CBS_skip(&data, 2));
-  EXPECT_EQ(0u, CBS_len(&data));
-  EXPECT_FALSE(CBS_skip(&data, 1));
-}
-
-TEST(CBSTest, GetUint) {
-  static const uint8_t kData[] = {1,  2,  3,  4,  5,  6,  7,  8,  9,  10,
-                                  11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
-  uint8_t u8;
-  uint16_t u16;
-  uint32_t u32;
-  uint64_t u64;
-  CBS data;
-
-  CBS_init(&data, kData, sizeof(kData));
-  ASSERT_TRUE(CBS_get_u8(&data, &u8));
-  EXPECT_EQ(1u, u8);
-  ASSERT_TRUE(CBS_get_u16(&data, &u16));
-  EXPECT_EQ(0x203u, u16);
-  ASSERT_TRUE(CBS_get_u24(&data, &u32));
-  EXPECT_EQ(0x40506u, u32);
-  ASSERT_TRUE(CBS_get_u32(&data, &u32));
-  EXPECT_EQ(0x708090au, u32);
-  ASSERT_TRUE(CBS_get_u64(&data, &u64));
-  EXPECT_EQ(0xb0c0d0e0f101112u, u64);
-  ASSERT_TRUE(CBS_get_last_u8(&data, &u8));
-  EXPECT_EQ(0x14u, u8);
-  ASSERT_TRUE(CBS_get_last_u8(&data, &u8));
-  EXPECT_EQ(0x13u, u8);
-  EXPECT_FALSE(CBS_get_u8(&data, &u8));
-  EXPECT_FALSE(CBS_get_last_u8(&data, &u8));
-
-  CBS_init(&data, kData, sizeof(kData));
-  ASSERT_TRUE(CBS_get_u16le(&data, &u16));
-  EXPECT_EQ(0x0201u, u16);
-  ASSERT_TRUE(CBS_get_u32le(&data, &u32));
-  EXPECT_EQ(0x06050403u, u32);
-  ASSERT_TRUE(CBS_get_u64le(&data, &u64));
-  EXPECT_EQ(0x0e0d0c0b0a090807u, u64);
-}
-
-TEST(CBSTest, GetPrefixed) {
-  static const uint8_t kData[] = {1, 2, 0, 2, 3, 4, 0, 0, 3, 3, 2, 1};
-  uint8_t u8;
-  uint16_t u16;
-  uint32_t u32;
-  CBS data, prefixed;
-
-  CBS_init(&data, kData, sizeof(kData));
-  ASSERT_TRUE(CBS_get_u8_length_prefixed(&data, &prefixed));
-  EXPECT_EQ(1u, CBS_len(&prefixed));
-  ASSERT_TRUE(CBS_get_u8(&prefixed, &u8));
-  EXPECT_EQ(2u, u8);
-  ASSERT_TRUE(CBS_get_u16_length_prefixed(&data, &prefixed));
-  EXPECT_EQ(2u, CBS_len(&prefixed));
-  ASSERT_TRUE(CBS_get_u16(&prefixed, &u16));
-  EXPECT_EQ(0x304u, u16);
-  ASSERT_TRUE(CBS_get_u24_length_prefixed(&data, &prefixed));
-  EXPECT_EQ(3u, CBS_len(&prefixed));
-  ASSERT_TRUE(CBS_get_u24(&prefixed, &u32));
-  EXPECT_EQ(0x30201u, u32);
-}
-
-TEST(CBSTest, GetPrefixedBad) {
-  static const uint8_t kData1[] = {2, 1};
-  static const uint8_t kData2[] = {0, 2, 1};
-  static const uint8_t kData3[] = {0, 0, 2, 1};
-  CBS data, prefixed;
-
-  CBS_init(&data, kData1, sizeof(kData1));
-  EXPECT_FALSE(CBS_get_u8_length_prefixed(&data, &prefixed));
-
-  CBS_init(&data, kData2, sizeof(kData2));
-  EXPECT_FALSE(CBS_get_u16_length_prefixed(&data, &prefixed));
-
-  CBS_init(&data, kData3, sizeof(kData3));
-  EXPECT_FALSE(CBS_get_u24_length_prefixed(&data, &prefixed));
-}
-
-TEST(CBSTest, GetUntilFirst) {
-  static const uint8_t kData[] = {0, 1, 2, 3, 0, 1, 2, 3};
-  CBS data;
-  CBS_init(&data, kData, sizeof(kData));
-
-  CBS prefix;
-  EXPECT_FALSE(CBS_get_until_first(&data, &prefix, 4));
-  EXPECT_EQ(CBS_data(&data), kData);
-  EXPECT_EQ(CBS_len(&data), sizeof(kData));
-
-  ASSERT_TRUE(CBS_get_until_first(&data, &prefix, 0));
-  EXPECT_EQ(CBS_len(&prefix), 0u);
-  EXPECT_EQ(CBS_data(&data), kData);
-  EXPECT_EQ(CBS_len(&data), sizeof(kData));
-
-  ASSERT_TRUE(CBS_get_until_first(&data, &prefix, 2));
-  EXPECT_EQ(CBS_data(&prefix), kData);
-  EXPECT_EQ(CBS_len(&prefix), 2u);
-  EXPECT_EQ(CBS_data(&data), kData + 2);
-  EXPECT_EQ(CBS_len(&data), sizeof(kData) - 2);
-}
-
-TEST(CBSTest, GetASN1) {
-  static const uint8_t kData1[] = {0x30, 2, 1, 2};
-  static const uint8_t kData2[] = {0x30, 3, 1, 2};
-  static const uint8_t kData3[] = {0x30, 0x80};
-  static const uint8_t kData4[] = {0x30, 0x81, 1, 1};
-  static const uint8_t kData5[4 + 0x80] = {0x30, 0x82, 0, 0x80};
-  static const uint8_t kData6[] = {0xa1, 3, 0x4, 1, 1};
-  static const uint8_t kData7[] = {0xa1, 3, 0x4, 2, 1};
-  static const uint8_t kData8[] = {0xa1, 3, 0x2, 1, 1};
-  static const uint8_t kData9[] = {0xa1, 3, 0x2, 1, 0xff};
-
-  CBS data, contents;
-  int present;
-  uint64_t value;
-
-  CBS_init(&data, kData1, sizeof(kData1));
-  EXPECT_FALSE(CBS_peek_asn1_tag(&data, CBS_ASN1_BOOLEAN));
-  EXPECT_TRUE(CBS_peek_asn1_tag(&data, CBS_ASN1_SEQUENCE));
-
-  ASSERT_TRUE(CBS_get_asn1(&data, &contents, CBS_ASN1_SEQUENCE));
-  EXPECT_EQ(Bytes("\x01\x02"), Bytes(CBS_data(&contents), CBS_len(&contents)));
-
-  CBS_init(&data, kData2, sizeof(kData2));
-  // data is truncated
-  EXPECT_FALSE(CBS_get_asn1(&data, &contents, CBS_ASN1_SEQUENCE));
-
-  CBS_init(&data, kData3, sizeof(kData3));
-  // zero byte length of length
-  EXPECT_FALSE(CBS_get_asn1(&data, &contents, CBS_ASN1_SEQUENCE));
-
-  CBS_init(&data, kData4, sizeof(kData4));
-  // long form mistakenly used.
-  EXPECT_FALSE(CBS_get_asn1(&data, &contents, CBS_ASN1_SEQUENCE));
-
-  CBS_init(&data, kData5, sizeof(kData5));
-  // length takes too many bytes.
-  EXPECT_FALSE(CBS_get_asn1(&data, &contents, CBS_ASN1_SEQUENCE));
-
-  CBS_init(&data, kData1, sizeof(kData1));
-  // wrong tag.
-  EXPECT_FALSE(CBS_get_asn1(&data, &contents, 0x31));
-
-  CBS_init(&data, NULL, 0);
-  // peek at empty data.
-  EXPECT_FALSE(CBS_peek_asn1_tag(&data, CBS_ASN1_SEQUENCE));
-
-  CBS_init(&data, NULL, 0);
-  // optional elements at empty data.
-  ASSERT_TRUE(CBS_get_optional_asn1(
-      &data, &contents, &present,
-      CBS_ASN1_CONTEXT_SPECIFIC | CBS_ASN1_CONSTRUCTED | 0));
-  EXPECT_FALSE(present);
-  ASSERT_TRUE(CBS_get_optional_asn1_octet_string(
-      &data, &contents, &present,
-      CBS_ASN1_CONTEXT_SPECIFIC | CBS_ASN1_CONSTRUCTED | 0));
-  EXPECT_FALSE(present);
-  EXPECT_EQ(0u, CBS_len(&contents));
-  ASSERT_TRUE(CBS_get_optional_asn1_octet_string(
-      &data, &contents, NULL,
-      CBS_ASN1_CONTEXT_SPECIFIC | CBS_ASN1_CONSTRUCTED | 0));
-  EXPECT_EQ(0u, CBS_len(&contents));
-  ASSERT_TRUE(CBS_get_optional_asn1_uint64(
-      &data, &value, CBS_ASN1_CONTEXT_SPECIFIC | CBS_ASN1_CONSTRUCTED | 0, 42));
-  EXPECT_EQ(42u, value);
-
-  CBS_init(&data, kData6, sizeof(kData6));
-  // optional element.
-  ASSERT_TRUE(CBS_get_optional_asn1(
-      &data, &contents, &present,
-      CBS_ASN1_CONTEXT_SPECIFIC | CBS_ASN1_CONSTRUCTED | 0));
-  EXPECT_FALSE(present);
-  ASSERT_TRUE(CBS_get_optional_asn1(
-      &data, &contents, &present,
-      CBS_ASN1_CONTEXT_SPECIFIC | CBS_ASN1_CONSTRUCTED | 1));
-  EXPECT_TRUE(present);
-  EXPECT_EQ(Bytes("\x04\x01\x01"),
-            Bytes(CBS_data(&contents), CBS_len(&contents)));
-
-  CBS_init(&data, kData6, sizeof(kData6));
-  // optional octet string.
-  ASSERT_TRUE(CBS_get_optional_asn1_octet_string(
-      &data, &contents, &present,
-      CBS_ASN1_CONTEXT_SPECIFIC | CBS_ASN1_CONSTRUCTED | 0));
-  EXPECT_FALSE(present);
-  EXPECT_EQ(0u, CBS_len(&contents));
-  ASSERT_TRUE(CBS_get_optional_asn1_octet_string(
-      &data, &contents, &present,
-      CBS_ASN1_CONTEXT_SPECIFIC | CBS_ASN1_CONSTRUCTED | 1));
-  EXPECT_TRUE(present);
-  EXPECT_EQ(Bytes("\x01"), Bytes(CBS_data(&contents), CBS_len(&contents)));
-
-  CBS_init(&data, kData7, sizeof(kData7));
-  // invalid optional octet string.
-  EXPECT_FALSE(CBS_get_optional_asn1_octet_string(
-      &data, &contents, &present,
-      CBS_ASN1_CONTEXT_SPECIFIC | CBS_ASN1_CONSTRUCTED | 1));
-
-  CBS_init(&data, kData8, sizeof(kData8));
-  // optional integer.
-  ASSERT_TRUE(CBS_get_optional_asn1_uint64(
-      &data, &value, CBS_ASN1_CONTEXT_SPECIFIC | CBS_ASN1_CONSTRUCTED | 0, 42));
-  EXPECT_EQ(42u, value);
-  ASSERT_TRUE(CBS_get_optional_asn1_uint64(
-      &data, &value, CBS_ASN1_CONTEXT_SPECIFIC | CBS_ASN1_CONSTRUCTED | 1, 42));
-  EXPECT_EQ(1u, value);
-
-  CBS_init(&data, kData9, sizeof(kData9));
-  // invalid optional integer.
-  EXPECT_FALSE(CBS_get_optional_asn1_uint64(
-      &data, &value, CBS_ASN1_CONTEXT_SPECIFIC | CBS_ASN1_CONSTRUCTED | 1, 42));
-
-  CBS_ASN1_TAG tag;
-  CBS_init(&data, kData1, sizeof(kData1));
-  ASSERT_TRUE(CBS_get_any_asn1(&data, &contents, &tag));
-  EXPECT_EQ(CBS_ASN1_SEQUENCE, tag);
-  EXPECT_EQ(Bytes("\x01\x02"), Bytes(CBS_data(&contents), CBS_len(&contents)));
-
-  CBS_init(&data, kData1, sizeof(kData1));
-  // We should be able to ignore the contents and get the tag.
-  ASSERT_TRUE(CBS_get_any_asn1(&data, NULL, &tag));
-  EXPECT_EQ(CBS_ASN1_SEQUENCE, tag);
-  // We should be able to ignore the tag and get the contents.
-  CBS_init(&data, kData1, sizeof(kData1));
-  ASSERT_TRUE(CBS_get_any_asn1(&data, &contents, NULL));
-  EXPECT_EQ(Bytes("\x01\x02"), Bytes(CBS_data(&contents), CBS_len(&contents)));
-  // We should be able to ignore both the tag and contents.
-  CBS_init(&data, kData1, sizeof(kData1));
-  ASSERT_TRUE(CBS_get_any_asn1(&data, NULL, NULL));
-
-  size_t header_len;
-  CBS_init(&data, kData1, sizeof(kData1));
-  ASSERT_TRUE(CBS_get_any_asn1_element(&data, &contents, &tag, &header_len));
-  EXPECT_EQ(CBS_ASN1_SEQUENCE, tag);
-  EXPECT_EQ(2u, header_len);
-  EXPECT_EQ(Bytes("\x30\x02\x01\x02"),
-            Bytes(CBS_data(&contents), CBS_len(&contents)));
-}
-
-TEST(CBSTest, ParseASN1Tag) {
-  const struct {
-    bool ok;
-    CBS_ASN1_TAG tag;
-    std::vector<uint8_t> in;
-  } kTests[] = {
-      {true, CBS_ASN1_SEQUENCE, {0x30, 0}},
-      {true, CBS_ASN1_CONTEXT_SPECIFIC | CBS_ASN1_CONSTRUCTED | 4, {0xa4, 0}},
-      {true, CBS_ASN1_APPLICATION | 30, {0x5e, 0}},
-      {true, CBS_ASN1_APPLICATION | 31, {0x5f, 0x1f, 0}},
-      {true, CBS_ASN1_APPLICATION | 32, {0x5f, 0x20, 0}},
-      {true,
-       CBS_ASN1_PRIVATE | CBS_ASN1_CONSTRUCTED | 0x1fffffff,
-       {0xff, 0x81, 0xff, 0xff, 0xff, 0x7f, 0}},
-      // Tag number fits in |uint32_t| but not |CBS_ASN1_TAG_NUMBER_MASK|.
-      {false, 0, {0xff, 0x82, 0xff, 0xff, 0xff, 0x7f, 0}},
-      // Tag number does not fit in |uint32_t|.
-      {false, 0, {0xff, 0x90, 0x80, 0x80, 0x80, 0, 0}},
-      // Tag number is not minimally-encoded
-      {false, 0, {0x5f, 0x80, 0x1f, 0}},
-      // Tag number should have used short form.
-      {false, 0, {0x5f, 0x80, 0x1e, 0}},
-  };
-  for (const auto &t : kTests) {
-    SCOPED_TRACE(Bytes(t.in));
-    CBS_ASN1_TAG tag;
-    CBS cbs, child;
-    CBS_init(&cbs, t.in.data(), t.in.size());
-    ASSERT_EQ(t.ok, !!CBS_get_any_asn1(&cbs, &child, &tag));
-    if (t.ok) {
-      EXPECT_EQ(t.tag, tag);
-      EXPECT_EQ(0u, CBS_len(&child));
-      EXPECT_EQ(0u, CBS_len(&cbs));
-
-      CBS_init(&cbs, t.in.data(), t.in.size());
-      EXPECT_TRUE(CBS_peek_asn1_tag(&cbs, t.tag));
-      EXPECT_FALSE(CBS_peek_asn1_tag(&cbs, t.tag + 1));
-
-      EXPECT_TRUE(CBS_get_asn1(&cbs, &child, t.tag));
-      EXPECT_EQ(0u, CBS_len(&child));
-      EXPECT_EQ(0u, CBS_len(&cbs));
-
-      CBS_init(&cbs, t.in.data(), t.in.size());
-      EXPECT_FALSE(CBS_get_asn1(&cbs, &child, t.tag + 1));
-    }
-  }
-}
-
-TEST(CBSTest, GetOptionalASN1Bool) {
-  static const uint8_t kTrue[] = {0x0a, 3, CBS_ASN1_BOOLEAN, 1, 0xff};
-  static const uint8_t kFalse[] = {0x0a, 3, CBS_ASN1_BOOLEAN, 1, 0x00};
-  static const uint8_t kInvalid[] = {0x0a, 3, CBS_ASN1_BOOLEAN, 1, 0x01};
-
-  CBS data;
-  CBS_init(&data, NULL, 0);
-  int val = 2;
-  ASSERT_TRUE(CBS_get_optional_asn1_bool(&data, &val, 0x0a, 0));
-  EXPECT_EQ(0, val);
-
-  CBS_init(&data, kTrue, sizeof(kTrue));
-  val = 2;
-  ASSERT_TRUE(CBS_get_optional_asn1_bool(&data, &val, 0x0a, 0));
-  EXPECT_EQ(1, val);
-
-  CBS_init(&data, kFalse, sizeof(kFalse));
-  val = 2;
-  ASSERT_TRUE(CBS_get_optional_asn1_bool(&data, &val, 0x0a, 1));
-  EXPECT_EQ(0, val);
-
-  CBS_init(&data, kInvalid, sizeof(kInvalid));
-  EXPECT_FALSE(CBS_get_optional_asn1_bool(&data, &val, 0x0a, 1));
-}
-
-// Test that CBB_init may be used on an uninitialized input.
-TEST(CBBTest, InitUninitialized) {
-  CBB cbb;
-  ASSERT_TRUE(CBB_init(&cbb, 100));
-  CBB_cleanup(&cbb);
-}
-
-TEST(CBBTest, Basic) {
-  static const uint8_t kExpected[] = {
-      0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a,
-      0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14,
-      0x03, 0x02, 0x0a, 0x09, 0x08, 0x07, 0x12, 0x11, 0x10, 0x0f,
-      0x0e, 0x0d, 0x0c, 0x0b, 0x00, 0x00, 0x00, 0x00};
-  uint8_t *buf;
-  size_t buf_len;
-
-  bssl::ScopedCBB cbb;
-  ASSERT_TRUE(CBB_init(cbb.get(), 100));
-  cbb.Reset();
-
-  ASSERT_TRUE(CBB_init(cbb.get(), 0));
-  ASSERT_TRUE(CBB_add_zeros(cbb.get(), 0));
-  ASSERT_TRUE(CBB_add_u8(cbb.get(), 1));
-  ASSERT_TRUE(CBB_add_u16(cbb.get(), 0x203));
-  ASSERT_TRUE(CBB_add_u24(cbb.get(), 0x40506));
-  ASSERT_TRUE(CBB_add_u32(cbb.get(), 0x708090a));
-  ASSERT_TRUE(CBB_add_u64(cbb.get(), 0xb0c0d0e0f101112));
-  ASSERT_TRUE(CBB_add_bytes(cbb.get(), (const uint8_t *)"\x13\x14", 2));
-  ASSERT_TRUE(CBB_add_u16le(cbb.get(), 0x203));
-  ASSERT_TRUE(CBB_add_u32le(cbb.get(), 0x708090a));
-  ASSERT_TRUE(CBB_add_u64le(cbb.get(), 0xb0c0d0e0f101112));
-  ASSERT_TRUE(CBB_add_zeros(cbb.get(), 4));
-  ASSERT_TRUE(CBB_finish(cbb.get(), &buf, &buf_len));
-
-  bssl::UniquePtr<uint8_t> scoper(buf);
-  EXPECT_EQ(Bytes(kExpected), Bytes(buf, buf_len));
-}
-
-TEST(CBBTest, Fixed) {
-  CBB cbb;
-  uint8_t buf[1];
-  uint8_t *out_buf;
-  size_t out_size;
-
-  ASSERT_TRUE(CBB_init_fixed(&cbb, NULL, 0));
-  ASSERT_TRUE(CBB_finish(&cbb, &out_buf, &out_size));
-  EXPECT_EQ(NULL, out_buf);
-  EXPECT_EQ(0u, out_size);
-
-  ASSERT_TRUE(CBB_init_fixed(&cbb, buf, 1));
-  ASSERT_TRUE(CBB_add_u8(&cbb, 1));
-  ASSERT_TRUE(CBB_finish(&cbb, &out_buf, &out_size));
-  EXPECT_EQ(buf, out_buf);
-  EXPECT_EQ(1u, out_size);
-  EXPECT_EQ(1u, buf[0]);
-
-  ASSERT_TRUE(CBB_init_fixed(&cbb, buf, 1));
-  ASSERT_TRUE(CBB_add_u8(&cbb, 1));
-  EXPECT_FALSE(CBB_add_u8(&cbb, 2));
-  // We do not need |CBB_cleanup| or |bssl::ScopedCBB| here because a fixed
-  // |CBB| has no allocations. Leak-checking tools will confirm there was
-  // nothing to clean up.
-
-  // However, it should be harmless to call |CBB_cleanup|.
-  CBB cbb2;
-  ASSERT_TRUE(CBB_init_fixed(&cbb2, buf, 1));
-  ASSERT_TRUE(CBB_add_u8(&cbb2, 1));
-  EXPECT_FALSE(CBB_add_u8(&cbb2, 2));
-  CBB_cleanup(&cbb2);
-}
-
-// Test that calling CBB_finish on a child does nothing.
-TEST(CBBTest, FinishChild) {
-  CBB child;
-  uint8_t *out_buf;
-  size_t out_size;
-
-  bssl::ScopedCBB cbb;
-  ASSERT_TRUE(CBB_init(cbb.get(), 16));
-  ASSERT_TRUE(CBB_add_u8_length_prefixed(cbb.get(), &child));
-
-  EXPECT_FALSE(CBB_finish(&child, &out_buf, &out_size));
-
-  ASSERT_TRUE(CBB_finish(cbb.get(), &out_buf, &out_size));
-  bssl::UniquePtr<uint8_t> scoper(out_buf);
-  ASSERT_EQ(1u, out_size);
-  EXPECT_EQ(0u, out_buf[0]);
-}
-
-TEST(CBBTest, Prefixed) {
-  static const uint8_t kExpected[] = {0, 1, 1, 0, 2, 2, 3, 0, 0, 3,
-                                      4, 5, 6, 5, 4, 1, 0, 1, 2};
-  uint8_t *buf;
-  size_t buf_len;
-  bssl::ScopedCBB cbb;
-  CBB contents, inner_contents, inner_inner_contents;
-  ASSERT_TRUE(CBB_init(cbb.get(), 0));
-  EXPECT_EQ(0u, CBB_len(cbb.get()));
-  ASSERT_TRUE(CBB_add_u8_length_prefixed(cbb.get(), &contents));
-  ASSERT_TRUE(CBB_add_u8_length_prefixed(cbb.get(), &contents));
-  ASSERT_TRUE(CBB_add_u8(&contents, 1));
-  EXPECT_EQ(1u, CBB_len(&contents));
-  ASSERT_TRUE(CBB_flush(cbb.get()));
-  EXPECT_EQ(3u, CBB_len(cbb.get()));
-  ASSERT_TRUE(CBB_add_u16_length_prefixed(cbb.get(), &contents));
-  ASSERT_TRUE(CBB_add_u16(&contents, 0x203));
-  ASSERT_TRUE(CBB_add_u24_length_prefixed(cbb.get(), &contents));
-  ASSERT_TRUE(CBB_add_u24(&contents, 0x40506));
-  ASSERT_TRUE(CBB_add_u8_length_prefixed(cbb.get(), &contents));
-  ASSERT_TRUE(CBB_add_u8_length_prefixed(&contents, &inner_contents));
-  ASSERT_TRUE(CBB_add_u8(&inner_contents, 1));
-  ASSERT_TRUE(
-      CBB_add_u16_length_prefixed(&inner_contents, &inner_inner_contents));
-  ASSERT_TRUE(CBB_add_u8(&inner_inner_contents, 2));
-  ASSERT_TRUE(CBB_finish(cbb.get(), &buf, &buf_len));
-
-  bssl::UniquePtr<uint8_t> scoper(buf);
-  EXPECT_EQ(Bytes(kExpected), Bytes(buf, buf_len));
-}
-
-TEST(CBBTest, DiscardChild) {
-  bssl::ScopedCBB cbb;
-  CBB contents, inner_contents, inner_inner_contents;
-
-  ASSERT_TRUE(CBB_init(cbb.get(), 0));
-  ASSERT_TRUE(CBB_add_u8(cbb.get(), 0xaa));
-
-  // Discarding |cbb|'s children preserves the byte written.
-  CBB_discard_child(cbb.get());
-
-  ASSERT_TRUE(CBB_add_u8_length_prefixed(cbb.get(), &contents));
-  ASSERT_TRUE(CBB_add_u8_length_prefixed(cbb.get(), &contents));
-  ASSERT_TRUE(CBB_add_u8(&contents, 0xbb));
-  ASSERT_TRUE(CBB_add_u16_length_prefixed(cbb.get(), &contents));
-  ASSERT_TRUE(CBB_add_u16(&contents, 0xcccc));
-  ASSERT_TRUE(CBB_add_u24_length_prefixed(cbb.get(), &contents));
-  ASSERT_TRUE(CBB_add_u24(&contents, 0xdddddd));
-  ASSERT_TRUE(CBB_add_u8_length_prefixed(cbb.get(), &contents));
-  ASSERT_TRUE(CBB_add_u8(&contents, 0xff));
-  ASSERT_TRUE(CBB_add_u8_length_prefixed(&contents, &inner_contents));
-  ASSERT_TRUE(CBB_add_u8(&inner_contents, 0x42));
-  ASSERT_TRUE(
-      CBB_add_u16_length_prefixed(&inner_contents, &inner_inner_contents));
-  ASSERT_TRUE(CBB_add_u8(&inner_inner_contents, 0x99));
-
-  // Discard everything from |inner_contents| down.
-  CBB_discard_child(&contents);
-
-  uint8_t *buf;
-  size_t buf_len;
-  ASSERT_TRUE(CBB_finish(cbb.get(), &buf, &buf_len));
-  bssl::UniquePtr<uint8_t> scoper(buf);
-
-  static const uint8_t kExpected[] = {
-      // clang-format off
-      0xaa,
-      0,
-      1, 0xbb,
-      0, 2, 0xcc, 0xcc,
-      0, 0, 3, 0xdd, 0xdd, 0xdd,
-      1, 0xff,
-      // clang-format on
-  };
-  EXPECT_EQ(Bytes(kExpected), Bytes(buf, buf_len));
-}
-
-TEST(CBBTest, Misuse) {
-  bssl::ScopedCBB cbb;
-  CBB child, contents;
-  uint8_t *buf;
-  size_t buf_len;
-
-  ASSERT_TRUE(CBB_init(cbb.get(), 0));
-  ASSERT_TRUE(CBB_add_u8_length_prefixed(cbb.get(), &child));
-  ASSERT_TRUE(CBB_add_u8(&child, 1));
-  ASSERT_TRUE(CBB_add_u8(cbb.get(), 2));
-
-  // Since we wrote to |cbb|, |child| is now invalid and attempts to write to
-  // it should fail.
-  EXPECT_FALSE(CBB_add_u8(&child, 1));
-  EXPECT_FALSE(CBB_add_u16(&child, 1));
-  EXPECT_FALSE(CBB_add_u24(&child, 1));
-  EXPECT_FALSE(CBB_add_u8_length_prefixed(&child, &contents));
-  EXPECT_FALSE(CBB_add_u16_length_prefixed(&child, &contents));
-  EXPECT_FALSE(CBB_add_asn1(&child, &contents, 1));
-  EXPECT_FALSE(CBB_add_bytes(&child, (const uint8_t *)"a", 1));
-
-  ASSERT_TRUE(CBB_finish(cbb.get(), &buf, &buf_len));
-  bssl::UniquePtr<uint8_t> scoper(buf);
-
-  EXPECT_EQ(Bytes("\x01\x01\x02"), Bytes(buf, buf_len));
-}
-
-TEST(CBBTest, ASN1) {
-  static const uint8_t kExpected[] = {
-      // clang-format off
-      // SEQUENCE { 1 2 3 }
-      0x30, 3, 1, 2, 3,
-      // [4 CONSTRUCTED] { 4 5 6 }
-      0xa4, 3, 4, 5, 6,
-      // [APPLICATION 30 PRIMITIVE] { 7 8 9 }
-      0x5e, 3, 7, 8, 9,
-      // [APPLICATION 31 PRIMITIVE] { 10 11 12 }
-      0x5f, 0x1f, 3, 10, 11, 12,
-      // [PRIVATE 2^29-1 CONSTRUCTED] { 13 14 15 }
-      0xff, 0x81, 0xff, 0xff, 0xff, 0x7f, 3, 13, 14, 15,
-      // clang-format on
-  };
-  uint8_t *buf;
-  size_t buf_len;
-  bssl::ScopedCBB cbb;
-  CBB contents, inner_contents;
-
-  ASSERT_TRUE(CBB_init(cbb.get(), 0));
-  ASSERT_TRUE(CBB_add_asn1(cbb.get(), &contents, CBS_ASN1_SEQUENCE));
-  ASSERT_TRUE(CBB_add_bytes(&contents, (const uint8_t *)"\x01\x02\x03", 3));
-  ASSERT_TRUE(
-      CBB_add_asn1(cbb.get(), &contents,
-                   CBS_ASN1_CONTEXT_SPECIFIC | CBS_ASN1_CONSTRUCTED | 4));
-  ASSERT_TRUE(CBB_add_bytes(&contents, (const uint8_t *)"\x04\x05\x06", 3));
-  ASSERT_TRUE(CBB_add_asn1(cbb.get(), &contents, CBS_ASN1_APPLICATION | 30));
-  ASSERT_TRUE(CBB_add_bytes(&contents, (const uint8_t *)"\x07\x08\x09", 3));
-  ASSERT_TRUE(CBB_add_asn1(cbb.get(), &contents, CBS_ASN1_APPLICATION | 31));
-  ASSERT_TRUE(CBB_add_bytes(&contents, (const uint8_t *)"\x0a\x0b\x0c", 3));
-  ASSERT_TRUE(
-      CBB_add_asn1(cbb.get(), &contents,
-                   CBS_ASN1_PRIVATE | CBS_ASN1_CONSTRUCTED | 0x1fffffff));
-  ASSERT_TRUE(CBB_add_bytes(&contents, (const uint8_t *)"\x0d\x0e\x0f", 3));
-  ASSERT_TRUE(CBB_finish(cbb.get(), &buf, &buf_len));
-  bssl::UniquePtr<uint8_t> scoper(buf);
-
-  EXPECT_EQ(Bytes(kExpected), Bytes(buf, buf_len));
-
-  std::vector<uint8_t> test_data(100000, 0x42);
-  ASSERT_TRUE(CBB_init(cbb.get(), 0));
-  ASSERT_TRUE(CBB_add_asn1(cbb.get(), &contents, CBS_ASN1_SEQUENCE));
-  ASSERT_TRUE(CBB_add_bytes(&contents, test_data.data(), 130));
-  ASSERT_TRUE(CBB_finish(cbb.get(), &buf, &buf_len));
-  scoper.reset(buf);
-
-  ASSERT_EQ(3u + 130u, buf_len);
-  EXPECT_EQ(Bytes("\x30\x81\x82"), Bytes(buf, 3));
-  EXPECT_EQ(Bytes(test_data.data(), 130), Bytes(buf + 3, 130));
-
-  ASSERT_TRUE(CBB_init(cbb.get(), 0));
-  ASSERT_TRUE(CBB_add_asn1(cbb.get(), &contents, CBS_ASN1_SEQUENCE));
-  ASSERT_TRUE(CBB_add_bytes(&contents, test_data.data(), 1000));
-  ASSERT_TRUE(CBB_finish(cbb.get(), &buf, &buf_len));
-  scoper.reset(buf);
-
-  ASSERT_EQ(4u + 1000u, buf_len);
-  EXPECT_EQ(Bytes("\x30\x82\x03\xe8"), Bytes(buf, 4));
-  EXPECT_EQ(Bytes(test_data.data(), 1000), Bytes(buf + 4, 1000));
-
-  ASSERT_TRUE(CBB_init(cbb.get(), 0));
-  ASSERT_TRUE(CBB_add_asn1(cbb.get(), &contents, CBS_ASN1_SEQUENCE));
-  ASSERT_TRUE(CBB_add_asn1(&contents, &inner_contents, CBS_ASN1_SEQUENCE));
-  ASSERT_TRUE(CBB_add_bytes(&inner_contents, test_data.data(), 100000));
-  ASSERT_TRUE(CBB_finish(cbb.get(), &buf, &buf_len));
-  scoper.reset(buf);
-
-  ASSERT_EQ(5u + 5u + 100000u, buf_len);
-  EXPECT_EQ(Bytes("\x30\x83\x01\x86\xa5\x30\x83\x01\x86\xa0"), Bytes(buf, 10));
-  EXPECT_EQ(Bytes(test_data.data(), test_data.size()), Bytes(buf + 10, 100000));
-}
-
-static void ExpectBerConvert(const char *name,
-                             bssl::Span<const uint8_t> der_expected,
-                             bssl::Span<const uint8_t> ber) {
-  SCOPED_TRACE(name);
-  CBS in, out;
-  uint8_t *storage;
-
-  CBS_init(&in, ber.data(), ber.size());
-  ASSERT_TRUE(CBS_asn1_ber_to_der(&in, &out, &storage));
-  bssl::UniquePtr<uint8_t> scoper(storage);
-
-  EXPECT_EQ(Bytes(der_expected), Bytes(CBS_data(&out), CBS_len(&out)));
-  if (storage != nullptr) {
-    EXPECT_NE(Bytes(der_expected), Bytes(ber));
-  } else {
-    EXPECT_EQ(Bytes(der_expected), Bytes(ber));
-  }
-}
-
-TEST(CBSTest, BerConvert) {
-  static const uint8_t kSimpleBER[] = {0x01, 0x01, 0x00};
-
-  // kNonMinimalLengthBER has a non-minimally encoded length.
-  static const uint8_t kNonMinimalLengthBER[] = {0x02, 0x82, 0x00, 0x01, 0x01};
-  static const uint8_t kNonMinimalLengthDER[] = {0x02, 0x01, 0x01};
-
-  // kIndefBER contains a SEQUENCE with an indefinite length.
-  static const uint8_t kIndefBER[] = {0x30, 0x80, 0x01, 0x01, 0x02, 0x00, 0x00};
-  static const uint8_t kIndefDER[] = {0x30, 0x03, 0x01, 0x01, 0x02};
-
-  // kIndefBER2 contains a constructed [APPLICATION 31] with an indefinite
-  // length.
-  static const uint8_t kIndefBER2[] = {0x7f, 0x1f, 0x80, 0x01,
-                                       0x01, 0x02, 0x00, 0x00};
-  static const uint8_t kIndefDER2[] = {0x7f, 0x1f, 0x03, 0x01, 0x01, 0x02};
-
-  // kOctetStringBER contains an indefinite length OCTET STRING with two parts.
-  // These parts need to be concatenated in DER form.
-  static const uint8_t kOctetStringBER[] = {0x24, 0x80, 0x04, 0x02, 0,    1,
-                                            0x04, 0x02, 2,    3,    0x00, 0x00};
-  static const uint8_t kOctetStringDER[] = {0x04, 0x04, 0, 1, 2, 3};
-
-  // kNSSBER is part of a PKCS#12 message generated by NSS that uses indefinite
-  // length elements extensively.
-  static const uint8_t kNSSBER[] = {
-      0x30, 0x80, 0x02, 0x01, 0x03, 0x30, 0x80, 0x06, 0x09, 0x2a, 0x86, 0x48,
-      0x86, 0xf7, 0x0d, 0x01, 0x07, 0x01, 0xa0, 0x80, 0x24, 0x80, 0x04, 0x04,
-      0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x39,
-      0x30, 0x21, 0x30, 0x09, 0x06, 0x05, 0x2b, 0x0e, 0x03, 0x02, 0x1a, 0x05,
-      0x00, 0x04, 0x14, 0x84, 0x98, 0xfc, 0x66, 0x33, 0xee, 0xba, 0xe7, 0x90,
-      0xc1, 0xb6, 0xe8, 0x8f, 0xfe, 0x1d, 0xc5, 0xa5, 0x97, 0x93, 0x3e, 0x04,
-      0x10, 0x38, 0x62, 0xc6, 0x44, 0x12, 0xd5, 0x30, 0x00, 0xf8, 0xf2, 0x1b,
-      0xf0, 0x6e, 0x10, 0x9b, 0xb8, 0x02, 0x02, 0x07, 0xd0, 0x00, 0x00,
-  };
-
-  static const uint8_t kNSSDER[] = {
-      0x30, 0x53, 0x02, 0x01, 0x03, 0x30, 0x13, 0x06, 0x09, 0x2a, 0x86,
-      0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x01, 0xa0, 0x06, 0x04, 0x04,
-      0x01, 0x02, 0x03, 0x04, 0x30, 0x39, 0x30, 0x21, 0x30, 0x09, 0x06,
-      0x05, 0x2b, 0x0e, 0x03, 0x02, 0x1a, 0x05, 0x00, 0x04, 0x14, 0x84,
-      0x98, 0xfc, 0x66, 0x33, 0xee, 0xba, 0xe7, 0x90, 0xc1, 0xb6, 0xe8,
-      0x8f, 0xfe, 0x1d, 0xc5, 0xa5, 0x97, 0x93, 0x3e, 0x04, 0x10, 0x38,
-      0x62, 0xc6, 0x44, 0x12, 0xd5, 0x30, 0x00, 0xf8, 0xf2, 0x1b, 0xf0,
-      0x6e, 0x10, 0x9b, 0xb8, 0x02, 0x02, 0x07, 0xd0,
-  };
-
-  // kConstructedStringBER contains a deeply-nested constructed OCTET STRING.
-  // The BER conversion collapses this to one level deep, but not completely.
-  static const uint8_t kConstructedStringBER[] = {
-      0xa0, 0x10, 0x24, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01,
-      0x01, 0x24, 0x06, 0x04, 0x01, 0x02, 0x04, 0x01, 0x03,
-  };
-  static const uint8_t kConstructedStringDER[] = {
-      0xa0, 0x08, 0x04, 0x02, 0x00, 0x01, 0x04, 0x02, 0x02, 0x03,
-  };
-
-  // kWrappedIndefBER contains indefinite-length SEQUENCE, wrapped
-  // and followed by valid DER. This tests that we correctly identify BER nested
-  // inside DER.
-  //
-  //  SEQUENCE {
-  //    SEQUENCE {
-  //      SEQUENCE indefinite {}
-  //    }
-  //    SEQUENCE {}
-  //  }
-  static const uint8_t kWrappedIndefBER[] = {0x30, 0x08, 0x30, 0x04, 0x30,
-                                             0x80, 0x00, 0x00, 0x30, 0x00};
-  static const uint8_t kWrappedIndefDER[] = {0x30, 0x06, 0x30, 0x02,
-                                             0x30, 0x00, 0x30, 0x00};
-
-  // kWrappedConstructedStringBER contains a constructed OCTET STRING, wrapped
-  // and followed by valid DER. This tests that we correctly identify BER nested
-  // inside DER.
-  //
-  //  SEQUENCE {
-  //    SEQUENCE {
-  //      [OCTET_STRING CONSTRUCTED] {
-  //        OCTET_STRING {}
-  //      }
-  //    }
-  //    SEQUENCE {}
-  //  }
-  static const uint8_t kWrappedConstructedStringBER[] = {
-      0x30, 0x08, 0x30, 0x04, 0x24, 0x02, 0x04, 0x00, 0x30, 0x00};
-  static const uint8_t kWrappedConstructedStringDER[] = {
-      0x30, 0x06, 0x30, 0x02, 0x04, 0x00, 0x30, 0x00};
-
-  // kConstructedBitString contains a BER constructed BIT STRING. These are not
-  // supported and thus are left unchanged.
-  static const uint8_t kConstructedBitStringBER[] = {
-      0x23, 0x0a, 0x03, 0x03, 0x00, 0x12, 0x34, 0x03, 0x03, 0x00, 0x56, 0x78};
-
-  ExpectBerConvert("kSimpleBER", kSimpleBER, kSimpleBER);
-  ExpectBerConvert("kNonMinimalLengthBER", kNonMinimalLengthDER,
-                   kNonMinimalLengthBER);
-  ExpectBerConvert("kIndefBER", kIndefDER, kIndefBER);
-  ExpectBerConvert("kIndefBER2", kIndefDER2, kIndefBER2);
-  ExpectBerConvert("kOctetStringBER", kOctetStringDER, kOctetStringBER);
-  ExpectBerConvert("kNSSBER", kNSSDER, kNSSBER);
-  ExpectBerConvert("kConstructedStringBER", kConstructedStringDER,
-                   kConstructedStringBER);
-  ExpectBerConvert("kConstructedBitStringBER", kConstructedBitStringBER,
-                   kConstructedBitStringBER);
-  ExpectBerConvert("kWrappedIndefBER", kWrappedIndefDER, kWrappedIndefBER);
-  ExpectBerConvert("kWrappedConstructedStringBER", kWrappedConstructedStringDER,
-                   kWrappedConstructedStringBER);
-
-  // indef_overflow is 200 levels deep of an indefinite-length-encoded SEQUENCE.
-  // This will exceed our recursion limits and fail to be converted.
-  std::vector<uint8_t> indef_overflow;
-  for (int i = 0; i < 200; i++) {
-    indef_overflow.push_back(0x30);
-    indef_overflow.push_back(0x80);
-  }
-  for (int i = 0; i < 200; i++) {
-    indef_overflow.push_back(0x00);
-    indef_overflow.push_back(0x00);
-  }
-  CBS in, out;
-  CBS_init(&in, indef_overflow.data(), indef_overflow.size());
-  uint8_t *storage;
-  ASSERT_FALSE(CBS_asn1_ber_to_der(&in, &out, &storage));
-}
-
-struct BERTest {
-  const char *in_hex;
-  bool ok;
-  bool ber_found;
-  bool indefinite;
-  CBS_ASN1_TAG tag;
-};
-
-static const BERTest kBERTests[] = {
-    // Trivial cases, also valid DER.
-    {"0100", true, false, false, 1},
-    {"020101", true, false, false, 2},
-
-    // Non-minimally encoded lengths.
-    {"02810101", true, true, false, 2},
-    {"0282000101", true, true, false, 2},
-    {"028300000101", true, true, false, 2},
-    {"02840000000101", true, true, false, 2},
-    // Technically valid BER, but not handled.
-    {"02850000000101", false, false, false, 0},
-
-    // Indefinite length, but not constructed.
-    {"0280", false, false, false, 0},
-    // Indefinite length.
-    {"2280", true, true, true, CBS_ASN1_CONSTRUCTED | 2},
-    // Indefinite length with multi-byte tag.
-    {"bf1f80", true, true, true,
-     CBS_ASN1_CONSTRUCTED | CBS_ASN1_CONTEXT_SPECIFIC | 31},
-    // Invalid extended tag zero (X.690 8.1.2.4.2.c)
-    {"3f0000", false, false, false, 0},
-    // Should be a low-number tag form, even in BER.
-    {"1f0100", false, false, false, 0},
-    {"1f4000", true, false, false, 0x40},
-    // Non-minimal tags are invalid, even in BER.
-    {"1f804000", false, false, false, 0},
-
-    // EOCs and other forms of tag [UNIVERSAL 0] are rejected as elements.
-    {"0000", false, false, false, 0},
-    {"000100", false, false, false, 0},
-    {"00800000", false, false, false, 0},
-    {"2000", false, false, false, 0},
-};
-
-TEST(CBSTest, BERElementTest) {
-  for (const auto &test : kBERTests) {
-    SCOPED_TRACE(test.in_hex);
-
-    std::vector<uint8_t> in_bytes;
-    ASSERT_TRUE(DecodeHex(&in_bytes, test.in_hex));
-    CBS in(in_bytes);
-    CBS out;
-    CBS_ASN1_TAG tag;
-    size_t header_len;
-    int ber_found;
-    int indefinite;
-    int ok = CBS_get_any_ber_asn1_element(&in, &out, &tag, &header_len,
-                                          &ber_found, &indefinite);
-    ASSERT_TRUE((ok == 1) == test.ok);
-    if (!test.ok) {
-      continue;
-    }
-
-    EXPECT_EQ(test.ber_found ? 1 : 0, ber_found);
-    EXPECT_EQ(test.indefinite ? 1 : 0, indefinite);
-    EXPECT_LE(header_len, in_bytes.size());
-    EXPECT_EQ(CBS_len(&out), in_bytes.size());
-    EXPECT_EQ(CBS_len(&in), 0u);
-    EXPECT_EQ(Bytes(out), Bytes(in_bytes));
-    EXPECT_EQ(tag, test.tag);
-  }
-}
-
-struct ImplicitStringTest {
-  const char *in;
-  size_t in_len;
-  bool ok;
-  const char *out;
-  size_t out_len;
-};
-
-static const ImplicitStringTest kImplicitStringTests[] = {
-    // A properly-encoded string.
-    {"\x80\x03\x61\x61\x61", 5, true, "aaa", 3},
-    // An implicit-tagged string.
-    {"\xa0\x09\x04\x01\x61\x04\x01\x61\x04\x01\x61", 11, true, "aaa", 3},
-    // |CBS_get_asn1_implicit_string| only accepts one level deep of nesting.
-    {"\xa0\x0b\x24\x06\x04\x01\x61\x04\x01\x61\x04\x01\x61", 13, false, nullptr,
-     0},
-    // The outer tag must match.
-    {"\x81\x03\x61\x61\x61", 5, false, nullptr, 0},
-    {"\xa1\x09\x04\x01\x61\x04\x01\x61\x04\x01\x61", 11, false, nullptr, 0},
-    // The inner tag must match.
-    {"\xa1\x09\x0c\x01\x61\x0c\x01\x61\x0c\x01\x61", 11, false, nullptr, 0},
-};
-
-TEST(CBSTest, ImplicitString) {
-  for (const auto &test : kImplicitStringTests) {
-    SCOPED_TRACE(Bytes(test.in, test.in_len));
-    uint8_t *storage = nullptr;
-    CBS in, out;
-    CBS_init(&in, reinterpret_cast<const uint8_t *>(test.in), test.in_len);
-    int ok = CBS_get_asn1_implicit_string(&in, &out, &storage,
-                                          CBS_ASN1_CONTEXT_SPECIFIC | 0,
-                                          CBS_ASN1_OCTETSTRING);
-    bssl::UniquePtr<uint8_t> scoper(storage);
-    EXPECT_EQ(test.ok, static_cast<bool>(ok));
-
-    if (ok) {
-      EXPECT_EQ(Bytes(test.out, test.out_len),
-                Bytes(CBS_data(&out), CBS_len(&out)));
-    }
-  }
-}
-
-struct ASN1Uint64Test {
-  uint64_t value;
-  const char *encoding;
-  size_t encoding_len;
-};
-
-static const ASN1Uint64Test kASN1Uint64Tests[] = {
-    {0, "\x02\x01\x00", 3},
-    {1, "\x02\x01\x01", 3},
-    {127, "\x02\x01\x7f", 3},
-    {128, "\x02\x02\x00\x80", 4},
-    {0xdeadbeef, "\x02\x05\x00\xde\xad\xbe\xef", 7},
-    {UINT64_C(0x0102030405060708), "\x02\x08\x01\x02\x03\x04\x05\x06\x07\x08",
-     10},
-    {UINT64_C(0xffffffffffffffff),
-     "\x02\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff", 11},
-};
-
-struct ASN1InvalidUint64Test {
-  const char *encoding;
-  size_t encoding_len;
-  bool overflow;
-};
-
-static const ASN1InvalidUint64Test kASN1InvalidUint64Tests[] = {
-    // Bad tag.
-    {"\x03\x01\x00", 3, false},
-    // Empty contents.
-    {"\x02\x00", 2, false},
-    // Negative number.
-    {"\x02\x01\x80", 3, false},
-    // Overflow.
-    {"\x02\x09\x01\x00\x00\x00\x00\x00\x00\x00\x00", 11, true},
-    // Leading zeros.
-    {"\x02\x02\x00\x01", 4, false},
-};
-
-struct ASN1Uint64WithTagTest {
-  CBS_ASN1_TAG tag;
-  uint64_t value;
-  const char *encoding;
-  size_t encoding_len;
-};
-
-static const ASN1Uint64WithTagTest kASN1Uint64WithTagTests[]{
-    {CBS_ASN1_CONTEXT_SPECIFIC, 0, "\x80\x01\x00", 3},
-    {CBS_ASN1_CONTEXT_SPECIFIC | 1, 1, "\x81\x01\x01", 3},
-    {CBS_ASN1_INTEGER, 127, "\x02\x01\x7f", 3},
-    {CBS_ASN1_CONTEXT_SPECIFIC, 128, "\x80\x02\x00\x80", 4},
-    {CBS_ASN1_CONTEXT_SPECIFIC, UINT64_C(0x0102030405060708),
-     "\x80\x08\x01\x02\x03\x04\x05\x06\x07\x08", 10},
-    {CBS_ASN1_CONTEXT_SPECIFIC, (0xffffffffffffffff),
-     "\x80\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff", 11},
-};
-
-TEST(CBSTest, ASN1Uint64) {
-  for (const ASN1Uint64Test &test : kASN1Uint64Tests) {
-    SCOPED_TRACE(Bytes(test.encoding, test.encoding_len));
-    SCOPED_TRACE(test.value);
-    CBS cbs;
-    uint64_t value;
-    uint8_t *out;
-    size_t len;
-
-    CBS_init(&cbs, (const uint8_t *)test.encoding, test.encoding_len);
-    ASSERT_TRUE(CBS_get_asn1_uint64(&cbs, &value));
-    EXPECT_EQ(0u, CBS_len(&cbs));
-    EXPECT_EQ(test.value, value);
-
-    CBS child;
-    int is_negative;
-    CBS_init(&cbs, (const uint8_t *)test.encoding, test.encoding_len);
-    ASSERT_TRUE(CBS_get_asn1(&cbs, &child, CBS_ASN1_INTEGER));
-    EXPECT_TRUE(CBS_is_valid_asn1_integer(&child, &is_negative));
-    EXPECT_EQ(0, is_negative);
-    EXPECT_TRUE(CBS_is_unsigned_asn1_integer(&child));
-
-    {
-      bssl::ScopedCBB cbb;
-      ASSERT_TRUE(CBB_init(cbb.get(), 0));
-      ASSERT_TRUE(CBB_add_asn1_uint64(cbb.get(), test.value));
-      ASSERT_TRUE(CBB_finish(cbb.get(), &out, &len));
-      bssl::UniquePtr<uint8_t> scoper(out);
-      EXPECT_EQ(Bytes(test.encoding, test.encoding_len), Bytes(out, len));
-    }
-
-    {
-      // Overwrite the tag.
-      bssl::ScopedCBB cbb;
-      ASSERT_TRUE(CBB_init(cbb.get(), 0));
-      ASSERT_TRUE(CBB_add_asn1_uint64_with_tag(cbb.get(), test.value,
-                                               CBS_ASN1_CONTEXT_SPECIFIC | 1));
-      ASSERT_TRUE(CBB_finish(cbb.get(), &out, &len));
-      bssl::UniquePtr<uint8_t> scoper(out);
-      std::vector<uint8_t> expected(test.encoding,
-                                    test.encoding + test.encoding_len);
-      expected[0] = 0x81;
-      EXPECT_EQ(Bytes(expected), Bytes(out, len));
-    }
-  }
-
-  for (const ASN1InvalidUint64Test &test : kASN1InvalidUint64Tests) {
-    SCOPED_TRACE(Bytes(test.encoding, test.encoding_len));
-    CBS cbs;
-    uint64_t value;
-
-    CBS_init(&cbs, (const uint8_t *)test.encoding, test.encoding_len);
-    EXPECT_FALSE(CBS_get_asn1_uint64(&cbs, &value));
-
-    CBS_init(&cbs, (const uint8_t *)test.encoding, test.encoding_len);
-    CBS child;
-    if (CBS_get_asn1(&cbs, &child, CBS_ASN1_INTEGER)) {
-      EXPECT_EQ(test.overflow, !!CBS_is_unsigned_asn1_integer(&child));
-    }
-  }
-
-  for (const ASN1Uint64WithTagTest &test : kASN1Uint64WithTagTests) {
-    SCOPED_TRACE(Bytes(test.encoding, test.encoding_len));
-    SCOPED_TRACE(test.value);
-    CBS cbs;
-    uint64_t value;
-    uint8_t *out;
-    size_t len;
-
-    CBS_init(&cbs, (const uint8_t *)test.encoding, test.encoding_len);
-    ASSERT_TRUE(CBS_get_asn1_uint64_with_tag(&cbs, &value, test.tag));
-    EXPECT_EQ(0u, CBS_len(&cbs));
-    EXPECT_EQ(test.value, value);
-
-    CBS child;
-    int is_negative;
-    CBS_init(&cbs, (const uint8_t *)test.encoding, test.encoding_len);
-    ASSERT_TRUE(CBS_get_asn1(&cbs, &child, test.tag));
-    EXPECT_TRUE(CBS_is_valid_asn1_integer(&child, &is_negative));
-    EXPECT_EQ(0, is_negative);
-    EXPECT_TRUE(CBS_is_unsigned_asn1_integer(&child));
-
-    {
-      bssl::ScopedCBB cbb;
-      ASSERT_TRUE(CBB_init(cbb.get(), 0));
-      ASSERT_TRUE(CBB_add_asn1_uint64_with_tag(cbb.get(), test.value, test.tag));
-      ASSERT_TRUE(CBB_finish(cbb.get(), &out, &len));
-      bssl::UniquePtr<uint8_t> scoper(out);
-      EXPECT_EQ(Bytes(test.encoding, test.encoding_len), Bytes(out, len));
-    }
-  }
-}
-
-struct ASN1Int64Test {
-  int64_t value;
-  const char *encoding;
-  size_t encoding_len;
-};
-
-static const ASN1Int64Test kASN1Int64Tests[] = {
-    {0, "\x02\x01\x00", 3},
-    {1, "\x02\x01\x01", 3},
-    {-1, "\x02\x01\xff", 3},
-    {127, "\x02\x01\x7f", 3},
-    {-127, "\x02\x01\x81", 3},
-    {128, "\x02\x02\x00\x80", 4},
-    {-128, "\x02\x01\x80", 3},
-    {129, "\x02\x02\x00\x81", 4},
-    {-129, "\x02\x02\xff\x7f", 4},
-    {0xdeadbeef, "\x02\x05\x00\xde\xad\xbe\xef", 7},
-    {INT64_C(0x0102030405060708), "\x02\x08\x01\x02\x03\x04\x05\x06\x07\x08",
-     10},
-    {INT64_MIN, "\x02\x08\x80\x00\x00\x00\x00\x00\x00\x00", 10},
-    {INT64_MAX, "\x02\x08\x7f\xff\xff\xff\xff\xff\xff\xff", 10},
-};
-
-struct ASN1InvalidInt64Test {
-  const char *encoding;
-  size_t encoding_len;
-  bool overflow;
-};
-
-static const ASN1InvalidInt64Test kASN1InvalidInt64Tests[] = {
-    // Bad tag.
-    {"\x03\x01\x00", 3, false},
-    // Empty contents.
-    {"\x02\x00", 2, false},
-    // Overflow.
-    {"\x02\x09\x01\x00\x00\x00\x00\x00\x00\x00\x00", 11, true},
-    // Underflow.
-    {"\x02\x09\x08\xff\xff\xff\xff\xff\xff\xff\xff", 11, true},
-    // Leading zeros.
-    {"\x02\x02\x00\x01", 4, false},
-    // Leading 0xff.
-    {"\x02\x02\xff\xff", 4, false},
-};
-
-struct ASN1Int64WithTagTest {
-  CBS_ASN1_TAG tag;
-  int64_t value;
-  const char *encoding;
-  size_t encoding_len;
-};
-
-static const ASN1Int64WithTagTest kASN1Int64WithTagTests[] = {
-    {CBS_ASN1_CONTEXT_SPECIFIC, 0, "\x80\x01\x00", 3},
-    {CBS_ASN1_CONTEXT_SPECIFIC | 1, 1, "\x81\x01\x01", 3},
-    {CBS_ASN1_INTEGER, 1, "\x02\x01\x01", 3},
-    {CBS_ASN1_CONTEXT_SPECIFIC, INT64_MIN,
-     "\x80\x08\x80\x00\x00\x00\x00\x00\x00\x00", 10},
-    {CBS_ASN1_CONTEXT_SPECIFIC, INT64_MAX,
-     "\x80\x08\x7f\xff\xff\xff\xff\xff\xff\xff", 10},
-};
-
-
-TEST(CBSTest, ASN1Int64) {
-  for (const ASN1Int64Test &test : kASN1Int64Tests) {
-    SCOPED_TRACE(Bytes(test.encoding, test.encoding_len));
-    SCOPED_TRACE(test.value);
-    CBS cbs;
-    int64_t value;
-    uint8_t *out;
-    size_t len;
-
-    CBS_init(&cbs, (const uint8_t *)test.encoding, test.encoding_len);
-    ASSERT_TRUE(CBS_get_asn1_int64(&cbs, &value));
-    EXPECT_EQ(0u, CBS_len(&cbs));
-    EXPECT_EQ(test.value, value);
-
-    CBS child;
-    int is_negative;
-    CBS_init(&cbs, (const uint8_t *)test.encoding, test.encoding_len);
-    ASSERT_TRUE(CBS_get_asn1(&cbs, &child, CBS_ASN1_INTEGER));
-    EXPECT_TRUE(CBS_is_valid_asn1_integer(&child, &is_negative));
-    EXPECT_EQ(test.value < 0, !!is_negative);
-    EXPECT_EQ(test.value >= 0, !!CBS_is_unsigned_asn1_integer(&child));
-
-    {
-      bssl::ScopedCBB cbb;
-      ASSERT_TRUE(CBB_init(cbb.get(), 0));
-      ASSERT_TRUE(CBB_add_asn1_int64(cbb.get(), test.value));
-      ASSERT_TRUE(CBB_finish(cbb.get(), &out, &len));
-      bssl::UniquePtr<uint8_t> scoper(out);
-      EXPECT_EQ(Bytes(test.encoding, test.encoding_len), Bytes(out, len));
-    }
-
-    {
-      // Overwrite the tag.
-      bssl::ScopedCBB cbb;
-      ASSERT_TRUE(CBB_init(cbb.get(), 0));
-      ASSERT_TRUE(CBB_add_asn1_int64_with_tag(cbb.get(), test.value,
-                                              CBS_ASN1_CONTEXT_SPECIFIC | 1));
-      ASSERT_TRUE(CBB_finish(cbb.get(), &out, &len));
-      bssl::UniquePtr<uint8_t> scoper(out);
-      std::vector<uint8_t> expected(test.encoding,
-                                    test.encoding + test.encoding_len);
-      expected[0] = 0x81;
-      EXPECT_EQ(Bytes(expected), Bytes(out, len));
-    }
-  }
-
-  for (const ASN1InvalidInt64Test &test : kASN1InvalidInt64Tests) {
-    SCOPED_TRACE(Bytes(test.encoding, test.encoding_len));
-    CBS cbs;
-    int64_t value;
-
-    CBS_init(&cbs, (const uint8_t *)test.encoding, test.encoding_len);
-    EXPECT_FALSE(CBS_get_asn1_int64(&cbs, &value));
-
-    CBS_init(&cbs, (const uint8_t *)test.encoding, test.encoding_len);
-    CBS child;
-    if (CBS_get_asn1(&cbs, &child, CBS_ASN1_INTEGER)) {
-      EXPECT_EQ(test.overflow, !!CBS_is_valid_asn1_integer(&child, NULL));
-    }
-  }
-
-  for (const ASN1Int64WithTagTest &test : kASN1Int64WithTagTests) {
-    SCOPED_TRACE(Bytes(test.encoding, test.encoding_len));
-    SCOPED_TRACE(test.value);
-    CBS cbs;
-    int64_t value;
-    uint8_t *out;
-    size_t len;
-
-    CBS_init(&cbs, (const uint8_t *)test.encoding, test.encoding_len);
-    ASSERT_TRUE(CBS_get_asn1_int64_with_tag(&cbs, &value, test.tag));
-    EXPECT_EQ(0u, CBS_len(&cbs));
-    EXPECT_EQ(test.value, value);
-
-    CBS child;
-    int is_negative;
-    CBS_init(&cbs, (const uint8_t *)test.encoding, test.encoding_len);
-    ASSERT_TRUE(CBS_get_asn1(&cbs, &child, test.tag));
-    EXPECT_TRUE(CBS_is_valid_asn1_integer(&child, &is_negative));
-    EXPECT_EQ(test.value < 0, !!is_negative);
-    EXPECT_EQ(test.value >= 0, !!CBS_is_unsigned_asn1_integer(&child));
-
-    {
-      bssl::ScopedCBB cbb;
-      ASSERT_TRUE(CBB_init(cbb.get(), 0));
-      ASSERT_TRUE(CBB_add_asn1_int64_with_tag(cbb.get(), test.value, test.tag));
-      ASSERT_TRUE(CBB_finish(cbb.get(), &out, &len));
-      bssl::UniquePtr<uint8_t> scoper(out);
-      EXPECT_EQ(Bytes(test.encoding, test.encoding_len), Bytes(out, len));
-    }
-  }
-}
-
-TEST(CBBTest, Zero) {
-  CBB cbb;
-  CBB_zero(&cbb);
-  // Calling |CBB_cleanup| on a zero-state |CBB| must not crash.
-  CBB_cleanup(&cbb);
-}
-
-TEST(CBBTest, Reserve) {
-  uint8_t buf[10];
-  uint8_t *ptr;
-  size_t len;
-  bssl::ScopedCBB cbb;
-  ASSERT_TRUE(CBB_init_fixed(cbb.get(), buf, sizeof(buf)));
-  // Too large.
-  EXPECT_FALSE(CBB_reserve(cbb.get(), &ptr, 11));
-
-  cbb.Reset();
-  ASSERT_TRUE(CBB_init_fixed(cbb.get(), buf, sizeof(buf)));
-  // Successfully reserve the entire space.
-  ASSERT_TRUE(CBB_reserve(cbb.get(), &ptr, 10));
-  EXPECT_EQ(buf, ptr);
-  // Advancing under the maximum bytes is legal.
-  ASSERT_TRUE(CBB_did_write(cbb.get(), 5));
-  ASSERT_TRUE(CBB_finish(cbb.get(), NULL, &len));
-  EXPECT_EQ(5u, len);
-}
-
-// Test that CBB errors are sticky; once on operation on CBB fails, all
-// subsequent ones do.
-TEST(CBBTest, StickyError) {
-  // Write an input that exceeds the limit for its length prefix.
-  bssl::ScopedCBB cbb;
-  CBB child;
-  static const uint8_t kZeros[256] = {0};
-  ASSERT_TRUE(CBB_init(cbb.get(), 0));
-  ASSERT_TRUE(CBB_add_u8_length_prefixed(cbb.get(), &child));
-  ASSERT_TRUE(CBB_add_bytes(&child, kZeros, sizeof(kZeros)));
-  ASSERT_FALSE(CBB_flush(cbb.get()));
-
-  // All future operations should fail.
-  uint8_t *ptr;
-  size_t len;
-  EXPECT_FALSE(CBB_add_u8(cbb.get(), 0));
-  EXPECT_FALSE(CBB_finish(cbb.get(), &ptr, &len));
-
-  // Write an input that cannot fit in a fixed CBB.
-  cbb.Reset();
-  uint8_t buf;
-  ASSERT_TRUE(CBB_init_fixed(cbb.get(), &buf, 1));
-  ASSERT_FALSE(CBB_add_bytes(cbb.get(), kZeros, sizeof(kZeros)));
-
-  // All future operations should fail.
-  EXPECT_FALSE(CBB_add_u8(cbb.get(), 0));
-  EXPECT_FALSE(CBB_finish(cbb.get(), &ptr, &len));
-
-  // Write a u32 that cannot fit in a u24.
-  cbb.Reset();
-  ASSERT_TRUE(CBB_init(cbb.get(), 0));
-  ASSERT_FALSE(CBB_add_u24(cbb.get(), 1u << 24));
-
-  // All future operations should fail.
-  EXPECT_FALSE(CBB_add_u8(cbb.get(), 0));
-  EXPECT_FALSE(CBB_finish(cbb.get(), &ptr, &len));
-}
-
-TEST(CBSTest, BitString) {
-  static const std::vector<uint8_t> kValidBitStrings[] = {
-      {0x00},                                      // 0 bits
-      {0x07, 0x80},                                // 1 bit
-      {0x04, 0xf0},                                // 4 bits
-      {0x00, 0xff},                                // 8 bits
-      {0x06, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0},  // 42 bits
-  };
-  for (const auto &test : kValidBitStrings) {
-    SCOPED_TRACE(Bytes(test.data(), test.size()));
-    CBS cbs;
-    CBS_init(&cbs, test.data(), test.size());
-    EXPECT_TRUE(CBS_is_valid_asn1_bitstring(&cbs));
-  }
-
-  static const std::vector<uint8_t> kInvalidBitStrings[] = {
-      // BIT STRINGs always have a leading byte.
-      std::vector<uint8_t>{},
-      // It's not possible to take an unused bit off the empty string.
-      {0x01},
-      // There can be at most 7 unused bits.
-      {0x08, 0xff},
-      {0xff, 0xff},
-      // All unused bits must be cleared.
-      {0x06, 0xff, 0xc1},
-  };
-  for (const auto &test : kInvalidBitStrings) {
-    SCOPED_TRACE(Bytes(test.data(), test.size()));
-    CBS cbs;
-    CBS_init(&cbs, test.data(), test.size());
-    EXPECT_FALSE(CBS_is_valid_asn1_bitstring(&cbs));
-
-    // CBS_asn1_bitstring_has_bit returns false on invalid inputs.
-    EXPECT_FALSE(CBS_asn1_bitstring_has_bit(&cbs, 0));
-  }
-
-  static const struct {
-    std::vector<uint8_t> in;
-    unsigned bit;
-    bool bit_set;
-  } kBitTests[] = {
-      // Basic tests.
-      {{0x00}, 0, false},
-      {{0x07, 0x80}, 0, true},
-      {{0x06, 0x0f, 0x40}, 0, false},
-      {{0x06, 0x0f, 0x40}, 1, false},
-      {{0x06, 0x0f, 0x40}, 2, false},
-      {{0x06, 0x0f, 0x40}, 3, false},
-      {{0x06, 0x0f, 0x40}, 4, true},
-      {{0x06, 0x0f, 0x40}, 5, true},
-      {{0x06, 0x0f, 0x40}, 6, true},
-      {{0x06, 0x0f, 0x40}, 7, true},
-      {{0x06, 0x0f, 0x40}, 8, false},
-      {{0x06, 0x0f, 0x40}, 9, true},
-      // Out-of-bounds bits return 0.
-      {{0x06, 0x0f, 0x40}, 10, false},
-      {{0x06, 0x0f, 0x40}, 15, false},
-      {{0x06, 0x0f, 0x40}, 16, false},
-      {{0x06, 0x0f, 0x40}, 1000, false},
-  };
-  for (const auto &test : kBitTests) {
-    SCOPED_TRACE(Bytes(test.in.data(), test.in.size()));
-    SCOPED_TRACE(test.bit);
-    CBS cbs;
-    CBS_init(&cbs, test.in.data(), test.in.size());
-    EXPECT_EQ(static_cast<int>(test.bit_set),
-              CBS_asn1_bitstring_has_bit(&cbs, test.bit));
-  }
-}
-
-TEST(CBBTest, AddOIDFromText) {
-  const struct {
-    const char *text;
-    std::vector<uint8_t> der;
-  } kValidOIDs[] = {
-      // Some valid values.
-      {"0.0", {0x00}},
-      {"0.2.3.4", {0x2, 0x3, 0x4}},
-      {"1.2.3.4", {0x2a, 0x3, 0x4}},
-      {"2.2.3.4", {0x52, 0x3, 0x4}},
-      {"1.2.840.113554.4.1.72585",
-       {0x2a, 0x86, 0x48, 0x86, 0xf7, 0x12, 0x04, 0x01, 0x84, 0xb7, 0x09}},
-      // Test edge cases around the first component.
-      {"0.39", {0x27}},
-      {"1.0", {0x28}},
-      {"1.39", {0x4f}},
-      {"2.0", {0x50}},
-      {"2.1", {0x51}},
-      {"2.40", {0x78}},
-      // Edge cases near an overflow.
-      {"1.2.18446744073709551615",
-       {0x2a, 0x81, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f}},
-      {"2.18446744073709551535",
-       {0x81, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f}},
-  };
-
-  const char *kInvalidTexts[] = {
-      // Invalid second component.
-      "0.40",
-      "1.40",
-      // Invalid first component.
-      "3.1",
-      // The empty string is not an OID.
-      "",
-      // No empty components.
-      ".1.2.3.4.5",
-      "1..2.3.4.5",
-      "1.2.3.4.5.",
-      // There must be at least two components.
-      "1",
-      // No extra leading zeros.
-      "00.1.2.3.4",
-      "01.1.2.3.4",
-      // Overflow for both components or 40*A + B.
-      "1.2.18446744073709551616",
-      "2.18446744073709551536",
-  };
-
-  const struct {
-    std::vector<uint8_t> der;
-    // If true, |der| is valid but has a component that exceeds 2^64-1.
-    bool overflow;
-  } kInvalidDER[] = {
-      // The empty string is not an OID.
-      {{}, false},
-      // Non-minimal representation.
-      {{0x80, 0x01}, false},
-      // Unterminated integer.
-      {{0x01, 0x02, 0x83}, false},
-      // Overflow. This is the DER representation of
-      // 1.2.840.113554.4.1.72585.18446744073709551616. (The final value is
-      // 2^64.)
-      {{0x2a, 0x86, 0x48, 0x86, 0xf7, 0x12, 0x04, 0x01, 0x84, 0xb7, 0x09,
-        0x82, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00},
-       true},
-  };
-
-  for (const auto &t : kValidOIDs) {
-    SCOPED_TRACE(t.text);
-
-    bssl::ScopedCBB cbb;
-    ASSERT_TRUE(CBB_init(cbb.get(), 0));
-    ASSERT_TRUE(CBB_add_asn1_oid_from_text(cbb.get(), t.text, strlen(t.text)));
-    uint8_t *out;
-    size_t len;
-    ASSERT_TRUE(CBB_finish(cbb.get(), &out, &len));
-    bssl::UniquePtr<uint8_t> free_out(out);
-    EXPECT_EQ(Bytes(t.der), Bytes(out, len));
-
-    CBS cbs;
-    CBS_init(&cbs, t.der.data(), t.der.size());
-    bssl::UniquePtr<char> text(CBS_asn1_oid_to_text(&cbs));
-    ASSERT_TRUE(text.get());
-    EXPECT_STREQ(t.text, text.get());
-
-    EXPECT_TRUE(CBS_is_valid_asn1_oid(&cbs));
-  }
-
-  for (const char *t : kInvalidTexts) {
-    SCOPED_TRACE(t);
-    bssl::ScopedCBB cbb;
-    ASSERT_TRUE(CBB_init(cbb.get(), 0));
-    EXPECT_FALSE(CBB_add_asn1_oid_from_text(cbb.get(), t, strlen(t)));
-  }
-
-  for (const auto &t : kInvalidDER) {
-    SCOPED_TRACE(Bytes(t.der));
-    CBS cbs;
-    CBS_init(&cbs, t.der.data(), t.der.size());
-    bssl::UniquePtr<char> text(CBS_asn1_oid_to_text(&cbs));
-    EXPECT_FALSE(text);
-    EXPECT_EQ(t.overflow ? 1 : 0, CBS_is_valid_asn1_oid(&cbs));
-  }
-}
-
-TEST(CBBTest, FlushASN1SetOf) {
-  const struct {
-    std::vector<uint8_t> in, out;
-  } kValidInputs[] = {
-      // No elements.
-      {{}, {}},
-      // One element.
-      {{0x30, 0x00}, {0x30, 0x00}},
-      // Two identical elements.
-      {{0x30, 0x00, 0x30, 0x00}, {0x30, 0x00, 0x30, 0x00}},
-      // clang-format off
-    {{0x30, 0x02, 0x00, 0x00,
-      0x30, 0x00,
-      0x01, 0x00,
-      0x30, 0x02, 0x00, 0x00,
-      0x30, 0x03, 0x00, 0x00, 0x00,
-      0x30, 0x00,
-      0x30, 0x03, 0x00, 0x00, 0x01,
-      0x30, 0x01, 0x00,
-      0x01, 0x01, 0x00},
-     {0x01, 0x00,
-      0x01, 0x01, 0x00,
-      0x30, 0x00,
-      0x30, 0x00,
-      0x30, 0x01, 0x00,
-      0x30, 0x02, 0x00, 0x00,
-      0x30, 0x02, 0x00, 0x00,
-      0x30, 0x03, 0x00, 0x00, 0x00,
-      0x30, 0x03, 0x00, 0x00, 0x01}},
-      // clang-format on
-  };
-
-  for (const auto &t : kValidInputs) {
-    SCOPED_TRACE(Bytes(t.in));
-
-    bssl::ScopedCBB cbb;
-    CBB child;
-    ASSERT_TRUE(CBB_init(cbb.get(), 0));
-    ASSERT_TRUE(CBB_add_asn1(cbb.get(), &child, CBS_ASN1_SET));
-    ASSERT_TRUE(CBB_add_bytes(&child, t.in.data(), t.in.size()));
-    ASSERT_TRUE(CBB_flush_asn1_set_of(&child));
-    EXPECT_EQ(Bytes(t.out), Bytes(CBB_data(&child), CBB_len(&child)));
-
-    // Running it again should be idempotent.
-    ASSERT_TRUE(CBB_flush_asn1_set_of(&child));
-    EXPECT_EQ(Bytes(t.out), Bytes(CBB_data(&child), CBB_len(&child)));
-
-    // The ASN.1 header remain intact.
-    ASSERT_TRUE(CBB_flush(cbb.get()));
-    EXPECT_EQ(0x31, CBB_data(cbb.get())[0]);
-  }
-
-  const std::vector<uint8_t> kInvalidInputs[] = {
-      {0x30},
-      {0x30, 0x01},
-      {0x30, 0x00, 0x30, 0x00, 0x30, 0x01},
-  };
-
-  for (const auto &t : kInvalidInputs) {
-    SCOPED_TRACE(Bytes(t));
-
-    bssl::ScopedCBB cbb;
-    CBB child;
-    ASSERT_TRUE(CBB_init(cbb.get(), 0));
-    ASSERT_TRUE(CBB_add_asn1(cbb.get(), &child, CBS_ASN1_SET));
-    ASSERT_TRUE(CBB_add_bytes(&child, t.data(), t.size()));
-    EXPECT_FALSE(CBB_flush_asn1_set_of(&child));
-  }
-}
-
-template <class T>
-static std::vector<uint8_t> LiteralToBytes(const T *str) {
-  std::vector<uint8_t> ret;
-  for (; *str != 0; str++) {
-    for (size_t i = 0; i < sizeof(T); i++) {
-      ret.push_back(static_cast<uint8_t>(*str >> (8 * (sizeof(T) - 1 - i))));
-    }
-  }
-  return ret;
-}
-
-static std::vector<uint32_t> LiteralToCodePoints(const char32_t *str) {
-  std::vector<uint32_t> ret;
-  for (; *str != 0; str++) {
-    ret.push_back(static_cast<uint32_t>(*str));
-  }
-  return ret;
-}
-
-TEST(CBBTest, Unicode) {
-  struct {
-    int (*decode)(CBS *, uint32_t *);
-    int (*encode)(CBB *, uint32_t);
-    std::vector<uint8_t> in;
-    std::vector<uint32_t> out;
-    bool ok;
-  } kTests[] = {
-      {CBS_get_utf8, CBB_add_utf8,
-       // This test string captures all four cases in UTF-8.
-       LiteralToBytes(u8"Hello, 世界! ¡Hola, 🌎!"),
-       LiteralToCodePoints(U"Hello, 世界! ¡Hola, 🌎!"), true},
-
-      // Some invalid inputs adapted from
-      // http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt
-      // 2.1  First possible sequence of a certain length. (5- and 6-bit
-      // sequences no longer exist.)
-      {CBS_get_utf8, CBB_add_utf8, {0xf8, 0x88, 0x80, 0x80, 0x80}, {}, false},
-      {CBS_get_utf8,
-       CBB_add_utf8,
-       {0xfc, 0x84, 0x80, 0x80, 0x80, 0x80},
-       {},
-       false},
-      // 3.1  Unexpected continuation bytes.
-      {CBS_get_utf8, CBB_add_utf8, {0x80}, {}, false},
-      {CBS_get_utf8, CBB_add_utf8, {0xbf}, {}, false},
-      // 3.2  Lonely start characters.
-      {CBS_get_utf8, CBB_add_utf8, {0xc0, ' '}, {}, false},
-      {CBS_get_utf8, CBB_add_utf8, {0xe0, ' '}, {}, false},
-      {CBS_get_utf8, CBB_add_utf8, {0xf0, ' '}, {}, false},
-      // 3.3  Sequences with last continuation byte missing
-      {CBS_get_utf8, CBB_add_utf8, {0xc0}, {}, false},
-      {CBS_get_utf8, CBB_add_utf8, {0xe0, 0x80}, {}, false},
-      {CBS_get_utf8, CBB_add_utf8, {0xf0, 0x80, 0x80}, {}, false},
-      // Variation of the above with unexpected spaces.
-      {CBS_get_utf8, CBB_add_utf8, {0xe0, 0x80, ' '}, {}, false},
-      {CBS_get_utf8, CBB_add_utf8, {0xf0, 0x80, 0x80, ' '}, {}, false},
-      // 4.1  Examples of an overlong ASCII character
-      {CBS_get_utf8, CBB_add_utf8, {0xc0, 0xaf}, {}, false},
-      {CBS_get_utf8, CBB_add_utf8, {0xe0, 0x80, 0xaf}, {}, false},
-      {CBS_get_utf8, CBB_add_utf8, {0xf0, 0x80, 0x80, 0xaf}, {}, false},
-      // 4.2  Maximum overlong sequences
-      {CBS_get_utf8, CBB_add_utf8, {0xc1, 0xbf}, {}, false},
-      {CBS_get_utf8, CBB_add_utf8, {0xe0, 0x9f, 0xbf}, {}, false},
-      {CBS_get_utf8, CBB_add_utf8, {0xf0, 0x8f, 0xbf, 0xbf}, {}, false},
-      // 4.3  Overlong representation of the NUL character
-      {CBS_get_utf8, CBB_add_utf8, {0xc0, 0x80}, {}, false},
-      {CBS_get_utf8, CBB_add_utf8, {0xe0, 0x80, 0x80}, {}, false},
-      {CBS_get_utf8, CBB_add_utf8, {0xf0, 0x80, 0x80, 0x80}, {}, false},
-      // 5.1  Single UTF-16 surrogates
-      {CBS_get_utf8, CBB_add_utf8, {0xed, 0xa0, 0x80}, {}, false},
-      {CBS_get_utf8, CBB_add_utf8, {0xed, 0xad, 0xbf}, {}, false},
-      {CBS_get_utf8, CBB_add_utf8, {0xed, 0xae, 0x80}, {}, false},
-      {CBS_get_utf8, CBB_add_utf8, {0xed, 0xb0, 0x80}, {}, false},
-      {CBS_get_utf8, CBB_add_utf8, {0xed, 0xbe, 0x80}, {}, false},
-      {CBS_get_utf8, CBB_add_utf8, {0xed, 0xbf, 0xbf}, {}, false},
-      // 5.2  Paired UTF-16 surrogates
-      {CBS_get_utf8,
-       CBB_add_utf8,
-       {0xed, 0xa0, 0x80, 0xed, 0xb0, 0x80},
-       {},
-       false},
-      {CBS_get_utf8,
-       CBB_add_utf8,
-       {0xed, 0xa0, 0x80, 0xed, 0xbf, 0xbf},
-       {},
-       false},
-      {CBS_get_utf8,
-       CBB_add_utf8,
-       {0xed, 0xad, 0xbf, 0xed, 0xb0, 0x80},
-       {},
-       false},
-      {CBS_get_utf8,
-       CBB_add_utf8,
-       {0xed, 0xad, 0xbf, 0xed, 0xbf, 0xbf},
-       {},
-       false},
-      {CBS_get_utf8,
-       CBB_add_utf8,
-       {0xed, 0xae, 0x80, 0xed, 0xb0, 0x80},
-       {},
-       false},
-      {CBS_get_utf8,
-       CBB_add_utf8,
-       {0xed, 0xae, 0x80, 0xed, 0xbf, 0xbf},
-       {},
-       false},
-      {CBS_get_utf8,
-       CBB_add_utf8,
-       {0xed, 0xaf, 0xbf, 0xed, 0xb0, 0x80},
-       {},
-       false},
-      {CBS_get_utf8,
-       CBB_add_utf8,
-       {0xed, 0xaf, 0xbf, 0xed, 0xbf, 0xbf},
-       {},
-       false},
-      // 5.3  Noncharacter code positions
-      {CBS_get_utf8, CBB_add_utf8, {0xef, 0xbf, 0xbe}, {}, false},
-      {CBS_get_utf8, CBB_add_utf8, {0xef, 0xbf, 0xbf}, {}, false},
-      {CBS_get_utf8, CBB_add_utf8, {0xef, 0xb7, 0x90}, {}, false},
-      {CBS_get_utf8, CBB_add_utf8, {0xef, 0xb7, 0xaf}, {}, false},
-      {CBS_get_utf8, CBB_add_utf8, {0xf0, 0x9f, 0xbf, 0xbe}, {}, false},
-      {CBS_get_utf8, CBB_add_utf8, {0xf0, 0x9f, 0xbf, 0xbf}, {}, false},
-
-      {CBS_get_latin1, CBB_add_latin1, LiteralToBytes("\xa1Hola!"),
-       LiteralToCodePoints(U"¡Hola!"), true},
-
-      // UCS-2 matches UTF-16 on the BMP.
-      {CBS_get_ucs2_be, CBB_add_ucs2_be, LiteralToBytes(u"Hello, 世界!"),
-       LiteralToCodePoints(U"Hello, 世界!"), true},
-      // It does not support characters beyond the BMP.
-      {CBS_get_ucs2_be, CBB_add_ucs2_be,
-       LiteralToBytes(u"Hello, 世界! ¡Hola, 🌎!"),
-       LiteralToCodePoints(U"Hello, 世界! ¡Hola, "), false},
-      // Unpaired surrogates and non-characters are also rejected.
-      {CBS_get_ucs2_be, CBB_add_ucs2_be, {0xd8, 0x00}, {}, false},
-      {CBS_get_ucs2_be, CBB_add_ucs2_be, {0xff, 0xfe}, {}, false},
-
-      {CBS_get_utf32_be, CBB_add_utf32_be,
-       LiteralToBytes(U"Hello, 世界! ¡Hola, 🌎!"),
-       LiteralToCodePoints(U"Hello, 世界! ¡Hola, 🌎!"), true},
-      // Unpaired surrogates and non-characters are rejected.
-      {CBS_get_utf32_be, CBB_add_utf32_be, {0x00, 0x00, 0xd8, 0x00}, {}, false},
-      {CBS_get_utf32_be, CBB_add_utf32_be, {0x00, 0x00, 0xff, 0xfe}, {}, false},
-
-      // Test that the NUL character can be encoded.
-      {CBS_get_latin1, CBB_add_latin1, {0}, {0}, true},
-      {CBS_get_utf8, CBB_add_utf8, {0}, {0}, true},
-      {CBS_get_ucs2_be, CBB_add_ucs2_be, {0, 0}, {0}, true},
-      {CBS_get_utf32_be, CBB_add_utf32_be, {0, 0, 0, 0}, {0}, true},
-  };
-  for (const auto &t : kTests) {
-    SCOPED_TRACE(Bytes(t.in));
-
-    // Test decoding.
-    CBS cbs;
-    CBS_init(&cbs, t.in.data(), t.in.size());
-    std::vector<uint32_t> out;
-    bool ok = true;
-    while (CBS_len(&cbs) != 0) {
-      uint32_t u;
-      if (!t.decode(&cbs, &u)) {
-        ok = false;
-        break;
-      }
-      out.push_back(u);
-    }
-    EXPECT_EQ(t.ok, ok);
-    EXPECT_EQ(t.out, out);
-
-    // Test encoding.
-    if (t.ok) {
-      bssl::ScopedCBB cbb;
-      ASSERT_TRUE(CBB_init(cbb.get(), 0));
-      for (uint32_t u : t.out) {
-        ASSERT_TRUE(t.encode(cbb.get(), u));
-      }
-      EXPECT_EQ(Bytes(t.in), Bytes(CBB_data(cbb.get()), CBB_len(cbb.get())));
-    }
-  }
-
-  static const uint32_t kBadCodePoints[] = {
-      // Surrogate pairs.
-      0xd800,
-      0xdfff,
-      // Non-characters.
-      0xfffe,
-      0xffff,
-      0xfdd0,
-      0x1fffe,
-      0x1ffff,
-      // Too big.
-      0x110000,
-  };
-  bssl::ScopedCBB cbb;
-  ASSERT_TRUE(CBB_init(cbb.get(), 0));
-  for (uint32_t v : kBadCodePoints) {
-    SCOPED_TRACE(v);
-    EXPECT_FALSE(CBB_add_utf8(cbb.get(), v));
-    EXPECT_FALSE(CBB_add_latin1(cbb.get(), v));
-    EXPECT_FALSE(CBB_add_ucs2_be(cbb.get(), v));
-    EXPECT_FALSE(CBB_add_utf32_be(cbb.get(), v));
-  }
-
-  // Additional values that are out of range.
-  EXPECT_FALSE(CBB_add_latin1(cbb.get(), 0x100));
-  EXPECT_FALSE(CBB_add_ucs2_be(cbb.get(), 0x10000));
-
-  EXPECT_EQ(1u, CBB_get_utf8_len(0));
-  EXPECT_EQ(1u, CBB_get_utf8_len(0x7f));
-  EXPECT_EQ(2u, CBB_get_utf8_len(0x80));
-  EXPECT_EQ(2u, CBB_get_utf8_len(0x7ff));
-  EXPECT_EQ(3u, CBB_get_utf8_len(0x800));
-  EXPECT_EQ(3u, CBB_get_utf8_len(0xffff));
-  EXPECT_EQ(4u, CBB_get_utf8_len(0x10000));
-  EXPECT_EQ(4u, CBB_get_utf8_len(0x10ffff));
-}
-
-TEST(CBSTest, BogusTime) {
-  static const struct {
-    const char *timestring;
-  } kBogusTimeTests[] = {
-      {""},
-      {"invalidtimesZ"},
-      {"Z"},
-      {"0000"},
-      {"9999Z"},
-      {"00000000000000000000000000000Z"},
-      {"19491231235959"},
-      {"500101000000.001Z"},
-      {"500101000000+6"},
-      {"-1970010100000Z"},
-      {"7a0101000000Z"},
-      {"20500101000000-6"},
-      {"20500101000000.001"},
-      {"20500229000000Z"},
-      {"220229000000Z"},
-      {"20500132000000Z"},
-      {"220132000000Z"},
-      {"20500332000000Z"},
-      {"220332000000Z"},
-      {"20500532000000Z"},
-      {"220532000000Z"},
-      {"20500732000000Z"},
-      {"220732000000Z"},
-      {"20500832000000Z"},
-      {"220832000000Z"},
-      {"20501032000000Z"},
-      {"221032000000Z"},
-      {"20501232000000Z"},
-      {"221232000000Z"},
-      {"20500431000000Z"},
-      {"220431000000Z"},
-      {"20500631000000Z"},
-      {"220631000000Z"},
-      {"20500931000000Z"},
-      {"220931000000Z"},
-      {"20501131000000Z"},
-      {"221131000000Z"},
-      {"20501100000000Z"},
-      {"221100000000Z"},
-      {"19500101000000+0600"},
-  };
-  for (const auto &t : kBogusTimeTests) {
-    SCOPED_TRACE(t.timestring);
-    CBS cbs;
-    CBS_init(&cbs, (const uint8_t *)t.timestring, strlen(t.timestring));
-    EXPECT_FALSE(CBS_parse_generalized_time(&cbs, NULL,
-                                            /*allow_timezone_offset=*/0));
-    EXPECT_FALSE(CBS_parse_utc_time(&cbs, NULL, /*allow_timezone_offset=*/1));
-  }
-  static const struct {
-    const char *timestring;
-  } kUTCTZTests[] = {
-      {"480711220333-0700"}, {"140704000000-0700"}, {"480222202332-0500"},
-      {"480726113216-0000"}, {"480726113216-2359"},
-  };
-  for (const auto &t : kUTCTZTests) {
-    SCOPED_TRACE(t.timestring);
-    CBS cbs;
-    CBS_init(&cbs, (const uint8_t *)t.timestring, strlen(t.timestring));
-    EXPECT_FALSE(CBS_parse_generalized_time(&cbs, NULL,
-                                            /*allow_timezone_offset=*/0));
-    EXPECT_FALSE(CBS_parse_generalized_time(&cbs, NULL,
-                                            /*allow_timezone_offset=*/1));
-    EXPECT_TRUE(CBS_parse_utc_time(&cbs, NULL, /*allow_timezone_offset=*/1));
-    EXPECT_FALSE(CBS_parse_utc_time(&cbs, NULL, /*allow_timezone_offset=*/0));
-  }
-  static const struct {
-    const char *timestring;
-  } kBogusUTCTZTests[] = {
-      {"480711220333-0160"},
-      {"140704000000-9999"},
-      {"480222202332-2400"},
-  };
-  for (const auto &t : kBogusUTCTZTests) {
-    SCOPED_TRACE(t.timestring);
-    CBS cbs;
-    CBS_init(&cbs, (const uint8_t *)t.timestring, strlen(t.timestring));
-    EXPECT_FALSE(CBS_parse_generalized_time(&cbs, NULL,
-                                            /*allow_timezone_offset=*/0));
-    EXPECT_FALSE(CBS_parse_utc_time(&cbs, NULL, /*allow_timezone_offset=*/1));
-  }
-  static const struct {
-    const char *timestring;
-  } kGenTZTests[] = {
-      {"20480711220333-0000"},
-      {"20140704000000-0100"},
-      {"20460311174630-0300"},
-      {"20140704000000-2359"},
-  };
-  for (const auto &t : kGenTZTests) {
-    SCOPED_TRACE(t.timestring);
-    CBS cbs;
-    CBS_init(&cbs, (const uint8_t *)t.timestring, strlen(t.timestring));
-    EXPECT_FALSE(CBS_parse_generalized_time(&cbs, NULL,
-                                            /*allow_timezone_offset=*/0));
-    EXPECT_TRUE(CBS_parse_generalized_time(&cbs, NULL,
-                                           /*allow_timezone_offset=*/1));
-    EXPECT_FALSE(CBS_parse_utc_time(&cbs, NULL, /*allow_timezone_offset=*/1));
-    EXPECT_FALSE(CBS_parse_utc_time(&cbs, NULL, /*allow_timezone_offset=*/0));
-  }
-  static const struct {
-    const char *timestring;
-  } kBogusGenTZTests[] = {
-      {"20480222202332-2400"},
-      {"20140704000000-9999"},
-      {"20480726113216-0160"},
-  };
-  for (const auto &t : kBogusGenTZTests) {
-    SCOPED_TRACE(t.timestring);
-    CBS cbs;
-    CBS_init(&cbs, (const uint8_t *)t.timestring, strlen(t.timestring));
-    EXPECT_FALSE(CBS_parse_generalized_time(&cbs, NULL,
-                                            /*allow_timezone_offset=*/0));
-    EXPECT_FALSE(CBS_parse_utc_time(&cbs, NULL, /*allow_timezone_offset=*/1));
-  }
-}
-
-TEST(CBSTest, GetU64Decimal) {
-  const struct {
-    uint64_t val;
-    const char *text;
-  } kTests[] = {
-      {0, "0"},
-      {1, "1"},
-      {123456, "123456"},
-      // 2^64 - 1
-      {UINT64_C(18446744073709551615), "18446744073709551615"},
-  };
-  for (const auto &t : kTests) {
-    SCOPED_TRACE(t.text);
-    CBS cbs;
-    CBS_init(&cbs, reinterpret_cast<const uint8_t *>(t.text), strlen(t.text));
-    uint64_t v;
-    ASSERT_TRUE(CBS_get_u64_decimal(&cbs, &v));
-    EXPECT_EQ(v, t.val);
-    EXPECT_EQ(CBS_data(&cbs),
-              reinterpret_cast<const uint8_t *>(t.text) + strlen(t.text));
-    EXPECT_EQ(CBS_len(&cbs), 0u);
-
-    std::string str(t.text);
-    str += "Z";
-    CBS_init(&cbs, reinterpret_cast<const uint8_t *>(str.data()), str.size());
-    ASSERT_TRUE(CBS_get_u64_decimal(&cbs, &v));
-    EXPECT_EQ(v, t.val);
-    EXPECT_EQ(CBS_data(&cbs),
-              reinterpret_cast<const uint8_t *>(str.data()) + strlen(t.text));
-    EXPECT_EQ(CBS_len(&cbs), 1u);
-  }
-
-  static const char *kInvalidTests[] = {
-      "",
-      "nope",
-      "-1",
-      // 2^64
-      "18446744073709551616",
-      // Overflows at multiplying by 10.
-      "18446744073709551620",
-  };
-  for (const char *invalid : kInvalidTests) {
-    SCOPED_TRACE(invalid);
-    CBS cbs;
-    CBS_init(&cbs, reinterpret_cast<const uint8_t *>(invalid), strlen(invalid));
-    uint64_t v;
-    EXPECT_FALSE(CBS_get_u64_decimal(&cbs, &v));
-  }
-}
-
-}  // namespace
diff --git a/src/crypto/bytestring/cbb.cc b/src/crypto/bytestring/cbb.cc
deleted file mode 100644
index b847331..0000000
--- a/src/crypto/bytestring/cbb.cc
+++ /dev/null
@@ -1,708 +0,0 @@
-// Copyright 2014 The BoringSSL Authors
-//
-// 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
-//
-//     https://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 <openssl/bytestring.h>
-
-#include <assert.h>
-#include <limits.h>
-#include <string.h>
-
-#include <openssl/err.h>
-#include <openssl/mem.h>
-
-#include "../internal.h"
-
-
-void CBB_zero(CBB *cbb) { OPENSSL_memset(cbb, 0, sizeof(CBB)); }
-
-static void cbb_init(CBB *cbb, uint8_t *buf, size_t cap, int can_resize) {
-  cbb->is_child = 0;
-  cbb->child = NULL;
-  cbb->u.base.buf = buf;
-  cbb->u.base.len = 0;
-  cbb->u.base.cap = cap;
-  cbb->u.base.can_resize = can_resize;
-  cbb->u.base.error = 0;
-}
-
-int CBB_init(CBB *cbb, size_t initial_capacity) {
-  CBB_zero(cbb);
-
-  uint8_t *buf = reinterpret_cast<uint8_t *>(OPENSSL_malloc(initial_capacity));
-  if (initial_capacity > 0 && buf == NULL) {
-    return 0;
-  }
-
-  cbb_init(cbb, buf, initial_capacity, /*can_resize=*/1);
-  return 1;
-}
-
-int CBB_init_fixed(CBB *cbb, uint8_t *buf, size_t len) {
-  CBB_zero(cbb);
-  cbb_init(cbb, buf, len, /*can_resize=*/0);
-  return 1;
-}
-
-void CBB_cleanup(CBB *cbb) {
-  // Child |CBB|s are non-owning. They are implicitly discarded and should not
-  // be used with |CBB_cleanup| or |ScopedCBB|.
-  assert(!cbb->is_child);
-  if (cbb->is_child) {
-    return;
-  }
-
-  if (cbb->u.base.can_resize) {
-    OPENSSL_free(cbb->u.base.buf);
-  }
-}
-
-static int cbb_buffer_reserve(struct cbb_buffer_st *base, uint8_t **out,
-                              size_t len) {
-  if (base == NULL) {
-    return 0;
-  }
-
-  size_t newlen = base->len + len;
-  if (newlen < base->len) {
-    // Overflow
-    OPENSSL_PUT_ERROR(CRYPTO, ERR_R_OVERFLOW);
-    goto err;
-  }
-
-  if (newlen > base->cap) {
-    if (!base->can_resize) {
-      OPENSSL_PUT_ERROR(CRYPTO, ERR_R_OVERFLOW);
-      goto err;
-    }
-
-    size_t newcap = base->cap * 2;
-    if (newcap < base->cap || newcap < newlen) {
-      newcap = newlen;
-    }
-    uint8_t *newbuf =
-        reinterpret_cast<uint8_t *>(OPENSSL_realloc(base->buf, newcap));
-    if (newbuf == NULL) {
-      goto err;
-    }
-
-    base->buf = newbuf;
-    base->cap = newcap;
-  }
-
-  if (out) {
-    *out = base->buf + base->len;
-  }
-
-  return 1;
-
-err:
-  base->error = 1;
-  return 0;
-}
-
-static int cbb_buffer_add(struct cbb_buffer_st *base, uint8_t **out,
-                          size_t len) {
-  if (!cbb_buffer_reserve(base, out, len)) {
-    return 0;
-  }
-  // This will not overflow or |cbb_buffer_reserve| would have failed.
-  base->len += len;
-  return 1;
-}
-
-int CBB_finish(CBB *cbb, uint8_t **out_data, size_t *out_len) {
-  if (cbb->is_child) {
-    OPENSSL_PUT_ERROR(CRYPTO, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
-    return 0;
-  }
-
-  if (!CBB_flush(cbb)) {
-    return 0;
-  }
-
-  if (cbb->u.base.can_resize && (out_data == NULL || out_len == NULL)) {
-    // |out_data| and |out_len| can only be NULL if the CBB is fixed.
-    return 0;
-  }
-
-  if (out_data != NULL) {
-    *out_data = cbb->u.base.buf;
-  }
-  if (out_len != NULL) {
-    *out_len = cbb->u.base.len;
-  }
-  cbb->u.base.buf = NULL;
-  CBB_cleanup(cbb);
-  return 1;
-}
-
-static struct cbb_buffer_st *cbb_get_base(CBB *cbb) {
-  if (cbb->is_child) {
-    return cbb->u.child.base;
-  }
-  return &cbb->u.base;
-}
-
-static void cbb_on_error(CBB *cbb) {
-  // Due to C's lack of destructors and |CBB|'s auto-flushing API, a failing
-  // |CBB|-taking function may leave a dangling pointer to a child |CBB|. As a
-  // result, the convention is callers may not write to |CBB|s that have failed.
-  // But, as a safety measure, we lock the |CBB| into an error state. Once the
-  // error bit is set, |cbb->child| will not be read.
-  //
-  // TODO(davidben): This still isn't quite ideal. A |CBB| function *outside*
-  // this file may originate an error while the |CBB| points to a local child.
-  // In that case we don't set the error bit and are reliant on the error
-  // convention. Perhaps we allow |CBB_cleanup| on child |CBB|s and make every
-  // child's |CBB_cleanup| set the error bit if unflushed. That will be
-  // convenient for C++ callers, but very tedious for C callers. So C callers
-  // perhaps should get a |CBB_on_error| function that can be, less tediously,
-  // stuck in a |goto err| block.
-  cbb_get_base(cbb)->error = 1;
-
-  // Clearing the pointer is not strictly necessary, but GCC's dangling pointer
-  // warning does not know |cbb->child| will not be read once |error| is set
-  // above.
-  cbb->child = NULL;
-}
-
-// CBB_flush recurses and then writes out any pending length prefix. The
-// current length of the underlying base is taken to be the length of the
-// length-prefixed data.
-int CBB_flush(CBB *cbb) {
-  // If |base| has hit an error, the buffer is in an undefined state, so
-  // fail all following calls. In particular, |cbb->child| may point to invalid
-  // memory.
-  struct cbb_buffer_st *base = cbb_get_base(cbb);
-  if (base == NULL || base->error) {
-    return 0;
-  }
-
-  if (cbb->child == NULL) {
-    // Nothing to flush.
-    return 1;
-  }
-
-  assert(cbb->child->is_child);
-  struct cbb_child_st *child = &cbb->child->u.child;
-  assert(child->base == base);
-  size_t child_start = child->offset + child->pending_len_len;
-
-  size_t len;
-  if (!CBB_flush(cbb->child) || child_start < child->offset ||
-      base->len < child_start) {
-    goto err;
-  }
-
-  len = base->len - child_start;
-
-  if (child->pending_is_asn1) {
-    // For ASN.1 we assume that we'll only need a single byte for the length.
-    // If that turned out to be incorrect, we have to move the contents along
-    // in order to make space.
-    uint8_t len_len;
-    uint8_t initial_length_byte;
-
-    assert(child->pending_len_len == 1);
-
-    if (len > 0xfffffffe) {
-      OPENSSL_PUT_ERROR(CRYPTO, ERR_R_OVERFLOW);
-      // Too large.
-      goto err;
-    } else if (len > 0xffffff) {
-      len_len = 5;
-      initial_length_byte = 0x80 | 4;
-    } else if (len > 0xffff) {
-      len_len = 4;
-      initial_length_byte = 0x80 | 3;
-    } else if (len > 0xff) {
-      len_len = 3;
-      initial_length_byte = 0x80 | 2;
-    } else if (len > 0x7f) {
-      len_len = 2;
-      initial_length_byte = 0x80 | 1;
-    } else {
-      len_len = 1;
-      initial_length_byte = (uint8_t)len;
-      len = 0;
-    }
-
-    if (len_len != 1) {
-      // We need to move the contents along in order to make space.
-      size_t extra_bytes = len_len - 1;
-      if (!cbb_buffer_add(base, NULL, extra_bytes)) {
-        goto err;
-      }
-      OPENSSL_memmove(base->buf + child_start + extra_bytes,
-                      base->buf + child_start, len);
-    }
-    base->buf[child->offset++] = initial_length_byte;
-    child->pending_len_len = len_len - 1;
-  }
-
-  for (size_t i = child->pending_len_len - 1; i < child->pending_len_len; i--) {
-    base->buf[child->offset + i] = (uint8_t)len;
-    len >>= 8;
-  }
-  if (len != 0) {
-    OPENSSL_PUT_ERROR(CRYPTO, ERR_R_OVERFLOW);
-    goto err;
-  }
-
-  child->base = NULL;
-  cbb->child = NULL;
-
-  return 1;
-
-err:
-  cbb_on_error(cbb);
-  return 0;
-}
-
-const uint8_t *CBB_data(const CBB *cbb) {
-  assert(cbb->child == NULL);
-  if (cbb->is_child) {
-    return cbb->u.child.base->buf + cbb->u.child.offset +
-           cbb->u.child.pending_len_len;
-  }
-  return cbb->u.base.buf;
-}
-
-size_t CBB_len(const CBB *cbb) {
-  assert(cbb->child == NULL);
-  if (cbb->is_child) {
-    assert(cbb->u.child.offset + cbb->u.child.pending_len_len <=
-           cbb->u.child.base->len);
-    return cbb->u.child.base->len - cbb->u.child.offset -
-           cbb->u.child.pending_len_len;
-  }
-  return cbb->u.base.len;
-}
-
-static int cbb_add_child(CBB *cbb, CBB *out_child, uint8_t len_len,
-                         int is_asn1) {
-  assert(cbb->child == NULL);
-  assert(!is_asn1 || len_len == 1);
-  struct cbb_buffer_st *base = cbb_get_base(cbb);
-  size_t offset = base->len;
-
-  // Reserve space for the length prefix.
-  uint8_t *prefix_bytes;
-  if (!cbb_buffer_add(base, &prefix_bytes, len_len)) {
-    return 0;
-  }
-  OPENSSL_memset(prefix_bytes, 0, len_len);
-
-  CBB_zero(out_child);
-  out_child->is_child = 1;
-  out_child->u.child.base = base;
-  out_child->u.child.offset = offset;
-  out_child->u.child.pending_len_len = len_len;
-  out_child->u.child.pending_is_asn1 = is_asn1;
-  cbb->child = out_child;
-  return 1;
-}
-
-static int cbb_add_length_prefixed(CBB *cbb, CBB *out_contents,
-                                   uint8_t len_len) {
-  if (!CBB_flush(cbb)) {
-    return 0;
-  }
-
-  return cbb_add_child(cbb, out_contents, len_len, /*is_asn1=*/0);
-}
-
-int CBB_add_u8_length_prefixed(CBB *cbb, CBB *out_contents) {
-  return cbb_add_length_prefixed(cbb, out_contents, 1);
-}
-
-int CBB_add_u16_length_prefixed(CBB *cbb, CBB *out_contents) {
-  return cbb_add_length_prefixed(cbb, out_contents, 2);
-}
-
-int CBB_add_u24_length_prefixed(CBB *cbb, CBB *out_contents) {
-  return cbb_add_length_prefixed(cbb, out_contents, 3);
-}
-
-// add_base128_integer encodes |v| as a big-endian base-128 integer where the
-// high bit of each byte indicates where there is more data. This is the
-// encoding used in DER for both high tag number form and OID components.
-static int add_base128_integer(CBB *cbb, uint64_t v) {
-  unsigned len_len = 0;
-  uint64_t copy = v;
-  while (copy > 0) {
-    len_len++;
-    copy >>= 7;
-  }
-  if (len_len == 0) {
-    len_len = 1;  // Zero is encoded with one byte.
-  }
-  for (unsigned i = len_len - 1; i < len_len; i--) {
-    uint8_t byte = (v >> (7 * i)) & 0x7f;
-    if (i != 0) {
-      // The high bit denotes whether there is more data.
-      byte |= 0x80;
-    }
-    if (!CBB_add_u8(cbb, byte)) {
-      return 0;
-    }
-  }
-  return 1;
-}
-
-int CBB_add_asn1(CBB *cbb, CBB *out_contents, CBS_ASN1_TAG tag) {
-  if (!CBB_flush(cbb)) {
-    return 0;
-  }
-
-  // Split the tag into leading bits and tag number.
-  uint8_t tag_bits = (tag >> CBS_ASN1_TAG_SHIFT) & 0xe0;
-  CBS_ASN1_TAG tag_number = tag & CBS_ASN1_TAG_NUMBER_MASK;
-  if (tag_number >= 0x1f) {
-    // Set all the bits in the tag number to signal high tag number form.
-    if (!CBB_add_u8(cbb, tag_bits | 0x1f) ||
-        !add_base128_integer(cbb, tag_number)) {
-      return 0;
-    }
-  } else if (!CBB_add_u8(cbb, tag_bits | tag_number)) {
-    return 0;
-  }
-
-  // Reserve one byte of length prefix. |CBB_flush| will finish it later.
-  return cbb_add_child(cbb, out_contents, /*len_len=*/1, /*is_asn1=*/1);
-}
-
-int CBB_add_bytes(CBB *cbb, const uint8_t *data, size_t len) {
-  uint8_t *out;
-  if (!CBB_add_space(cbb, &out, len)) {
-    return 0;
-  }
-  OPENSSL_memcpy(out, data, len);
-  return 1;
-}
-
-int CBB_add_zeros(CBB *cbb, size_t len) {
-  uint8_t *out;
-  if (!CBB_add_space(cbb, &out, len)) {
-    return 0;
-  }
-  OPENSSL_memset(out, 0, len);
-  return 1;
-}
-
-int CBB_add_space(CBB *cbb, uint8_t **out_data, size_t len) {
-  if (!CBB_flush(cbb) || !cbb_buffer_add(cbb_get_base(cbb), out_data, len)) {
-    return 0;
-  }
-  return 1;
-}
-
-int CBB_reserve(CBB *cbb, uint8_t **out_data, size_t len) {
-  if (!CBB_flush(cbb) ||
-      !cbb_buffer_reserve(cbb_get_base(cbb), out_data, len)) {
-    return 0;
-  }
-  return 1;
-}
-
-int CBB_did_write(CBB *cbb, size_t len) {
-  struct cbb_buffer_st *base = cbb_get_base(cbb);
-  size_t newlen = base->len + len;
-  if (cbb->child != NULL || newlen < base->len || newlen > base->cap) {
-    return 0;
-  }
-  base->len = newlen;
-  return 1;
-}
-
-static int cbb_add_u(CBB *cbb, uint64_t v, size_t len_len) {
-  uint8_t *buf;
-  if (!CBB_add_space(cbb, &buf, len_len)) {
-    return 0;
-  }
-
-  for (size_t i = len_len - 1; i < len_len; i--) {
-    buf[i] = v;
-    v >>= 8;
-  }
-
-  // |v| must fit in |len_len| bytes.
-  if (v != 0) {
-    cbb_on_error(cbb);
-    return 0;
-  }
-
-  return 1;
-}
-
-int CBB_add_u8(CBB *cbb, uint8_t value) { return cbb_add_u(cbb, value, 1); }
-
-int CBB_add_u16(CBB *cbb, uint16_t value) { return cbb_add_u(cbb, value, 2); }
-
-int CBB_add_u16le(CBB *cbb, uint16_t value) {
-  return CBB_add_u16(cbb, CRYPTO_bswap2(value));
-}
-
-int CBB_add_u24(CBB *cbb, uint32_t value) { return cbb_add_u(cbb, value, 3); }
-
-int CBB_add_u32(CBB *cbb, uint32_t value) { return cbb_add_u(cbb, value, 4); }
-
-int CBB_add_u32le(CBB *cbb, uint32_t value) {
-  return CBB_add_u32(cbb, CRYPTO_bswap4(value));
-}
-
-int CBB_add_u64(CBB *cbb, uint64_t value) { return cbb_add_u(cbb, value, 8); }
-
-int CBB_add_u64le(CBB *cbb, uint64_t value) {
-  return CBB_add_u64(cbb, CRYPTO_bswap8(value));
-}
-
-void CBB_discard_child(CBB *cbb) {
-  if (cbb->child == NULL) {
-    return;
-  }
-
-  struct cbb_buffer_st *base = cbb_get_base(cbb);
-  assert(cbb->child->is_child);
-  base->len = cbb->child->u.child.offset;
-
-  cbb->child->u.child.base = NULL;
-  cbb->child = NULL;
-}
-
-int CBB_add_asn1_element(CBB *cbb, CBS_ASN1_TAG tag, const uint8_t *data,
-                         size_t data_len) {
-  CBB child;
-  if (!CBB_add_asn1(cbb, &child, tag) ||
-      !CBB_add_bytes(&child, data, data_len) ||  //
-      !CBB_flush(cbb)) {
-    cbb_on_error(cbb);
-    return 0;
-  }
-
-  return 1;
-}
-
-int CBB_add_asn1_uint64(CBB *cbb, uint64_t value) {
-  return CBB_add_asn1_uint64_with_tag(cbb, value, CBS_ASN1_INTEGER);
-}
-
-int CBB_add_asn1_uint64_with_tag(CBB *cbb, uint64_t value, CBS_ASN1_TAG tag) {
-  CBB child;
-  int started = 0;
-  if (!CBB_add_asn1(cbb, &child, tag)) {
-    goto err;
-  }
-
-  for (size_t i = 0; i < 8; i++) {
-    uint8_t byte = (value >> 8 * (7 - i)) & 0xff;
-    if (!started) {
-      if (byte == 0) {
-        // Don't encode leading zeros.
-        continue;
-      }
-      // If the high bit is set, add a padding byte to make it
-      // unsigned.
-      if ((byte & 0x80) && !CBB_add_u8(&child, 0)) {
-        goto err;
-      }
-      started = 1;
-    }
-    if (!CBB_add_u8(&child, byte)) {
-      goto err;
-    }
-  }
-
-  // 0 is encoded as a single 0, not the empty string.
-  if (!started && !CBB_add_u8(&child, 0)) {
-    goto err;
-  }
-
-  return CBB_flush(cbb);
-
-err:
-  cbb_on_error(cbb);
-  return 0;
-}
-
-int CBB_add_asn1_int64(CBB *cbb, int64_t value) {
-  return CBB_add_asn1_int64_with_tag(cbb, value, CBS_ASN1_INTEGER);
-}
-
-int CBB_add_asn1_int64_with_tag(CBB *cbb, int64_t value, CBS_ASN1_TAG tag) {
-  if (value >= 0) {
-    return CBB_add_asn1_uint64_with_tag(cbb, (uint64_t)value, tag);
-  }
-
-  uint8_t bytes[sizeof(int64_t)];
-  memcpy(bytes, &value, sizeof(value));
-  int start = 7;
-  // Skip leading sign-extension bytes unless they are necessary.
-  while (start > 0 && (bytes[start] == 0xff && (bytes[start - 1] & 0x80))) {
-    start--;
-  }
-
-  CBB child;
-  if (!CBB_add_asn1(cbb, &child, tag)) {
-    goto err;
-  }
-  for (int i = start; i >= 0; i--) {
-    if (!CBB_add_u8(&child, bytes[i])) {
-      goto err;
-    }
-  }
-  return CBB_flush(cbb);
-
-err:
-  cbb_on_error(cbb);
-  return 0;
-}
-
-int CBB_add_asn1_octet_string(CBB *cbb, const uint8_t *data, size_t data_len) {
-  return CBB_add_asn1_element(cbb, CBS_ASN1_OCTETSTRING, data, data_len);
-}
-
-int CBB_add_asn1_bool(CBB *cbb, int value) {
-  CBB child;
-  if (!CBB_add_asn1(cbb, &child, CBS_ASN1_BOOLEAN) ||
-      !CBB_add_u8(&child, value != 0 ? 0xff : 0) || !CBB_flush(cbb)) {
-    cbb_on_error(cbb);
-    return 0;
-  }
-
-  return 1;
-}
-
-// parse_dotted_decimal parses one decimal component from |cbs|, where |cbs| is
-// an OID literal, e.g., "1.2.840.113554.4.1.72585". It consumes both the
-// component and the dot, so |cbs| may be passed into the function again for the
-// next value.
-static int parse_dotted_decimal(CBS *cbs, uint64_t *out) {
-  if (!CBS_get_u64_decimal(cbs, out)) {
-    return 0;
-  }
-
-  // The integer must have either ended at the end of the string, or a
-  // non-terminal dot, which should be consumed. If the string ends with a dot,
-  // this is not a valid OID string.
-  uint8_t dot;
-  return !CBS_get_u8(cbs, &dot) || (dot == '.' && CBS_len(cbs) > 0);
-}
-
-int CBB_add_asn1_oid_from_text(CBB *cbb, const char *text, size_t len) {
-  if (!CBB_flush(cbb)) {
-    return 0;
-  }
-
-  CBS cbs;
-  CBS_init(&cbs, (const uint8_t *)text, len);
-
-  // OIDs must have at least two components.
-  uint64_t a, b;
-  if (!parse_dotted_decimal(&cbs, &a) || !parse_dotted_decimal(&cbs, &b)) {
-    return 0;
-  }
-
-  // The first component is encoded as 40 * |a| + |b|. This assumes that |a| is
-  // 0, 1, or 2 and that, when it is 0 or 1, |b| is at most 39.
-  if (a > 2 || (a < 2 && b > 39) || b > UINT64_MAX - 80 ||
-      !add_base128_integer(cbb, 40u * a + b)) {
-    return 0;
-  }
-
-  // The remaining components are encoded unmodified.
-  while (CBS_len(&cbs) > 0) {
-    if (!parse_dotted_decimal(&cbs, &a) || !add_base128_integer(cbb, a)) {
-      return 0;
-    }
-  }
-
-  return 1;
-}
-
-static int compare_set_of_element(const void *a_ptr, const void *b_ptr) {
-  // See X.690, section 11.6 for the ordering. They are sorted in ascending
-  // order by their DER encoding.
-  const CBS *a = reinterpret_cast<const CBS *>(a_ptr),
-            *b = reinterpret_cast<const CBS *>(b_ptr);
-  size_t a_len = CBS_len(a), b_len = CBS_len(b);
-  size_t min_len = a_len < b_len ? a_len : b_len;
-  int ret = OPENSSL_memcmp(CBS_data(a), CBS_data(b), min_len);
-  if (ret != 0) {
-    return ret;
-  }
-  if (a_len == b_len) {
-    return 0;
-  }
-  // If one is a prefix of the other, the shorter one sorts first. (This is not
-  // actually reachable. No DER encoding is a prefix of another DER encoding.)
-  return a_len < b_len ? -1 : 1;
-}
-
-int CBB_flush_asn1_set_of(CBB *cbb) {
-  if (!CBB_flush(cbb)) {
-    return 0;
-  }
-
-  CBS cbs;
-  size_t num_children = 0;
-  CBS_init(&cbs, CBB_data(cbb), CBB_len(cbb));
-  while (CBS_len(&cbs) != 0) {
-    if (!CBS_get_any_asn1_element(&cbs, NULL, NULL, NULL)) {
-      OPENSSL_PUT_ERROR(CRYPTO, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
-      return 0;
-    }
-    num_children++;
-  }
-
-  if (num_children < 2) {
-    return 1;  // Nothing to do. This is the common case for X.509.
-  }
-
-  // Parse out the children and sort. We alias them into a copy of so they
-  // remain valid as we rewrite |cbb|.
-  int ret = 0;
-  size_t buf_len = CBB_len(cbb);
-  uint8_t *buf =
-      reinterpret_cast<uint8_t *>(OPENSSL_memdup(CBB_data(cbb), buf_len));
-  CBS *children =
-      reinterpret_cast<CBS *>(OPENSSL_calloc(num_children, sizeof(CBS)));
-  uint8_t *out;
-  size_t offset = 0;
-  if (buf == NULL || children == NULL) {
-    goto err;
-  }
-  CBS_init(&cbs, buf, buf_len);
-  for (size_t i = 0; i < num_children; i++) {
-    if (!CBS_get_any_asn1_element(&cbs, &children[i], NULL, NULL)) {
-      goto err;
-    }
-  }
-  qsort(children, num_children, sizeof(CBS), compare_set_of_element);
-
-  // Write the contents back in the new order.
-  out = (uint8_t *)CBB_data(cbb);
-  for (size_t i = 0; i < num_children; i++) {
-    OPENSSL_memcpy(out + offset, CBS_data(&children[i]), CBS_len(&children[i]));
-    offset += CBS_len(&children[i]);
-  }
-  assert(offset == buf_len);
-
-  ret = 1;
-
-err:
-  OPENSSL_free(buf);
-  OPENSSL_free(children);
-  return ret;
-}
diff --git a/src/crypto/bytestring/cbs.cc b/src/crypto/bytestring/cbs.cc
deleted file mode 100644
index fd11c5a..0000000
--- a/src/crypto/bytestring/cbs.cc
+++ /dev/null
@@ -1,912 +0,0 @@
-// Copyright 2014 The BoringSSL Authors
-//
-// 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
-//
-//     https://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 <openssl/asn1.h>
-#include <openssl/bytestring.h>
-#include <openssl/mem.h>
-
-#include <assert.h>
-#include <ctype.h>
-#include <inttypes.h>
-#include <string.h>
-
-#include "../asn1/internal.h"
-#include "../internal.h"
-#include "internal.h"
-
-
-static int cbs_get(CBS *cbs, const uint8_t **p, size_t n) {
-  if (cbs->len < n) {
-    return 0;
-  }
-
-  *p = cbs->data;
-  cbs->data += n;
-  cbs->len -= n;
-  return 1;
-}
-
-int CBS_skip(CBS *cbs, size_t len) {
-  const uint8_t *dummy;
-  return cbs_get(cbs, &dummy, len);
-}
-
-int CBS_stow(const CBS *cbs, uint8_t **out_ptr, size_t *out_len) {
-  OPENSSL_free(*out_ptr);
-  *out_ptr = NULL;
-  *out_len = 0;
-
-  if (cbs->len == 0) {
-    return 1;
-  }
-  *out_ptr = reinterpret_cast<uint8_t *>(OPENSSL_memdup(cbs->data, cbs->len));
-  if (*out_ptr == NULL) {
-    return 0;
-  }
-  *out_len = cbs->len;
-  return 1;
-}
-
-int CBS_strdup(const CBS *cbs, char **out_ptr) {
-  if (*out_ptr != NULL) {
-    OPENSSL_free(*out_ptr);
-  }
-  *out_ptr = OPENSSL_strndup((const char *)cbs->data, cbs->len);
-  return (*out_ptr != NULL);
-}
-
-int CBS_contains_zero_byte(const CBS *cbs) {
-  return OPENSSL_memchr(cbs->data, 0, cbs->len) != NULL;
-}
-
-int CBS_mem_equal(const CBS *cbs, const uint8_t *data, size_t len) {
-  if (len != cbs->len) {
-    return 0;
-  }
-  return CRYPTO_memcmp(cbs->data, data, len) == 0;
-}
-
-static int cbs_get_u(CBS *cbs, uint64_t *out, size_t len) {
-  uint64_t result = 0;
-  const uint8_t *data;
-
-  if (!cbs_get(cbs, &data, len)) {
-    return 0;
-  }
-  for (size_t i = 0; i < len; i++) {
-    result <<= 8;
-    result |= data[i];
-  }
-  *out = result;
-  return 1;
-}
-
-int CBS_get_u8(CBS *cbs, uint8_t *out) {
-  const uint8_t *v;
-  if (!cbs_get(cbs, &v, 1)) {
-    return 0;
-  }
-  *out = *v;
-  return 1;
-}
-
-int CBS_get_u16(CBS *cbs, uint16_t *out) {
-  uint64_t v;
-  if (!cbs_get_u(cbs, &v, 2)) {
-    return 0;
-  }
-  *out = v;
-  return 1;
-}
-
-int CBS_get_u16le(CBS *cbs, uint16_t *out) {
-  if (!CBS_get_u16(cbs, out)) {
-    return 0;
-  }
-  *out = CRYPTO_bswap2(*out);
-  return 1;
-}
-
-int CBS_get_u24(CBS *cbs, uint32_t *out) {
-  uint64_t v;
-  if (!cbs_get_u(cbs, &v, 3)) {
-    return 0;
-  }
-  *out = (uint32_t)v;
-  return 1;
-}
-
-int CBS_get_u32(CBS *cbs, uint32_t *out) {
-  uint64_t v;
-  if (!cbs_get_u(cbs, &v, 4)) {
-    return 0;
-  }
-  *out = (uint32_t)v;
-  return 1;
-}
-
-int CBS_get_u32le(CBS *cbs, uint32_t *out) {
-  if (!CBS_get_u32(cbs, out)) {
-    return 0;
-  }
-  *out = CRYPTO_bswap4(*out);
-  return 1;
-}
-
-int CBS_get_u64(CBS *cbs, uint64_t *out) { return cbs_get_u(cbs, out, 8); }
-
-int CBS_get_u64le(CBS *cbs, uint64_t *out) {
-  if (!cbs_get_u(cbs, out, 8)) {
-    return 0;
-  }
-  *out = CRYPTO_bswap8(*out);
-  return 1;
-}
-
-int CBS_get_last_u8(CBS *cbs, uint8_t *out) {
-  if (cbs->len == 0) {
-    return 0;
-  }
-  *out = cbs->data[cbs->len - 1];
-  cbs->len--;
-  return 1;
-}
-
-int CBS_get_bytes(CBS *cbs, CBS *out, size_t len) {
-  const uint8_t *v;
-  if (!cbs_get(cbs, &v, len)) {
-    return 0;
-  }
-  CBS_init(out, v, len);
-  return 1;
-}
-
-int CBS_copy_bytes(CBS *cbs, uint8_t *out, size_t len) {
-  const uint8_t *v;
-  if (!cbs_get(cbs, &v, len)) {
-    return 0;
-  }
-  OPENSSL_memcpy(out, v, len);
-  return 1;
-}
-
-static int cbs_get_length_prefixed(CBS *cbs, CBS *out, size_t len_len) {
-  uint64_t len;
-  if (!cbs_get_u(cbs, &len, len_len)) {
-    return 0;
-  }
-  // If |len_len| <= 3 then we know that |len| will fit into a |size_t|, even on
-  // 32-bit systems.
-  assert(len_len <= 3);
-  return CBS_get_bytes(cbs, out, len);
-}
-
-int CBS_get_u8_length_prefixed(CBS *cbs, CBS *out) {
-  return cbs_get_length_prefixed(cbs, out, 1);
-}
-
-int CBS_get_u16_length_prefixed(CBS *cbs, CBS *out) {
-  return cbs_get_length_prefixed(cbs, out, 2);
-}
-
-int CBS_get_u24_length_prefixed(CBS *cbs, CBS *out) {
-  return cbs_get_length_prefixed(cbs, out, 3);
-}
-
-int CBS_get_until_first(CBS *cbs, CBS *out, uint8_t c) {
-  const uint8_t *split = reinterpret_cast<const uint8_t *>(
-      OPENSSL_memchr(CBS_data(cbs), c, CBS_len(cbs)));
-  if (split == NULL) {
-    return 0;
-  }
-  return CBS_get_bytes(cbs, out, split - CBS_data(cbs));
-}
-
-int CBS_get_u64_decimal(CBS *cbs, uint64_t *out) {
-  uint64_t v = 0;
-  int seen_digit = 0;
-  while (CBS_len(cbs) != 0) {
-    uint8_t c = CBS_data(cbs)[0];
-    if (!OPENSSL_isdigit(c)) {
-      break;
-    }
-    CBS_skip(cbs, 1);
-    if (/* Forbid stray leading zeros */
-        (v == 0 && seen_digit) ||
-        // Check for overflow.
-        v > UINT64_MAX / 10 ||  //
-        v * 10 > UINT64_MAX - (c - '0')) {
-      return 0;
-    }
-    v = v * 10 + (c - '0');
-    seen_digit = 1;
-  }
-
-  *out = v;
-  return seen_digit;
-}
-
-// parse_base128_integer reads a big-endian base-128 integer from |cbs| and sets
-// |*out| to the result. This is the encoding used in DER for both high tag
-// number form and OID components.
-static int parse_base128_integer(CBS *cbs, uint64_t *out) {
-  uint64_t v = 0;
-  uint8_t b;
-  do {
-    if (!CBS_get_u8(cbs, &b)) {
-      return 0;
-    }
-    if ((v >> (64 - 7)) != 0) {
-      // The value is too large.
-      return 0;
-    }
-    if (v == 0 && b == 0x80) {
-      // The value must be minimally encoded.
-      return 0;
-    }
-    v = (v << 7) | (b & 0x7f);
-
-    // Values end at an octet with the high bit cleared.
-  } while (b & 0x80);
-
-  *out = v;
-  return 1;
-}
-
-static int parse_asn1_tag(CBS *cbs, CBS_ASN1_TAG *out) {
-  uint8_t tag_byte;
-  if (!CBS_get_u8(cbs, &tag_byte)) {
-    return 0;
-  }
-
-  // ITU-T X.690 section 8.1.2.3 specifies the format for identifiers with a tag
-  // number no greater than 30.
-  //
-  // If the number portion is 31 (0x1f, the largest value that fits in the
-  // allotted bits), then the tag is more than one byte long and the
-  // continuation bytes contain the tag number.
-  CBS_ASN1_TAG tag = ((CBS_ASN1_TAG)tag_byte & 0xe0) << CBS_ASN1_TAG_SHIFT;
-  CBS_ASN1_TAG tag_number = tag_byte & 0x1f;
-  if (tag_number == 0x1f) {
-    uint64_t v;
-    if (!parse_base128_integer(cbs, &v) ||
-        // Check the tag number is within our supported bounds.
-        v > CBS_ASN1_TAG_NUMBER_MASK ||
-        // Small tag numbers should have used low tag number form, even in BER.
-        v < 0x1f) {
-      return 0;
-    }
-    tag_number = (CBS_ASN1_TAG)v;
-  }
-
-  tag |= tag_number;
-
-  // Tag [UNIVERSAL 0] is reserved for use by the encoding. Reject it here to
-  // avoid some ambiguity around ANY values and BER indefinite-length EOCs. See
-  // https://crbug.com/boringssl/455.
-  if ((tag & ~CBS_ASN1_CONSTRUCTED) == 0) {
-    return 0;
-  }
-
-  *out = tag;
-  return 1;
-}
-
-static int cbs_get_any_asn1_element(CBS *cbs, CBS *out, CBS_ASN1_TAG *out_tag,
-                                    size_t *out_header_len, int *out_ber_found,
-                                    int *out_indefinite, int ber_ok) {
-  CBS header = *cbs;
-  CBS throwaway;
-
-  if (out == NULL) {
-    out = &throwaway;
-  }
-  if (ber_ok) {
-    *out_ber_found = 0;
-    *out_indefinite = 0;
-  } else {
-    assert(out_ber_found == NULL);
-    assert(out_indefinite == NULL);
-  }
-
-  CBS_ASN1_TAG tag;
-  if (!parse_asn1_tag(&header, &tag)) {
-    return 0;
-  }
-  if (out_tag != NULL) {
-    *out_tag = tag;
-  }
-
-  uint8_t length_byte;
-  if (!CBS_get_u8(&header, &length_byte)) {
-    return 0;
-  }
-
-  size_t header_len = CBS_len(cbs) - CBS_len(&header);
-
-  size_t len;
-  // The format for the length encoding is specified in ITU-T X.690 section
-  // 8.1.3.
-  if ((length_byte & 0x80) == 0) {
-    // Short form length.
-    len = ((size_t)length_byte) + header_len;
-    if (out_header_len != NULL) {
-      *out_header_len = header_len;
-    }
-  } else {
-    // The high bit indicate that this is the long form, while the next 7 bits
-    // encode the number of subsequent octets used to encode the length (ITU-T
-    // X.690 clause 8.1.3.5.b).
-    const size_t num_bytes = length_byte & 0x7f;
-    uint64_t len64;
-
-    if (ber_ok && (tag & CBS_ASN1_CONSTRUCTED) != 0 && num_bytes == 0) {
-      // indefinite length
-      if (out_header_len != NULL) {
-        *out_header_len = header_len;
-      }
-      *out_ber_found = 1;
-      *out_indefinite = 1;
-      return CBS_get_bytes(cbs, out, header_len);
-    }
-
-    // ITU-T X.690 clause 8.1.3.5.c specifies that the value 0xff shall not be
-    // used as the first byte of the length. If this parser encounters that
-    // value, num_bytes will be parsed as 127, which will fail this check.
-    if (num_bytes == 0 || num_bytes > 4) {
-      return 0;
-    }
-    if (!cbs_get_u(&header, &len64, num_bytes)) {
-      return 0;
-    }
-    // ITU-T X.690 section 10.1 (DER length forms) requires encoding the
-    // length with the minimum number of octets. BER could, technically, have
-    // 125 superfluous zero bytes. We do not attempt to handle that and still
-    // require that the length fit in a |uint32_t| for BER.
-    if (len64 < 128) {
-      // Length should have used short-form encoding.
-      if (ber_ok) {
-        *out_ber_found = 1;
-      } else {
-        return 0;
-      }
-    }
-    if ((len64 >> ((num_bytes - 1) * 8)) == 0) {
-      // Length should have been at least one byte shorter.
-      if (ber_ok) {
-        *out_ber_found = 1;
-      } else {
-        return 0;
-      }
-    }
-    len = len64;
-    if (len + header_len + num_bytes < len) {
-      // Overflow.
-      return 0;
-    }
-    len += header_len + num_bytes;
-    if (out_header_len != NULL) {
-      *out_header_len = header_len + num_bytes;
-    }
-  }
-
-  return CBS_get_bytes(cbs, out, len);
-}
-
-int CBS_get_any_asn1(CBS *cbs, CBS *out, CBS_ASN1_TAG *out_tag) {
-  size_t header_len;
-  if (!CBS_get_any_asn1_element(cbs, out, out_tag, &header_len)) {
-    return 0;
-  }
-
-  if (out && !CBS_skip(out, header_len)) {
-    assert(0);
-    return 0;
-  }
-
-  return 1;
-}
-
-int CBS_get_any_asn1_element(CBS *cbs, CBS *out, CBS_ASN1_TAG *out_tag,
-                             size_t *out_header_len) {
-  return cbs_get_any_asn1_element(cbs, out, out_tag, out_header_len, NULL, NULL,
-                                  /*ber_ok=*/0);
-}
-
-int CBS_get_any_ber_asn1_element(CBS *cbs, CBS *out, CBS_ASN1_TAG *out_tag,
-                                 size_t *out_header_len, int *out_ber_found,
-                                 int *out_indefinite) {
-  int ber_found_temp;
-  return cbs_get_any_asn1_element(
-      cbs, out, out_tag, out_header_len,
-      out_ber_found ? out_ber_found : &ber_found_temp, out_indefinite,
-      /*ber_ok=*/1);
-}
-
-static int cbs_get_asn1(CBS *cbs, CBS *out, CBS_ASN1_TAG tag_value,
-                        int skip_header) {
-  size_t header_len;
-  CBS_ASN1_TAG tag;
-  CBS throwaway;
-
-  if (out == NULL) {
-    out = &throwaway;
-  }
-
-  if (!CBS_get_any_asn1_element(cbs, out, &tag, &header_len) ||
-      tag != tag_value) {
-    return 0;
-  }
-
-  if (skip_header && !CBS_skip(out, header_len)) {
-    assert(0);
-    return 0;
-  }
-
-  return 1;
-}
-
-int CBS_get_asn1(CBS *cbs, CBS *out, CBS_ASN1_TAG tag_value) {
-  return cbs_get_asn1(cbs, out, tag_value, 1 /* skip header */);
-}
-
-int CBS_get_asn1_element(CBS *cbs, CBS *out, CBS_ASN1_TAG tag_value) {
-  return cbs_get_asn1(cbs, out, tag_value, 0 /* include header */);
-}
-
-int CBS_peek_asn1_tag(const CBS *cbs, CBS_ASN1_TAG tag_value) {
-  CBS copy = *cbs;
-  CBS_ASN1_TAG actual_tag;
-  return parse_asn1_tag(&copy, &actual_tag) && tag_value == actual_tag;
-}
-
-int CBS_get_asn1_uint64(CBS *cbs, uint64_t *out) {
-  return CBS_get_asn1_uint64_with_tag(cbs, out, CBS_ASN1_INTEGER);
-}
-
-int CBS_get_asn1_uint64_with_tag(CBS *cbs, uint64_t *out, CBS_ASN1_TAG tag) {
-  CBS bytes;
-  if (!CBS_get_asn1(cbs, &bytes, tag) ||
-      !CBS_is_unsigned_asn1_integer(&bytes)) {
-    return 0;
-  }
-
-  *out = 0;
-  const uint8_t *data = CBS_data(&bytes);
-  size_t len = CBS_len(&bytes);
-  for (size_t i = 0; i < len; i++) {
-    if ((*out >> 56) != 0) {
-      // Too large to represent as a uint64_t.
-      return 0;
-    }
-    *out <<= 8;
-    *out |= data[i];
-  }
-
-  return 1;
-}
-
-int CBS_get_asn1_int64(CBS *cbs, int64_t *out) {
-  return CBS_get_asn1_int64_with_tag(cbs, out, CBS_ASN1_INTEGER);
-}
-
-int CBS_get_asn1_int64_with_tag(CBS *cbs, int64_t *out, CBS_ASN1_TAG tag) {
-  int is_negative;
-  CBS bytes;
-  if (!CBS_get_asn1(cbs, &bytes, tag) ||
-      !CBS_is_valid_asn1_integer(&bytes, &is_negative)) {
-    return 0;
-  }
-  const uint8_t *data = CBS_data(&bytes);
-  const size_t len = CBS_len(&bytes);
-  if (len > sizeof(int64_t)) {
-    return 0;
-  }
-  uint8_t sign_extend[sizeof(int64_t)];
-  OPENSSL_memset(sign_extend, is_negative ? 0xff : 0, sizeof(sign_extend));
-  OPENSSL_memcpy(sign_extend + sizeof(int64_t) - len, data, len);
-  *out = CRYPTO_load_u64_be(sign_extend);
-  return 1;
-}
-
-int CBS_get_asn1_bool(CBS *cbs, int *out) {
-  CBS bytes;
-  if (!CBS_get_asn1(cbs, &bytes, CBS_ASN1_BOOLEAN) || CBS_len(&bytes) != 1) {
-    return 0;
-  }
-
-  const uint8_t value = *CBS_data(&bytes);
-  if (value != 0 && value != 0xff) {
-    return 0;
-  }
-
-  *out = !!value;
-  return 1;
-}
-
-int CBS_get_optional_asn1(CBS *cbs, CBS *out, int *out_present,
-                          CBS_ASN1_TAG tag) {
-  int present = 0;
-
-  if (CBS_peek_asn1_tag(cbs, tag)) {
-    if (!CBS_get_asn1(cbs, out, tag)) {
-      return 0;
-    }
-    present = 1;
-  }
-
-  if (out_present != NULL) {
-    *out_present = present;
-  }
-
-  return 1;
-}
-
-int CBS_get_optional_asn1_octet_string(CBS *cbs, CBS *out, int *out_present,
-                                       CBS_ASN1_TAG tag) {
-  CBS child;
-  int present;
-  if (!CBS_get_optional_asn1(cbs, &child, &present, tag)) {
-    return 0;
-  }
-  if (present) {
-    assert(out);
-    if (!CBS_get_asn1(&child, out, CBS_ASN1_OCTETSTRING) ||
-        CBS_len(&child) != 0) {
-      return 0;
-    }
-  } else {
-    CBS_init(out, NULL, 0);
-  }
-  if (out_present) {
-    *out_present = present;
-  }
-  return 1;
-}
-
-int CBS_get_optional_asn1_uint64(CBS *cbs, uint64_t *out, CBS_ASN1_TAG tag,
-                                 uint64_t default_value) {
-  CBS child;
-  int present;
-  if (!CBS_get_optional_asn1(cbs, &child, &present, tag)) {
-    return 0;
-  }
-  if (present) {
-    if (!CBS_get_asn1_uint64(&child, out) || CBS_len(&child) != 0) {
-      return 0;
-    }
-  } else {
-    *out = default_value;
-  }
-  return 1;
-}
-
-int CBS_get_optional_asn1_bool(CBS *cbs, int *out, CBS_ASN1_TAG tag,
-                               int default_value) {
-  CBS child, child2;
-  int present;
-  if (!CBS_get_optional_asn1(cbs, &child, &present, tag)) {
-    return 0;
-  }
-  if (present) {
-    uint8_t boolean;
-
-    if (!CBS_get_asn1(&child, &child2, CBS_ASN1_BOOLEAN) ||
-        CBS_len(&child2) != 1 || CBS_len(&child) != 0) {
-      return 0;
-    }
-
-    boolean = CBS_data(&child2)[0];
-    if (boolean == 0) {
-      *out = 0;
-    } else if (boolean == 0xff) {
-      *out = 1;
-    } else {
-      return 0;
-    }
-  } else {
-    *out = default_value;
-  }
-  return 1;
-}
-
-int CBS_is_valid_asn1_bitstring(const CBS *cbs) {
-  CBS in = *cbs;
-  uint8_t num_unused_bits;
-  if (!CBS_get_u8(&in, &num_unused_bits) || num_unused_bits > 7) {
-    return 0;
-  }
-
-  if (num_unused_bits == 0) {
-    return 1;
-  }
-
-  // All num_unused_bits bits must exist and be zeros.
-  uint8_t last;
-  if (!CBS_get_last_u8(&in, &last) ||
-      (last & ((1 << num_unused_bits) - 1)) != 0) {
-    return 0;
-  }
-
-  return 1;
-}
-
-int CBS_asn1_bitstring_has_bit(const CBS *cbs, unsigned bit) {
-  if (!CBS_is_valid_asn1_bitstring(cbs)) {
-    return 0;
-  }
-
-  const unsigned byte_num = (bit >> 3) + 1;
-  const unsigned bit_num = 7 - (bit & 7);
-
-  // Unused bits are zero, and this function does not distinguish between
-  // missing and unset bits. Thus it is sufficient to do a byte-level length
-  // check.
-  return byte_num < CBS_len(cbs) &&
-         (CBS_data(cbs)[byte_num] & (1 << bit_num)) != 0;
-}
-
-int CBS_is_valid_asn1_integer(const CBS *cbs, int *out_is_negative) {
-  CBS copy = *cbs;
-  uint8_t first_byte, second_byte;
-  if (!CBS_get_u8(&copy, &first_byte)) {
-    return 0;  // INTEGERs may not be empty.
-  }
-  if (out_is_negative != NULL) {
-    *out_is_negative = (first_byte & 0x80) != 0;
-  }
-  if (!CBS_get_u8(&copy, &second_byte)) {
-    return 1;  // One byte INTEGERs are always minimal.
-  }
-  if ((first_byte == 0x00 && (second_byte & 0x80) == 0) ||
-      (first_byte == 0xff && (second_byte & 0x80) != 0)) {
-    return 0;  // The value is minimal iff the first 9 bits are not all equal.
-  }
-  return 1;
-}
-
-int CBS_is_unsigned_asn1_integer(const CBS *cbs) {
-  int is_negative;
-  return CBS_is_valid_asn1_integer(cbs, &is_negative) && !is_negative;
-}
-
-static int add_decimal(CBB *out, uint64_t v) {
-  char buf[DECIMAL_SIZE(uint64_t) + 1];
-  snprintf(buf, sizeof(buf), "%" PRIu64, v);
-  return CBB_add_bytes(out, (const uint8_t *)buf, strlen(buf));
-}
-
-int CBS_is_valid_asn1_oid(const CBS *cbs) {
-  if (CBS_len(cbs) == 0) {
-    return 0;  // OID encodings cannot be empty.
-  }
-
-  CBS copy = *cbs;
-  uint8_t v, prev = 0;
-  while (CBS_get_u8(&copy, &v)) {
-    // OID encodings are a sequence of minimally-encoded base-128 integers (see
-    // |parse_base128_integer|). If |prev|'s MSB was clear, it was the last byte
-    // of an integer (or |v| is the first byte). |v| is then the first byte of
-    // the next integer. If first byte of an integer is 0x80, it is not
-    // minimally-encoded.
-    if ((prev & 0x80) == 0 && v == 0x80) {
-      return 0;
-    }
-    prev = v;
-  }
-
-  // The last byte should must end an integer encoding.
-  return (prev & 0x80) == 0;
-}
-
-char *CBS_asn1_oid_to_text(const CBS *cbs) {
-  CBS copy = *cbs;
-  CBB cbb;
-  if (!CBB_init(&cbb, 32)) {
-    goto err;
-  }
-
-  // The first component is 40 * value1 + value2, where value1 is 0, 1, or 2.
-  uint64_t v;
-  if (!parse_base128_integer(&copy, &v)) {
-    goto err;
-  }
-
-  if (v >= 80) {
-    if (!CBB_add_bytes(&cbb, (const uint8_t *)"2.", 2) ||
-        !add_decimal(&cbb, v - 80)) {
-      goto err;
-    }
-  } else if (!add_decimal(&cbb, v / 40) || !CBB_add_u8(&cbb, '.') ||
-             !add_decimal(&cbb, v % 40)) {
-    goto err;
-  }
-
-  while (CBS_len(&copy) != 0) {
-    if (!parse_base128_integer(&copy, &v) || !CBB_add_u8(&cbb, '.') ||
-        !add_decimal(&cbb, v)) {
-      goto err;
-    }
-  }
-
-  uint8_t *txt;
-  size_t txt_len;
-  if (!CBB_add_u8(&cbb, '\0') || !CBB_finish(&cbb, &txt, &txt_len)) {
-    goto err;
-  }
-
-  return (char *)txt;
-
-err:
-  CBB_cleanup(&cbb);
-  return NULL;
-}
-
-static int cbs_get_two_digits(CBS *cbs, int *out) {
-  uint8_t first_digit, second_digit;
-  if (!CBS_get_u8(cbs, &first_digit)) {
-    return 0;
-  }
-  if (!OPENSSL_isdigit(first_digit)) {
-    return 0;
-  }
-  if (!CBS_get_u8(cbs, &second_digit)) {
-    return 0;
-  }
-  if (!OPENSSL_isdigit(second_digit)) {
-    return 0;
-  }
-  *out = (first_digit - '0') * 10 + (second_digit - '0');
-  return 1;
-}
-
-static int is_valid_day(int year, int month, int day) {
-  if (day < 1) {
-    return 0;
-  }
-  switch (month) {
-    case 1:
-    case 3:
-    case 5:
-    case 7:
-    case 8:
-    case 10:
-    case 12:
-      return day <= 31;
-    case 4:
-    case 6:
-    case 9:
-    case 11:
-      return day <= 30;
-    case 2:
-      if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
-        return day <= 29;
-      } else {
-        return day <= 28;
-      }
-    default:
-      return 0;
-  }
-}
-
-static int CBS_parse_rfc5280_time_internal(const CBS *cbs, int is_gentime,
-                                           int allow_timezone_offset,
-                                           struct tm *out_tm) {
-  int year, month, day, hour, min, sec, tmp;
-  CBS copy = *cbs;
-  uint8_t tz;
-
-  if (is_gentime) {
-    if (!cbs_get_two_digits(&copy, &tmp)) {
-      return 0;
-    }
-    year = tmp * 100;
-    if (!cbs_get_two_digits(&copy, &tmp)) {
-      return 0;
-    }
-    year += tmp;
-  } else {
-    year = 1900;
-    if (!cbs_get_two_digits(&copy, &tmp)) {
-      return 0;
-    }
-    year += tmp;
-    if (year < 1950) {
-      year += 100;
-    }
-    if (year >= 2050) {
-      return 0;  // A Generalized time must be used.
-    }
-  }
-  if (!cbs_get_two_digits(&copy, &month) || month < 1 ||
-      month > 12 ||  // Reject invalid months.
-      !cbs_get_two_digits(&copy, &day) ||
-      !is_valid_day(year, month, day) ||  // Reject invalid days.
-      !cbs_get_two_digits(&copy, &hour) ||
-      hour > 23 ||  // Reject invalid hours.
-      !cbs_get_two_digits(&copy, &min) ||
-      min > 59 ||  // Reject invalid minutes.
-      !cbs_get_two_digits(&copy, &sec) || sec > 59 || !CBS_get_u8(&copy, &tz)) {
-    return 0;
-  }
-
-  int offset_sign = 0;
-  switch (tz) {
-    case 'Z':
-      break;  // We correctly have 'Z' on the end as per spec.
-    case '+':
-      offset_sign = 1;
-      break;  // Should not be allowed per RFC 5280.
-    case '-':
-      offset_sign = -1;
-      break;  // Should not be allowed per RFC 5280.
-    default:
-      return 0;  // Reject anything else after the time.
-  }
-
-  // If allow_timezone_offset is non-zero, allow for a four digit timezone
-  // offset to be specified even though this is not allowed by RFC 5280. We are
-  // permissive of this for UTCTimes due to the unfortunate existence of
-  // artisinally rolled long lived certificates that were baked into places that
-  // are now difficult to change. These certificates were generated with the
-  // 'openssl' command that permissively allowed the creation of certificates
-  // with notBefore and notAfter times specified as strings for direct
-  // certificate inclusion on the command line. For context see cl/237068815.
-  //
-  // TODO(bbe): This has been expunged from public web-pki as the ecosystem has
-  // managed to encourage CA compliance with standards. We should find a way to
-  // get rid of this or make it off by default.
-  int offset_seconds = 0;
-  if (offset_sign != 0) {
-    if (!allow_timezone_offset) {
-      return 0;
-    }
-    int offset_hours, offset_minutes;
-    if (!cbs_get_two_digits(&copy, &offset_hours) ||
-        offset_hours > 23 ||  // Reject invalid hours.
-        !cbs_get_two_digits(&copy, &offset_minutes) ||
-        offset_minutes > 59) {  // Reject invalid minutes.
-      return 0;
-    }
-    offset_seconds = offset_sign * (offset_hours * 3600 + offset_minutes * 60);
-  }
-
-  if (CBS_len(&copy) != 0) {
-    return 0;  // Reject invalid lengths.
-  }
-
-  if (out_tm != NULL) {
-    // Fill in the tm fields corresponding to what we validated.
-    out_tm->tm_year = year - 1900;
-    out_tm->tm_mon = month - 1;
-    out_tm->tm_mday = day;
-    out_tm->tm_hour = hour;
-    out_tm->tm_min = min;
-    out_tm->tm_sec = sec;
-    if (offset_seconds && !OPENSSL_gmtime_adj(out_tm, 0, offset_seconds)) {
-      return 0;
-    }
-  }
-  return 1;
-}
-
-int CBS_parse_generalized_time(const CBS *cbs, struct tm *out_tm,
-                               int allow_timezone_offset) {
-  return CBS_parse_rfc5280_time_internal(cbs, 1, allow_timezone_offset, out_tm);
-}
-
-int CBS_parse_utc_time(const CBS *cbs, struct tm *out_tm,
-                       int allow_timezone_offset) {
-  return CBS_parse_rfc5280_time_internal(cbs, 0, allow_timezone_offset, out_tm);
-}
diff --git a/src/crypto/bytestring/internal.h b/src/crypto/bytestring/internal.h
deleted file mode 100644
index 110fb95..0000000
--- a/src/crypto/bytestring/internal.h
+++ /dev/null
@@ -1,74 +0,0 @@
-// Copyright 2014 The BoringSSL Authors
-//
-// 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
-//
-//     https://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 OPENSSL_HEADER_CRYPTO_BYTESTRING_INTERNAL_H
-#define OPENSSL_HEADER_CRYPTO_BYTESTRING_INTERNAL_H
-
-#include <openssl/base.h>
-
-#if defined(__cplusplus)
-extern "C" {
-#endif
-
-
-// CBS_asn1_ber_to_der reads a BER element from |in|. If it finds
-// indefinite-length elements or constructed strings then it converts the BER
-// data to DER, sets |out| to the converted contents and |*out_storage| to a
-// buffer which the caller must release with |OPENSSL_free|. Otherwise, it sets
-// |out| to the original BER element in |in| and |*out_storage| to NULL.
-// Additionally, |*in| will be advanced over the BER element.
-//
-// This function should successfully process any valid BER input, however it
-// will not convert all of BER's deviations from DER. BER is ambiguous between
-// implicitly-tagged SEQUENCEs of strings and implicitly-tagged constructed
-// strings. Implicitly-tagged strings must be parsed with
-// |CBS_get_ber_implicitly_tagged_string| instead of |CBS_get_asn1|. The caller
-// must also account for BER variations in the contents of a primitive.
-//
-// It returns one on success and zero otherwise.
-OPENSSL_EXPORT int CBS_asn1_ber_to_der(CBS *in, CBS *out,
-                                       uint8_t **out_storage);
-
-// CBS_get_asn1_implicit_string parses a BER string of primitive type
-// |inner_tag| implicitly-tagged with |outer_tag|. It sets |out| to the
-// contents. If concatenation was needed, it sets |*out_storage| to a buffer
-// which the caller must release with |OPENSSL_free|. Otherwise, it sets
-// |*out_storage| to NULL.
-//
-// This function does not parse all of BER. It requires the string be
-// definite-length. Constructed strings are allowed, but all children of the
-// outermost element must be primitive. The caller should use
-// |CBS_asn1_ber_to_der| before running this function.
-//
-// It returns one on success and zero otherwise.
-OPENSSL_EXPORT int CBS_get_asn1_implicit_string(CBS *in, CBS *out,
-                                                uint8_t **out_storage,
-                                                CBS_ASN1_TAG outer_tag,
-                                                CBS_ASN1_TAG inner_tag);
-
-// CBB_finish_i2d calls |CBB_finish| on |cbb| which must have been initialized
-// with |CBB_init|. If |outp| is not NULL then the result is written to |*outp|
-// and |*outp| is advanced just past the output. It returns the number of bytes
-// in the result, whether written or not, or a negative value on error. On
-// error, it calls |CBB_cleanup| on |cbb|.
-//
-// This function may be used to help implement legacy i2d ASN.1 functions.
-int CBB_finish_i2d(CBB *cbb, uint8_t **outp);
-
-
-#if defined(__cplusplus)
-}  // extern C
-#endif
-
-#endif  // OPENSSL_HEADER_CRYPTO_BYTESTRING_INTERNAL_H
diff --git a/src/crypto/bytestring/unicode.cc b/src/crypto/bytestring/unicode.cc
deleted file mode 100644
index 74f558e..0000000
--- a/src/crypto/bytestring/unicode.cc
+++ /dev/null
@@ -1,156 +0,0 @@
-// Copyright 2018 The BoringSSL Authors
-//
-// 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
-//
-//     https://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 <openssl/bytestring.h>
-
-#include "internal.h"
-
-
-static int is_valid_code_point(uint32_t v) {
-  // References in the following are to Unicode 15.0.0.
-  if (// The Unicode space runs from zero to 0x10ffff (3.4 D9).
-      v > 0x10ffff ||
-      // Values 0x...fffe, 0x...ffff, and 0xfdd0-0xfdef are permanently reserved
-      // as noncharacters (3.4 D14). See also 23.7. As our APIs are intended for
-      // "open interchange", such as ASN.1, we reject them.
-      (v & 0xfffe) == 0xfffe ||
-      (v >= 0xfdd0 && v <= 0xfdef) ||
-      // Surrogate code points are invalid (3.2 C1).
-      (v >= 0xd800 && v <= 0xdfff)) {
-    return 0;
-  }
-  return 1;
-}
-
-// BOTTOM_BITS returns a byte with the bottom |n| bits set.
-#define BOTTOM_BITS(n) (uint8_t)((1u << (n)) - 1)
-
-// TOP_BITS returns a byte with the top |n| bits set.
-#define TOP_BITS(n) ((uint8_t)~BOTTOM_BITS(8 - (n)))
-
-int CBS_get_utf8(CBS *cbs, uint32_t *out) {
-  uint8_t c;
-  if (!CBS_get_u8(cbs, &c)) {
-    return 0;
-  }
-  if (c <= 0x7f) {
-    *out = c;
-    return 1;
-  }
-  uint32_t v, lower_bound;
-  size_t len;
-  if ((c & TOP_BITS(3)) == TOP_BITS(2)) {
-    v = c & BOTTOM_BITS(5);
-    len = 1;
-    lower_bound = 0x80;
-  } else if ((c & TOP_BITS(4)) == TOP_BITS(3)) {
-    v = c & BOTTOM_BITS(4);
-    len = 2;
-    lower_bound = 0x800;
-  } else if ((c & TOP_BITS(5)) == TOP_BITS(4)) {
-    v = c & BOTTOM_BITS(3);
-    len = 3;
-    lower_bound = 0x10000;
-  } else {
-    return 0;
-  }
-  for (size_t i = 0; i < len; i++) {
-    if (!CBS_get_u8(cbs, &c) ||
-        (c & TOP_BITS(2)) != TOP_BITS(1)) {
-      return 0;
-    }
-    v <<= 6;
-    v |= c & BOTTOM_BITS(6);
-  }
-  if (!is_valid_code_point(v) ||
-      v < lower_bound) {
-    return 0;
-  }
-  *out = v;
-  return 1;
-}
-
-int CBS_get_latin1(CBS *cbs, uint32_t *out) {
-  uint8_t c;
-  if (!CBS_get_u8(cbs, &c)) {
-    return 0;
-  }
-  *out = c;
-  return 1;
-}
-
-int CBS_get_ucs2_be(CBS *cbs, uint32_t *out) {
-  // Note UCS-2 (used by BMPString) does not support surrogates.
-  uint16_t c;
-  if (!CBS_get_u16(cbs, &c) ||
-      !is_valid_code_point(c)) {
-    return 0;
-  }
-  *out = c;
-  return 1;
-}
-
-int CBS_get_utf32_be(CBS *cbs, uint32_t *out) {
-  return CBS_get_u32(cbs, out) && is_valid_code_point(*out);
-}
-
-size_t CBB_get_utf8_len(uint32_t u) {
-  if (u <= 0x7f) {
-    return 1;
-  }
-  if (u <= 0x7ff) {
-    return 2;
-  }
-  if (u <= 0xffff) {
-    return 3;
-  }
-  return 4;
-}
-
-int CBB_add_utf8(CBB *cbb, uint32_t u) {
-  if (!is_valid_code_point(u)) {
-    return 0;
-  }
-  if (u <= 0x7f) {
-    return CBB_add_u8(cbb, (uint8_t)u);
-  }
-  if (u <= 0x7ff) {
-    return CBB_add_u8(cbb, TOP_BITS(2) | (u >> 6)) &&
-           CBB_add_u8(cbb, TOP_BITS(1) | (u & BOTTOM_BITS(6)));
-  }
-  if (u <= 0xffff) {
-    return CBB_add_u8(cbb, TOP_BITS(3) | (u >> 12)) &&
-           CBB_add_u8(cbb, TOP_BITS(1) | ((u >> 6) & BOTTOM_BITS(6))) &&
-           CBB_add_u8(cbb, TOP_BITS(1) | (u & BOTTOM_BITS(6)));
-  }
-  if (u <= 0x10ffff) {
-    return CBB_add_u8(cbb, TOP_BITS(4) | (u >> 18)) &&
-           CBB_add_u8(cbb, TOP_BITS(1) | ((u >> 12) & BOTTOM_BITS(6))) &&
-           CBB_add_u8(cbb, TOP_BITS(1) | ((u >> 6) & BOTTOM_BITS(6))) &&
-           CBB_add_u8(cbb, TOP_BITS(1) | (u & BOTTOM_BITS(6)));
-  }
-  return 0;
-}
-
-int CBB_add_latin1(CBB *cbb, uint32_t u) {
-  return u <= 0xff && CBB_add_u8(cbb, (uint8_t)u);
-}
-
-int CBB_add_ucs2_be(CBB *cbb, uint32_t u) {
-  return u <= 0xffff && is_valid_code_point(u) && CBB_add_u16(cbb, (uint16_t)u);
-}
-
-int CBB_add_utf32_be(CBB *cbb, uint32_t u) {
-  return is_valid_code_point(u) && CBB_add_u32(cbb, u);
-}
diff --git a/src/crypto/chacha/asm/chacha-armv4.pl b/src/crypto/chacha/asm/chacha-armv4.pl
deleted file mode 100755
index 700da12..0000000
--- a/src/crypto/chacha/asm/chacha-armv4.pl
+++ /dev/null
@@ -1,1137 +0,0 @@
-#! /usr/bin/env perl
-# Copyright 2016 The OpenSSL Project Authors. All Rights Reserved.
-#
-# 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
-#
-#     https://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.
-
-#
-# ====================================================================
-# Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
-# project.
-# ====================================================================
-#
-# December 2014
-#
-# ChaCha20 for ARMv4.
-#
-# Performance in cycles per byte out of large buffer.
-#
-#			IALU/gcc-4.4    1xNEON      3xNEON+1xIALU
-#
-# Cortex-A5		19.3(*)/+95%    21.8        14.1
-# Cortex-A8		10.5(*)/+160%   13.9        6.35
-# Cortex-A9		12.9(**)/+110%  14.3        6.50
-# Cortex-A15		11.0/+40%       16.0        5.00
-# Snapdragon S4		11.5/+125%      13.6        4.90
-#
-# (*)	most "favourable" result for aligned data on little-endian
-#	processor, result for misaligned data is 10-15% lower;
-# (**)	this result is a trade-off: it can be improved by 20%,
-#	but then Snapdragon S4 and Cortex-A8 results get
-#	20-25% worse;
-
-$flavour = shift;
-if ($flavour=~/\w[\w\-]*\.\w+$/) { $output=$flavour; undef $flavour; }
-else { while (($output=shift) && ($output!~/\w[\w\-]*\.\w+$/)) {} }
-
-if ($flavour && $flavour ne "void") {
-    $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
-    ( $xlate="${dir}arm-xlate.pl" and -f $xlate ) or
-    ( $xlate="${dir}../../perlasm/arm-xlate.pl" and -f $xlate) or
-    die "can't locate arm-xlate.pl";
-
-    open OUT,"| \"$^X\" \"$xlate\" $flavour \"$output\"";
-    *STDOUT=*OUT;
-} else {
-    open OUT,">$output";
-    *STDOUT=*OUT;
-}
-
-sub AUTOLOAD()		# thunk [simplified] x86-style perlasm
-{ my $opcode = $AUTOLOAD; $opcode =~ s/.*:://; $opcode =~ s/_/\./;
-  my $arg = pop;
-    $arg = "#$arg" if ($arg*1 eq $arg);
-    $code .= "\t$opcode\t".join(',',@_,$arg)."\n";
-}
-
-my @x=map("r$_",(0..7,"x","x","x","x",12,"x",14,"x"));
-my @t=map("r$_",(8..11));
-
-sub ROUND {
-my ($a0,$b0,$c0,$d0)=@_;
-my ($a1,$b1,$c1,$d1)=map(($_&~3)+(($_+1)&3),($a0,$b0,$c0,$d0));
-my ($a2,$b2,$c2,$d2)=map(($_&~3)+(($_+1)&3),($a1,$b1,$c1,$d1));
-my ($a3,$b3,$c3,$d3)=map(($_&~3)+(($_+1)&3),($a2,$b2,$c2,$d2));
-my $odd = $d0&1;
-my ($xc,$xc_) = (@t[0..1]);
-my ($xd,$xd_) = $odd ? (@t[2],@x[$d1]) : (@x[$d0],@t[2]);
-my @ret;
-
-	# Consider order in which variables are addressed by their
-	# index:
-	#
-	#       a   b   c   d
-	#
-	#       0   4   8  12 < even round
-	#       1   5   9  13
-	#       2   6  10  14
-	#       3   7  11  15
-	#       0   5  10  15 < odd round
-	#       1   6  11  12
-	#       2   7   8  13
-	#       3   4   9  14
-	#
-	# 'a', 'b' are permanently allocated in registers, @x[0..7],
-	# while 'c's and pair of 'd's are maintained in memory. If
-	# you observe 'c' column, you'll notice that pair of 'c's is
-	# invariant between rounds. This means that we have to reload
-	# them once per round, in the middle. This is why you'll see
-	# bunch of 'c' stores and loads in the middle, but none in
-	# the beginning or end. If you observe 'd' column, you'll
-	# notice that 15 and 13 are reused in next pair of rounds.
-	# This is why these two are chosen for offloading to memory,
-	# to make loads count more.
-							push @ret,(
-	"&add	(@x[$a0],@x[$a0],@x[$b0])",
-	"&mov	($xd,$xd,'ror#16')",
-	 "&add	(@x[$a1],@x[$a1],@x[$b1])",
-	 "&mov	($xd_,$xd_,'ror#16')",
-	"&eor	($xd,$xd,@x[$a0],'ror#16')",
-	 "&eor	($xd_,$xd_,@x[$a1],'ror#16')",
-
-	"&add	($xc,$xc,$xd)",
-	"&mov	(@x[$b0],@x[$b0],'ror#20')",
-	 "&add	($xc_,$xc_,$xd_)",
-	 "&mov	(@x[$b1],@x[$b1],'ror#20')",
-	"&eor	(@x[$b0],@x[$b0],$xc,'ror#20')",
-	 "&eor	(@x[$b1],@x[$b1],$xc_,'ror#20')",
-
-	"&add	(@x[$a0],@x[$a0],@x[$b0])",
-	"&mov	($xd,$xd,'ror#24')",
-	 "&add	(@x[$a1],@x[$a1],@x[$b1])",
-	 "&mov	($xd_,$xd_,'ror#24')",
-	"&eor	($xd,$xd,@x[$a0],'ror#24')",
-	 "&eor	($xd_,$xd_,@x[$a1],'ror#24')",
-
-	"&add	($xc,$xc,$xd)",
-	"&mov	(@x[$b0],@x[$b0],'ror#25')"		);
-							push @ret,(
-	"&str	($xd,'[sp,#4*(16+$d0)]')",
-	"&ldr	($xd,'[sp,#4*(16+$d2)]')"		) if ($odd);
-							push @ret,(
-	 "&add	($xc_,$xc_,$xd_)",
-	 "&mov	(@x[$b1],@x[$b1],'ror#25')"		);
-							push @ret,(
-	 "&str	($xd_,'[sp,#4*(16+$d1)]')",
-	 "&ldr	($xd_,'[sp,#4*(16+$d3)]')"		) if (!$odd);
-							push @ret,(
-	"&eor	(@x[$b0],@x[$b0],$xc,'ror#25')",
-	 "&eor	(@x[$b1],@x[$b1],$xc_,'ror#25')"	);
-
-	$xd=@x[$d2]					if (!$odd);
-	$xd_=@x[$d3]					if ($odd);
-							push @ret,(
-	"&str	($xc,'[sp,#4*(16+$c0)]')",
-	"&ldr	($xc,'[sp,#4*(16+$c2)]')",
-	"&add	(@x[$a2],@x[$a2],@x[$b2])",
-	"&mov	($xd,$xd,'ror#16')",
-	 "&str	($xc_,'[sp,#4*(16+$c1)]')",
-	 "&ldr	($xc_,'[sp,#4*(16+$c3)]')",
-	 "&add	(@x[$a3],@x[$a3],@x[$b3])",
-	 "&mov	($xd_,$xd_,'ror#16')",
-	"&eor	($xd,$xd,@x[$a2],'ror#16')",
-	 "&eor	($xd_,$xd_,@x[$a3],'ror#16')",
-
-	"&add	($xc,$xc,$xd)",
-	"&mov	(@x[$b2],@x[$b2],'ror#20')",
-	 "&add	($xc_,$xc_,$xd_)",
-	 "&mov	(@x[$b3],@x[$b3],'ror#20')",
-	"&eor	(@x[$b2],@x[$b2],$xc,'ror#20')",
-	 "&eor	(@x[$b3],@x[$b3],$xc_,'ror#20')",
-
-	"&add	(@x[$a2],@x[$a2],@x[$b2])",
-	"&mov	($xd,$xd,'ror#24')",
-	 "&add	(@x[$a3],@x[$a3],@x[$b3])",
-	 "&mov	($xd_,$xd_,'ror#24')",
-	"&eor	($xd,$xd,@x[$a2],'ror#24')",
-	 "&eor	($xd_,$xd_,@x[$a3],'ror#24')",
-
-	"&add	($xc,$xc,$xd)",
-	"&mov	(@x[$b2],@x[$b2],'ror#25')",
-	 "&add	($xc_,$xc_,$xd_)",
-	 "&mov	(@x[$b3],@x[$b3],'ror#25')",
-	"&eor	(@x[$b2],@x[$b2],$xc,'ror#25')",
-	 "&eor	(@x[$b3],@x[$b3],$xc_,'ror#25')"	);
-
-	@ret;
-}
-
-$code.=<<___;
-@ Silence ARMv8 deprecated IT instruction warnings. This file is used by both
-@ ARMv7 and ARMv8 processors and does not use ARMv8 instructions.
-.arch  armv7-a
-
-.text
-#if defined(__thumb2__) || defined(__clang__)
-.syntax	unified
-#endif
-#if defined(__thumb2__)
-.thumb
-#else
-.code	32
-#endif
-
-#if defined(__thumb2__) || defined(__clang__)
-#define ldrhsb	ldrbhs
-#endif
-
-.align	5
-.Lsigma:
-.long	0x61707865,0x3320646e,0x79622d32,0x6b206574	@ endian-neutral
-.Lone:
-.long	1,0,0,0
-
-.globl	ChaCha20_ctr32_nohw
-.type	ChaCha20_ctr32_nohw,%function
-.align	5
-ChaCha20_ctr32_nohw:
-	ldr	r12,[sp,#0]		@ pull pointer to counter and nonce
-	stmdb	sp!,{r0-r2,r4-r11,lr}
-	adr	r14,.Lsigma
-	ldmia	r12,{r4-r7}		@ load counter and nonce
-	sub	sp,sp,#4*(16)		@ off-load area
-	stmdb	sp!,{r4-r7}		@ copy counter and nonce
-	ldmia	r3,{r4-r11}		@ load key
-	ldmia	r14,{r0-r3}		@ load sigma
-	stmdb	sp!,{r4-r11}		@ copy key
-	stmdb	sp!,{r0-r3}		@ copy sigma
-	str	r10,[sp,#4*(16+10)]	@ off-load "@x[10]"
-	str	r11,[sp,#4*(16+11)]	@ off-load "@x[11]"
-	b	.Loop_outer_enter
-
-.align	4
-.Loop_outer:
-	ldmia	sp,{r0-r9}		@ load key material
-	str	@t[3],[sp,#4*(32+2)]	@ save len
-	str	r12,  [sp,#4*(32+1)]	@ save inp
-	str	r14,  [sp,#4*(32+0)]	@ save out
-.Loop_outer_enter:
-	ldr	@t[3], [sp,#4*(15)]
-	ldr	@x[12],[sp,#4*(12)]	@ modulo-scheduled load
-	ldr	@t[2], [sp,#4*(13)]
-	ldr	@x[14],[sp,#4*(14)]
-	str	@t[3], [sp,#4*(16+15)]
-	mov	@t[3],#10
-	b	.Loop
-
-.align	4
-.Loop:
-	subs	@t[3],@t[3],#1
-___
-	foreach (&ROUND(0, 4, 8,12)) { eval; }
-	foreach (&ROUND(0, 5,10,15)) { eval; }
-$code.=<<___;
-	bne	.Loop
-
-	ldr	@t[3],[sp,#4*(32+2)]	@ load len
-
-	str	@t[0], [sp,#4*(16+8)]	@ modulo-scheduled store
-	str	@t[1], [sp,#4*(16+9)]
-	str	@x[12],[sp,#4*(16+12)]
-	str	@t[2], [sp,#4*(16+13)]
-	str	@x[14],[sp,#4*(16+14)]
-
-	@ at this point we have first half of 512-bit result in
-	@ @x[0-7] and second half at sp+4*(16+8)
-
-	cmp	@t[3],#64		@ done yet?
-#ifdef	__thumb2__
-	itete	lo
-#endif
-	addlo	r12,sp,#4*(0)		@ shortcut or ...
-	ldrhs	r12,[sp,#4*(32+1)]	@ ... load inp
-	addlo	r14,sp,#4*(0)		@ shortcut or ...
-	ldrhs	r14,[sp,#4*(32+0)]	@ ... load out
-
-	ldr	@t[0],[sp,#4*(0)]	@ load key material
-	ldr	@t[1],[sp,#4*(1)]
-
-#if __ARM_ARCH>=6 || !defined(__ARMEB__)
-# if __ARM_ARCH<7
-	orr	@t[2],r12,r14
-	tst	@t[2],#3		@ are input and output aligned?
-	ldr	@t[2],[sp,#4*(2)]
-	bne	.Lunaligned
-	cmp	@t[3],#64		@ restore flags
-# else
-	ldr	@t[2],[sp,#4*(2)]
-# endif
-	ldr	@t[3],[sp,#4*(3)]
-
-	add	@x[0],@x[0],@t[0]	@ accumulate key material
-	add	@x[1],@x[1],@t[1]
-# ifdef	__thumb2__
-	itt	hs
-# endif
-	ldrhs	@t[0],[r12],#16		@ load input
-	ldrhs	@t[1],[r12,#-12]
-
-	add	@x[2],@x[2],@t[2]
-	add	@x[3],@x[3],@t[3]
-# ifdef	__thumb2__
-	itt	hs
-# endif
-	ldrhs	@t[2],[r12,#-8]
-	ldrhs	@t[3],[r12,#-4]
-# if __ARM_ARCH>=6 && defined(__ARMEB__)
-	rev	@x[0],@x[0]
-	rev	@x[1],@x[1]
-	rev	@x[2],@x[2]
-	rev	@x[3],@x[3]
-# endif
-# ifdef	__thumb2__
-	itt	hs
-# endif
-	eorhs	@x[0],@x[0],@t[0]	@ xor with input
-	eorhs	@x[1],@x[1],@t[1]
-	 add	@t[0],sp,#4*(4)
-	str	@x[0],[r14],#16		@ store output
-# ifdef	__thumb2__
-	itt	hs
-# endif
-	eorhs	@x[2],@x[2],@t[2]
-	eorhs	@x[3],@x[3],@t[3]
-	 ldmia	@t[0],{@t[0]-@t[3]}	@ load key material
-	str	@x[1],[r14,#-12]
-	str	@x[2],[r14,#-8]
-	str	@x[3],[r14,#-4]
-
-	add	@x[4],@x[4],@t[0]	@ accumulate key material
-	add	@x[5],@x[5],@t[1]
-# ifdef	__thumb2__
-	itt	hs
-# endif
-	ldrhs	@t[0],[r12],#16		@ load input
-	ldrhs	@t[1],[r12,#-12]
-	add	@x[6],@x[6],@t[2]
-	add	@x[7],@x[7],@t[3]
-# ifdef	__thumb2__
-	itt	hs
-# endif
-	ldrhs	@t[2],[r12,#-8]
-	ldrhs	@t[3],[r12,#-4]
-# if __ARM_ARCH>=6 && defined(__ARMEB__)
-	rev	@x[4],@x[4]
-	rev	@x[5],@x[5]
-	rev	@x[6],@x[6]
-	rev	@x[7],@x[7]
-# endif
-# ifdef	__thumb2__
-	itt	hs
-# endif
-	eorhs	@x[4],@x[4],@t[0]
-	eorhs	@x[5],@x[5],@t[1]
-	 add	@t[0],sp,#4*(8)
-	str	@x[4],[r14],#16		@ store output
-# ifdef	__thumb2__
-	itt	hs
-# endif
-	eorhs	@x[6],@x[6],@t[2]
-	eorhs	@x[7],@x[7],@t[3]
-	str	@x[5],[r14,#-12]
-	 ldmia	@t[0],{@t[0]-@t[3]}	@ load key material
-	str	@x[6],[r14,#-8]
-	 add	@x[0],sp,#4*(16+8)
-	str	@x[7],[r14,#-4]
-
-	ldmia	@x[0],{@x[0]-@x[7]}	@ load second half
-
-	add	@x[0],@x[0],@t[0]	@ accumulate key material
-	add	@x[1],@x[1],@t[1]
-# ifdef	__thumb2__
-	itt	hs
-# endif
-	ldrhs	@t[0],[r12],#16		@ load input
-	ldrhs	@t[1],[r12,#-12]
-# ifdef	__thumb2__
-	itt	hi
-# endif
-	 strhi	@t[2],[sp,#4*(16+10)]	@ copy "@x[10]" while at it
-	 strhi	@t[3],[sp,#4*(16+11)]	@ copy "@x[11]" while at it
-	add	@x[2],@x[2],@t[2]
-	add	@x[3],@x[3],@t[3]
-# ifdef	__thumb2__
-	itt	hs
-# endif
-	ldrhs	@t[2],[r12,#-8]
-	ldrhs	@t[3],[r12,#-4]
-# if __ARM_ARCH>=6 && defined(__ARMEB__)
-	rev	@x[0],@x[0]
-	rev	@x[1],@x[1]
-	rev	@x[2],@x[2]
-	rev	@x[3],@x[3]
-# endif
-# ifdef	__thumb2__
-	itt	hs
-# endif
-	eorhs	@x[0],@x[0],@t[0]
-	eorhs	@x[1],@x[1],@t[1]
-	 add	@t[0],sp,#4*(12)
-	str	@x[0],[r14],#16		@ store output
-# ifdef	__thumb2__
-	itt	hs
-# endif
-	eorhs	@x[2],@x[2],@t[2]
-	eorhs	@x[3],@x[3],@t[3]
-	str	@x[1],[r14,#-12]
-	 ldmia	@t[0],{@t[0]-@t[3]}	@ load key material
-	str	@x[2],[r14,#-8]
-	str	@x[3],[r14,#-4]
-
-	add	@x[4],@x[4],@t[0]	@ accumulate key material
-	add	@x[5],@x[5],@t[1]
-# ifdef	__thumb2__
-	itt	hi
-# endif
-	 addhi	@t[0],@t[0],#1		@ next counter value
-	 strhi	@t[0],[sp,#4*(12)]	@ save next counter value
-# ifdef	__thumb2__
-	itt	hs
-# endif
-	ldrhs	@t[0],[r12],#16		@ load input
-	ldrhs	@t[1],[r12,#-12]
-	add	@x[6],@x[6],@t[2]
-	add	@x[7],@x[7],@t[3]
-# ifdef	__thumb2__
-	itt	hs
-# endif
-	ldrhs	@t[2],[r12,#-8]
-	ldrhs	@t[3],[r12,#-4]
-# if __ARM_ARCH>=6 && defined(__ARMEB__)
-	rev	@x[4],@x[4]
-	rev	@x[5],@x[5]
-	rev	@x[6],@x[6]
-	rev	@x[7],@x[7]
-# endif
-# ifdef	__thumb2__
-	itt	hs
-# endif
-	eorhs	@x[4],@x[4],@t[0]
-	eorhs	@x[5],@x[5],@t[1]
-# ifdef	__thumb2__
-	 it	ne
-# endif
-	 ldrne	@t[0],[sp,#4*(32+2)]	@ re-load len
-# ifdef	__thumb2__
-	itt	hs
-# endif
-	eorhs	@x[6],@x[6],@t[2]
-	eorhs	@x[7],@x[7],@t[3]
-	str	@x[4],[r14],#16		@ store output
-	str	@x[5],[r14,#-12]
-# ifdef	__thumb2__
-	it	hs
-# endif
-	 subhs	@t[3],@t[0],#64		@ len-=64
-	str	@x[6],[r14,#-8]
-	str	@x[7],[r14,#-4]
-	bhi	.Loop_outer
-
-	beq	.Ldone
-# if __ARM_ARCH<7
-	b	.Ltail
-
-.align	4
-.Lunaligned:				@ unaligned endian-neutral path
-	cmp	@t[3],#64		@ restore flags
-# endif
-#endif
-#if __ARM_ARCH<7
-	ldr	@t[3],[sp,#4*(3)]
-___
-for ($i=0;$i<16;$i+=4) {
-my $j=$i&0x7;
-
-$code.=<<___	if ($i==4);
-	add	@x[0],sp,#4*(16+8)
-___
-$code.=<<___	if ($i==8);
-	ldmia	@x[0],{@x[0]-@x[7]}		@ load second half
-# ifdef	__thumb2__
-	itt	hi
-# endif
-	strhi	@t[2],[sp,#4*(16+10)]		@ copy "@x[10]"
-	strhi	@t[3],[sp,#4*(16+11)]		@ copy "@x[11]"
-___
-$code.=<<___;
-	add	@x[$j+0],@x[$j+0],@t[0]		@ accumulate key material
-___
-$code.=<<___	if ($i==12);
-# ifdef	__thumb2__
-	itt	hi
-# endif
-	addhi	@t[0],@t[0],#1			@ next counter value
-	strhi	@t[0],[sp,#4*(12)]		@ save next counter value
-___
-$code.=<<___;
-	add	@x[$j+1],@x[$j+1],@t[1]
-	add	@x[$j+2],@x[$j+2],@t[2]
-# ifdef	__thumb2__
-	itete	lo
-# endif
-	eorlo	@t[0],@t[0],@t[0]		@ zero or ...
-	ldrhsb	@t[0],[r12],#16			@ ... load input
-	eorlo	@t[1],@t[1],@t[1]
-	ldrhsb	@t[1],[r12,#-12]
-
-	add	@x[$j+3],@x[$j+3],@t[3]
-# ifdef	__thumb2__
-	itete	lo
-# endif
-	eorlo	@t[2],@t[2],@t[2]
-	ldrhsb	@t[2],[r12,#-8]
-	eorlo	@t[3],@t[3],@t[3]
-	ldrhsb	@t[3],[r12,#-4]
-
-	eor	@x[$j+0],@t[0],@x[$j+0]		@ xor with input (or zero)
-	eor	@x[$j+1],@t[1],@x[$j+1]
-# ifdef	__thumb2__
-	itt	hs
-# endif
-	ldrhsb	@t[0],[r12,#-15]		@ load more input
-	ldrhsb	@t[1],[r12,#-11]
-	eor	@x[$j+2],@t[2],@x[$j+2]
-	 strb	@x[$j+0],[r14],#16		@ store output
-	eor	@x[$j+3],@t[3],@x[$j+3]
-# ifdef	__thumb2__
-	itt	hs
-# endif
-	ldrhsb	@t[2],[r12,#-7]
-	ldrhsb	@t[3],[r12,#-3]
-	 strb	@x[$j+1],[r14,#-12]
-	eor	@x[$j+0],@t[0],@x[$j+0],lsr#8
-	 strb	@x[$j+2],[r14,#-8]
-	eor	@x[$j+1],@t[1],@x[$j+1],lsr#8
-# ifdef	__thumb2__
-	itt	hs
-# endif
-	ldrhsb	@t[0],[r12,#-14]		@ load more input
-	ldrhsb	@t[1],[r12,#-10]
-	 strb	@x[$j+3],[r14,#-4]
-	eor	@x[$j+2],@t[2],@x[$j+2],lsr#8
-	 strb	@x[$j+0],[r14,#-15]
-	eor	@x[$j+3],@t[3],@x[$j+3],lsr#8
-# ifdef	__thumb2__
-	itt	hs
-# endif
-	ldrhsb	@t[2],[r12,#-6]
-	ldrhsb	@t[3],[r12,#-2]
-	 strb	@x[$j+1],[r14,#-11]
-	eor	@x[$j+0],@t[0],@x[$j+0],lsr#8
-	 strb	@x[$j+2],[r14,#-7]
-	eor	@x[$j+1],@t[1],@x[$j+1],lsr#8
-# ifdef	__thumb2__
-	itt	hs
-# endif
-	ldrhsb	@t[0],[r12,#-13]		@ load more input
-	ldrhsb	@t[1],[r12,#-9]
-	 strb	@x[$j+3],[r14,#-3]
-	eor	@x[$j+2],@t[2],@x[$j+2],lsr#8
-	 strb	@x[$j+0],[r14,#-14]
-	eor	@x[$j+3],@t[3],@x[$j+3],lsr#8
-# ifdef	__thumb2__
-	itt	hs
-# endif
-	ldrhsb	@t[2],[r12,#-5]
-	ldrhsb	@t[3],[r12,#-1]
-	 strb	@x[$j+1],[r14,#-10]
-	 strb	@x[$j+2],[r14,#-6]
-	eor	@x[$j+0],@t[0],@x[$j+0],lsr#8
-	 strb	@x[$j+3],[r14,#-2]
-	eor	@x[$j+1],@t[1],@x[$j+1],lsr#8
-	 strb	@x[$j+0],[r14,#-13]
-	eor	@x[$j+2],@t[2],@x[$j+2],lsr#8
-	 strb	@x[$j+1],[r14,#-9]
-	eor	@x[$j+3],@t[3],@x[$j+3],lsr#8
-	 strb	@x[$j+2],[r14,#-5]
-	 strb	@x[$j+3],[r14,#-1]
-___
-$code.=<<___	if ($i<12);
-	add	@t[0],sp,#4*(4+$i)
-	ldmia	@t[0],{@t[0]-@t[3]}		@ load key material
-___
-}
-$code.=<<___;
-# ifdef	__thumb2__
-	it	ne
-# endif
-	ldrne	@t[0],[sp,#4*(32+2)]		@ re-load len
-# ifdef	__thumb2__
-	it	hs
-# endif
-	subhs	@t[3],@t[0],#64			@ len-=64
-	bhi	.Loop_outer
-
-	beq	.Ldone
-#endif
-
-.Ltail:
-	ldr	r12,[sp,#4*(32+1)]	@ load inp
-	add	@t[1],sp,#4*(0)
-	ldr	r14,[sp,#4*(32+0)]	@ load out
-
-.Loop_tail:
-	ldrb	@t[2],[@t[1]],#1	@ read buffer on stack
-	ldrb	@t[3],[r12],#1		@ read input
-	subs	@t[0],@t[0],#1
-	eor	@t[3],@t[3],@t[2]
-	strb	@t[3],[r14],#1		@ store output
-	bne	.Loop_tail
-
-.Ldone:
-	add	sp,sp,#4*(32+3)
-	ldmia	sp!,{r4-r11,pc}
-.size	ChaCha20_ctr32_nohw,.-ChaCha20_ctr32_nohw
-___
-
-{{{
-my ($a0,$b0,$c0,$d0,$a1,$b1,$c1,$d1,$a2,$b2,$c2,$d2,$t0,$t1,$t2,$t3) =
-    map("q$_",(0..15));
-
-sub NEONROUND {
-my $odd = pop;
-my ($a,$b,$c,$d,$t)=@_;
-
-	(
-	"&vadd_i32	($a,$a,$b)",
-	"&veor		($d,$d,$a)",
-	"&vrev32_16	($d,$d)",	# vrot ($d,16)
-
-	"&vadd_i32	($c,$c,$d)",
-	"&veor		($t,$b,$c)",
-	"&vshr_u32	($b,$t,20)",
-	"&vsli_32	($b,$t,12)",
-
-	"&vadd_i32	($a,$a,$b)",
-	"&veor		($t,$d,$a)",
-	"&vshr_u32	($d,$t,24)",
-	"&vsli_32	($d,$t,8)",
-
-	"&vadd_i32	($c,$c,$d)",
-	"&veor		($t,$b,$c)",
-	"&vshr_u32	($b,$t,25)",
-	"&vsli_32	($b,$t,7)",
-
-	"&vext_8	($c,$c,$c,8)",
-	"&vext_8	($b,$b,$b,$odd?12:4)",
-	"&vext_8	($d,$d,$d,$odd?4:12)"
-	);
-}
-
-$code.=<<___;
-#if __ARM_MAX_ARCH__>=7
-.arch	armv7-a
-.fpu	neon
-
-.globl	ChaCha20_ctr32_neon
-.type	ChaCha20_ctr32_neon,%function
-.align	5
-ChaCha20_ctr32_neon:
-	ldr		r12,[sp,#0]		@ pull pointer to counter and nonce
-	stmdb		sp!,{r0-r2,r4-r11,lr}
-	adr		r14,.Lsigma
-	vstmdb		sp!,{d8-d15}		@ ABI spec says so
-	stmdb		sp!,{r0-r3}
-
-	vld1.32		{$b0-$c0},[r3]		@ load key
-	ldmia		r3,{r4-r11}		@ load key
-
-	sub		sp,sp,#4*(16+16)
-	vld1.32		{$d0},[r12]		@ load counter and nonce
-	add		r12,sp,#4*8
-	ldmia		r14,{r0-r3}		@ load sigma
-	vld1.32		{$a0},[r14]!		@ load sigma
-	vld1.32		{$t0},[r14]		@ one
-	vst1.32		{$c0-$d0},[r12]		@ copy 1/2key|counter|nonce
-	vst1.32		{$a0-$b0},[sp]		@ copy sigma|1/2key
-
-	str		r10,[sp,#4*(16+10)]	@ off-load "@x[10]"
-	str		r11,[sp,#4*(16+11)]	@ off-load "@x[11]"
-	vshl.i32	$t1#lo,$t0#lo,#1	@ two
-	vstr		$t0#lo,[sp,#4*(16+0)]
-	vshl.i32	$t2#lo,$t0#lo,#2	@ four
-	vstr		$t1#lo,[sp,#4*(16+2)]
-	vmov		$a1,$a0
-	vstr		$t2#lo,[sp,#4*(16+4)]
-	vmov		$a2,$a0
-	vmov		$b1,$b0
-	vmov		$b2,$b0
-	b		.Loop_neon_enter
-
-.align	4
-.Loop_neon_outer:
-	ldmia		sp,{r0-r9}		@ load key material
-	cmp		@t[3],#64*2		@ if len<=64*2
-	bls		.Lbreak_neon		@ switch to integer-only
-	vmov		$a1,$a0
-	str		@t[3],[sp,#4*(32+2)]	@ save len
-	vmov		$a2,$a0
-	str		r12,  [sp,#4*(32+1)]	@ save inp
-	vmov		$b1,$b0
-	str		r14,  [sp,#4*(32+0)]	@ save out
-	vmov		$b2,$b0
-.Loop_neon_enter:
-	ldr		@t[3], [sp,#4*(15)]
-	vadd.i32	$d1,$d0,$t0		@ counter+1
-	ldr		@x[12],[sp,#4*(12)]	@ modulo-scheduled load
-	vmov		$c1,$c0
-	ldr		@t[2], [sp,#4*(13)]
-	vmov		$c2,$c0
-	ldr		@x[14],[sp,#4*(14)]
-	vadd.i32	$d2,$d1,$t0		@ counter+2
-	str		@t[3], [sp,#4*(16+15)]
-	mov		@t[3],#10
-	add		@x[12],@x[12],#3	@ counter+3
-	b		.Loop_neon
-
-.align	4
-.Loop_neon:
-	subs		@t[3],@t[3],#1
-___
-	my @thread0=&NEONROUND($a0,$b0,$c0,$d0,$t0,0);
-	my @thread1=&NEONROUND($a1,$b1,$c1,$d1,$t1,0);
-	my @thread2=&NEONROUND($a2,$b2,$c2,$d2,$t2,0);
-	my @thread3=&ROUND(0,4,8,12);
-
-	foreach (@thread0) {
-		eval;			eval(shift(@thread3));
-		eval(shift(@thread1));	eval(shift(@thread3));
-		eval(shift(@thread2));	eval(shift(@thread3));
-	}
-
-	@thread0=&NEONROUND($a0,$b0,$c0,$d0,$t0,1);
-	@thread1=&NEONROUND($a1,$b1,$c1,$d1,$t1,1);
-	@thread2=&NEONROUND($a2,$b2,$c2,$d2,$t2,1);
-	@thread3=&ROUND(0,5,10,15);
-
-	foreach (@thread0) {
-		eval;			eval(shift(@thread3));
-		eval(shift(@thread1));	eval(shift(@thread3));
-		eval(shift(@thread2));	eval(shift(@thread3));
-	}
-$code.=<<___;
-	bne		.Loop_neon
-
-	add		@t[3],sp,#32
-	vld1.32		{$t0-$t1},[sp]		@ load key material
-	vld1.32		{$t2-$t3},[@t[3]]
-
-	ldr		@t[3],[sp,#4*(32+2)]	@ load len
-
-	str		@t[0], [sp,#4*(16+8)]	@ modulo-scheduled store
-	str		@t[1], [sp,#4*(16+9)]
-	str		@x[12],[sp,#4*(16+12)]
-	str		@t[2], [sp,#4*(16+13)]
-	str		@x[14],[sp,#4*(16+14)]
-
-	@ at this point we have first half of 512-bit result in
-	@ @x[0-7] and second half at sp+4*(16+8)
-
-	ldr		r12,[sp,#4*(32+1)]	@ load inp
-	ldr		r14,[sp,#4*(32+0)]	@ load out
-
-	vadd.i32	$a0,$a0,$t0		@ accumulate key material
-	vadd.i32	$a1,$a1,$t0
-	vadd.i32	$a2,$a2,$t0
-	vldr		$t0#lo,[sp,#4*(16+0)]	@ one
-
-	vadd.i32	$b0,$b0,$t1
-	vadd.i32	$b1,$b1,$t1
-	vadd.i32	$b2,$b2,$t1
-	vldr		$t1#lo,[sp,#4*(16+2)]	@ two
-
-	vadd.i32	$c0,$c0,$t2
-	vadd.i32	$c1,$c1,$t2
-	vadd.i32	$c2,$c2,$t2
-	vadd.i32	$d1#lo,$d1#lo,$t0#lo	@ counter+1
-	vadd.i32	$d2#lo,$d2#lo,$t1#lo	@ counter+2
-
-	vadd.i32	$d0,$d0,$t3
-	vadd.i32	$d1,$d1,$t3
-	vadd.i32	$d2,$d2,$t3
-
-	cmp		@t[3],#64*4
-	blo		.Ltail_neon
-
-	vld1.8		{$t0-$t1},[r12]!	@ load input
-	 mov		@t[3],sp
-	vld1.8		{$t2-$t3},[r12]!
-	veor		$a0,$a0,$t0		@ xor with input
-	veor		$b0,$b0,$t1
-	vld1.8		{$t0-$t1},[r12]!
-	veor		$c0,$c0,$t2
-	veor		$d0,$d0,$t3
-	vld1.8		{$t2-$t3},[r12]!
-
-	veor		$a1,$a1,$t0
-	 vst1.8		{$a0-$b0},[r14]!	@ store output
-	veor		$b1,$b1,$t1
-	vld1.8		{$t0-$t1},[r12]!
-	veor		$c1,$c1,$t2
-	 vst1.8		{$c0-$d0},[r14]!
-	veor		$d1,$d1,$t3
-	vld1.8		{$t2-$t3},[r12]!
-
-	veor		$a2,$a2,$t0
-	 vld1.32	{$a0-$b0},[@t[3]]!	@ load for next iteration
-	 veor		$t0#hi,$t0#hi,$t0#hi
-	 vldr		$t0#lo,[sp,#4*(16+4)]	@ four
-	veor		$b2,$b2,$t1
-	 vld1.32	{$c0-$d0},[@t[3]]
-	veor		$c2,$c2,$t2
-	 vst1.8		{$a1-$b1},[r14]!
-	veor		$d2,$d2,$t3
-	 vst1.8		{$c1-$d1},[r14]!
-
-	vadd.i32	$d0#lo,$d0#lo,$t0#lo	@ next counter value
-	vldr		$t0#lo,[sp,#4*(16+0)]	@ one
-
-	ldmia		sp,{@t[0]-@t[3]}	@ load key material
-	add		@x[0],@x[0],@t[0]	@ accumulate key material
-	ldr		@t[0],[r12],#16		@ load input
-	 vst1.8		{$a2-$b2},[r14]!
-	add		@x[1],@x[1],@t[1]
-	ldr		@t[1],[r12,#-12]
-	 vst1.8		{$c2-$d2},[r14]!
-	add		@x[2],@x[2],@t[2]
-	ldr		@t[2],[r12,#-8]
-	add		@x[3],@x[3],@t[3]
-	ldr		@t[3],[r12,#-4]
-# ifdef	__ARMEB__
-	rev		@x[0],@x[0]
-	rev		@x[1],@x[1]
-	rev		@x[2],@x[2]
-	rev		@x[3],@x[3]
-# endif
-	eor		@x[0],@x[0],@t[0]	@ xor with input
-	 add		@t[0],sp,#4*(4)
-	eor		@x[1],@x[1],@t[1]
-	str		@x[0],[r14],#16		@ store output
-	eor		@x[2],@x[2],@t[2]
-	str		@x[1],[r14,#-12]
-	eor		@x[3],@x[3],@t[3]
-	 ldmia		@t[0],{@t[0]-@t[3]}	@ load key material
-	str		@x[2],[r14,#-8]
-	str		@x[3],[r14,#-4]
-
-	add		@x[4],@x[4],@t[0]	@ accumulate key material
-	ldr		@t[0],[r12],#16		@ load input
-	add		@x[5],@x[5],@t[1]
-	ldr		@t[1],[r12,#-12]
-	add		@x[6],@x[6],@t[2]
-	ldr		@t[2],[r12,#-8]
-	add		@x[7],@x[7],@t[3]
-	ldr		@t[3],[r12,#-4]
-# ifdef	__ARMEB__
-	rev		@x[4],@x[4]
-	rev		@x[5],@x[5]
-	rev		@x[6],@x[6]
-	rev		@x[7],@x[7]
-# endif
-	eor		@x[4],@x[4],@t[0]
-	 add		@t[0],sp,#4*(8)
-	eor		@x[5],@x[5],@t[1]
-	str		@x[4],[r14],#16		@ store output
-	eor		@x[6],@x[6],@t[2]
-	str		@x[5],[r14,#-12]
-	eor		@x[7],@x[7],@t[3]
-	 ldmia		@t[0],{@t[0]-@t[3]}	@ load key material
-	str		@x[6],[r14,#-8]
-	 add		@x[0],sp,#4*(16+8)
-	str		@x[7],[r14,#-4]
-
-	ldmia		@x[0],{@x[0]-@x[7]}	@ load second half
-
-	add		@x[0],@x[0],@t[0]	@ accumulate key material
-	ldr		@t[0],[r12],#16		@ load input
-	add		@x[1],@x[1],@t[1]
-	ldr		@t[1],[r12,#-12]
-# ifdef	__thumb2__
-	it	hi
-# endif
-	 strhi		@t[2],[sp,#4*(16+10)]	@ copy "@x[10]" while at it
-	add		@x[2],@x[2],@t[2]
-	ldr		@t[2],[r12,#-8]
-# ifdef	__thumb2__
-	it	hi
-# endif
-	 strhi		@t[3],[sp,#4*(16+11)]	@ copy "@x[11]" while at it
-	add		@x[3],@x[3],@t[3]
-	ldr		@t[3],[r12,#-4]
-# ifdef	__ARMEB__
-	rev		@x[0],@x[0]
-	rev		@x[1],@x[1]
-	rev		@x[2],@x[2]
-	rev		@x[3],@x[3]
-# endif
-	eor		@x[0],@x[0],@t[0]
-	 add		@t[0],sp,#4*(12)
-	eor		@x[1],@x[1],@t[1]
-	str		@x[0],[r14],#16		@ store output
-	eor		@x[2],@x[2],@t[2]
-	str		@x[1],[r14,#-12]
-	eor		@x[3],@x[3],@t[3]
-	 ldmia		@t[0],{@t[0]-@t[3]}	@ load key material
-	str		@x[2],[r14,#-8]
-	str		@x[3],[r14,#-4]
-
-	add		@x[4],@x[4],@t[0]	@ accumulate key material
-	 add		@t[0],@t[0],#4		@ next counter value
-	add		@x[5],@x[5],@t[1]
-	 str		@t[0],[sp,#4*(12)]	@ save next counter value
-	ldr		@t[0],[r12],#16		@ load input
-	add		@x[6],@x[6],@t[2]
-	 add		@x[4],@x[4],#3		@ counter+3
-	ldr		@t[1],[r12,#-12]
-	add		@x[7],@x[7],@t[3]
-	ldr		@t[2],[r12,#-8]
-	ldr		@t[3],[r12,#-4]
-# ifdef	__ARMEB__
-	rev		@x[4],@x[4]
-	rev		@x[5],@x[5]
-	rev		@x[6],@x[6]
-	rev		@x[7],@x[7]
-# endif
-	eor		@x[4],@x[4],@t[0]
-# ifdef	__thumb2__
-	it	hi
-# endif
-	 ldrhi		@t[0],[sp,#4*(32+2)]	@ re-load len
-	eor		@x[5],@x[5],@t[1]
-	eor		@x[6],@x[6],@t[2]
-	str		@x[4],[r14],#16		@ store output
-	eor		@x[7],@x[7],@t[3]
-	str		@x[5],[r14,#-12]
-	 sub		@t[3],@t[0],#64*4	@ len-=64*4
-	str		@x[6],[r14,#-8]
-	str		@x[7],[r14,#-4]
-	bhi		.Loop_neon_outer
-
-	b		.Ldone_neon
-
-.align	4
-.Lbreak_neon:
-	@ harmonize NEON and integer-only stack frames: load data
-	@ from NEON frame, but save to integer-only one; distance
-	@ between the two is 4*(32+4+16-32)=4*(20).
-
-	str		@t[3], [sp,#4*(20+32+2)]	@ save len
-	 add		@t[3],sp,#4*(32+4)
-	str		r12,   [sp,#4*(20+32+1)]	@ save inp
-	str		r14,   [sp,#4*(20+32+0)]	@ save out
-
-	ldr		@x[12],[sp,#4*(16+10)]
-	ldr		@x[14],[sp,#4*(16+11)]
-	 vldmia		@t[3],{d8-d15}			@ fulfill ABI requirement
-	str		@x[12],[sp,#4*(20+16+10)]	@ copy "@x[10]"
-	str		@x[14],[sp,#4*(20+16+11)]	@ copy "@x[11]"
-
-	ldr		@t[3], [sp,#4*(15)]
-	ldr		@x[12],[sp,#4*(12)]		@ modulo-scheduled load
-	ldr		@t[2], [sp,#4*(13)]
-	ldr		@x[14],[sp,#4*(14)]
-	str		@t[3], [sp,#4*(20+16+15)]
-	add		@t[3],sp,#4*(20)
-	vst1.32		{$a0-$b0},[@t[3]]!		@ copy key
-	add		sp,sp,#4*(20)			@ switch frame
-	vst1.32		{$c0-$d0},[@t[3]]
-	mov		@t[3],#10
-	b		.Loop				@ go integer-only
-
-.align	4
-.Ltail_neon:
-	cmp		@t[3],#64*3
-	bhs		.L192_or_more_neon
-	cmp		@t[3],#64*2
-	bhs		.L128_or_more_neon
-	cmp		@t[3],#64*1
-	bhs		.L64_or_more_neon
-
-	add		@t[0],sp,#4*(8)
-	vst1.8		{$a0-$b0},[sp]
-	add		@t[2],sp,#4*(0)
-	vst1.8		{$c0-$d0},[@t[0]]
-	b		.Loop_tail_neon
-
-.align	4
-.L64_or_more_neon:
-	vld1.8		{$t0-$t1},[r12]!
-	vld1.8		{$t2-$t3},[r12]!
-	veor		$a0,$a0,$t0
-	veor		$b0,$b0,$t1
-	veor		$c0,$c0,$t2
-	veor		$d0,$d0,$t3
-	vst1.8		{$a0-$b0},[r14]!
-	vst1.8		{$c0-$d0},[r14]!
-
-	beq		.Ldone_neon
-
-	add		@t[0],sp,#4*(8)
-	vst1.8		{$a1-$b1},[sp]
-	add		@t[2],sp,#4*(0)
-	vst1.8		{$c1-$d1},[@t[0]]
-	sub		@t[3],@t[3],#64*1	@ len-=64*1
-	b		.Loop_tail_neon
-
-.align	4
-.L128_or_more_neon:
-	vld1.8		{$t0-$t1},[r12]!
-	vld1.8		{$t2-$t3},[r12]!
-	veor		$a0,$a0,$t0
-	veor		$b0,$b0,$t1
-	vld1.8		{$t0-$t1},[r12]!
-	veor		$c0,$c0,$t2
-	veor		$d0,$d0,$t3
-	vld1.8		{$t2-$t3},[r12]!
-
-	veor		$a1,$a1,$t0
-	veor		$b1,$b1,$t1
-	 vst1.8		{$a0-$b0},[r14]!
-	veor		$c1,$c1,$t2
-	 vst1.8		{$c0-$d0},[r14]!
-	veor		$d1,$d1,$t3
-	vst1.8		{$a1-$b1},[r14]!
-	vst1.8		{$c1-$d1},[r14]!
-
-	beq		.Ldone_neon
-
-	add		@t[0],sp,#4*(8)
-	vst1.8		{$a2-$b2},[sp]
-	add		@t[2],sp,#4*(0)
-	vst1.8		{$c2-$d2},[@t[0]]
-	sub		@t[3],@t[3],#64*2	@ len-=64*2
-	b		.Loop_tail_neon
-
-.align	4
-.L192_or_more_neon:
-	vld1.8		{$t0-$t1},[r12]!
-	vld1.8		{$t2-$t3},[r12]!
-	veor		$a0,$a0,$t0
-	veor		$b0,$b0,$t1
-	vld1.8		{$t0-$t1},[r12]!
-	veor		$c0,$c0,$t2
-	veor		$d0,$d0,$t3
-	vld1.8		{$t2-$t3},[r12]!
-
-	veor		$a1,$a1,$t0
-	veor		$b1,$b1,$t1
-	vld1.8		{$t0-$t1},[r12]!
-	veor		$c1,$c1,$t2
-	 vst1.8		{$a0-$b0},[r14]!
-	veor		$d1,$d1,$t3
-	vld1.8		{$t2-$t3},[r12]!
-
-	veor		$a2,$a2,$t0
-	 vst1.8		{$c0-$d0},[r14]!
-	veor		$b2,$b2,$t1
-	 vst1.8		{$a1-$b1},[r14]!
-	veor		$c2,$c2,$t2
-	 vst1.8		{$c1-$d1},[r14]!
-	veor		$d2,$d2,$t3
-	vst1.8		{$a2-$b2},[r14]!
-	vst1.8		{$c2-$d2},[r14]!
-
-	beq		.Ldone_neon
-
-	ldmia		sp,{@t[0]-@t[3]}	@ load key material
-	add		@x[0],@x[0],@t[0]	@ accumulate key material
-	 add		@t[0],sp,#4*(4)
-	add		@x[1],@x[1],@t[1]
-	add		@x[2],@x[2],@t[2]
-	add		@x[3],@x[3],@t[3]
-	 ldmia		@t[0],{@t[0]-@t[3]}	@ load key material
-
-	add		@x[4],@x[4],@t[0]	@ accumulate key material
-	 add		@t[0],sp,#4*(8)
-	add		@x[5],@x[5],@t[1]
-	add		@x[6],@x[6],@t[2]
-	add		@x[7],@x[7],@t[3]
-	 ldmia		@t[0],{@t[0]-@t[3]}	@ load key material
-# ifdef	__ARMEB__
-	rev		@x[0],@x[0]
-	rev		@x[1],@x[1]
-	rev		@x[2],@x[2]
-	rev		@x[3],@x[3]
-	rev		@x[4],@x[4]
-	rev		@x[5],@x[5]
-	rev		@x[6],@x[6]
-	rev		@x[7],@x[7]
-# endif
-	stmia		sp,{@x[0]-@x[7]}
-	 add		@x[0],sp,#4*(16+8)
-
-	ldmia		@x[0],{@x[0]-@x[7]}	@ load second half
-
-	add		@x[0],@x[0],@t[0]	@ accumulate key material
-	 add		@t[0],sp,#4*(12)
-	add		@x[1],@x[1],@t[1]
-	add		@x[2],@x[2],@t[2]
-	add		@x[3],@x[3],@t[3]
-	 ldmia		@t[0],{@t[0]-@t[3]}	@ load key material
-
-	add		@x[4],@x[4],@t[0]	@ accumulate key material
-	 add		@t[0],sp,#4*(8)
-	add		@x[5],@x[5],@t[1]
-	 add		@x[4],@x[4],#3		@ counter+3
-	add		@x[6],@x[6],@t[2]
-	add		@x[7],@x[7],@t[3]
-	 ldr		@t[3],[sp,#4*(32+2)]	@ re-load len
-# ifdef	__ARMEB__
-	rev		@x[0],@x[0]
-	rev		@x[1],@x[1]
-	rev		@x[2],@x[2]
-	rev		@x[3],@x[3]
-	rev		@x[4],@x[4]
-	rev		@x[5],@x[5]
-	rev		@x[6],@x[6]
-	rev		@x[7],@x[7]
-# endif
-	stmia		@t[0],{@x[0]-@x[7]}
-	 add		@t[2],sp,#4*(0)
-	 sub		@t[3],@t[3],#64*3	@ len-=64*3
-
-.Loop_tail_neon:
-	ldrb		@t[0],[@t[2]],#1	@ read buffer on stack
-	ldrb		@t[1],[r12],#1		@ read input
-	subs		@t[3],@t[3],#1
-	eor		@t[0],@t[0],@t[1]
-	strb		@t[0],[r14],#1		@ store output
-	bne		.Loop_tail_neon
-
-.Ldone_neon:
-	add		sp,sp,#4*(32+4)
-	vldmia		sp,{d8-d15}
-	add		sp,sp,#4*(16+3)
-	ldmia		sp!,{r4-r11,pc}
-.size	ChaCha20_ctr32_neon,.-ChaCha20_ctr32_neon
-#endif
-___
-}}}
-
-foreach (split("\n",$code)) {
-	s/\`([^\`]*)\`/eval $1/geo;
-
-	s/\bq([0-9]+)#(lo|hi)/sprintf "d%d",2*$1+($2 eq "hi")/geo;
-
-	print $_,"\n";
-}
-close STDOUT or die "error closing STDOUT: $!";
diff --git a/src/crypto/chacha/asm/chacha-armv8.pl b/src/crypto/chacha/asm/chacha-armv8.pl
deleted file mode 100755
index 8f2fe30..0000000
--- a/src/crypto/chacha/asm/chacha-armv8.pl
+++ /dev/null
@@ -1,1130 +0,0 @@
-#! /usr/bin/env perl
-# Copyright 2016 The OpenSSL Project Authors. All Rights Reserved.
-#
-# 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
-#
-#     https://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.
-
-#
-# ====================================================================
-# Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
-# project.
-# ====================================================================
-#
-# June 2015
-#
-# ChaCha20 for ARMv8.
-#
-# Performance in cycles per byte out of large buffer.
-#
-#			IALU/gcc-4.9    3xNEON+1xIALU	6xNEON+2xIALU
-#
-# Apple A7		5.50/+49%       3.33            1.70
-# Cortex-A53		8.40/+80%       4.72		4.72(*)
-# Cortex-A57		8.06/+43%       4.90            4.43(**)
-# Denver		4.50/+82%       2.63		2.67(*)
-# X-Gene		9.50/+46%       8.82		8.89(*)
-# Mongoose		8.00/+44%	3.64		3.25
-# Kryo			8.17/+50%	4.83		4.65
-#
-# (*)	it's expected that doubling interleave factor doesn't help
-#	all processors, only those with higher NEON latency and
-#	higher instruction issue rate;
-# (**)	expected improvement was actually higher;
-
-$flavour=shift;
-$output=shift;
-
-$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
-( $xlate="${dir}arm-xlate.pl" and -f $xlate ) or
-( $xlate="${dir}../../perlasm/arm-xlate.pl" and -f $xlate) or
-die "can't locate arm-xlate.pl";
-
-open OUT,"| \"$^X\" \"$xlate\" $flavour \"$output\"";
-*STDOUT=*OUT;
-
-sub AUTOLOAD()		# thunk [simplified] x86-style perlasm
-{ my $opcode = $AUTOLOAD; $opcode =~ s/.*:://; $opcode =~ s/_/\./;
-  my $arg = pop;
-    $arg = "#$arg" if ($arg*1 eq $arg);
-    $code .= "\t$opcode\t".join(',',@_,$arg)."\n";
-}
-
-my ($out,$inp,$len,$key,$ctr) = map("x$_",(0..4));
-
-my @x=map("x$_",(5..17,19..21));
-my @d=map("x$_",(22..28,30));
-
-sub ROUND {
-my ($a0,$b0,$c0,$d0)=@_;
-my ($a1,$b1,$c1,$d1)=map(($_&~3)+(($_+1)&3),($a0,$b0,$c0,$d0));
-my ($a2,$b2,$c2,$d2)=map(($_&~3)+(($_+1)&3),($a1,$b1,$c1,$d1));
-my ($a3,$b3,$c3,$d3)=map(($_&~3)+(($_+1)&3),($a2,$b2,$c2,$d2));
-
-    (
-	"&add_32	(@x[$a0],@x[$a0],@x[$b0])",
-	 "&add_32	(@x[$a1],@x[$a1],@x[$b1])",
-	  "&add_32	(@x[$a2],@x[$a2],@x[$b2])",
-	   "&add_32	(@x[$a3],@x[$a3],@x[$b3])",
-	"&eor_32	(@x[$d0],@x[$d0],@x[$a0])",
-	 "&eor_32	(@x[$d1],@x[$d1],@x[$a1])",
-	  "&eor_32	(@x[$d2],@x[$d2],@x[$a2])",
-	   "&eor_32	(@x[$d3],@x[$d3],@x[$a3])",
-	"&ror_32	(@x[$d0],@x[$d0],16)",
-	 "&ror_32	(@x[$d1],@x[$d1],16)",
-	  "&ror_32	(@x[$d2],@x[$d2],16)",
-	   "&ror_32	(@x[$d3],@x[$d3],16)",
-
-	"&add_32	(@x[$c0],@x[$c0],@x[$d0])",
-	 "&add_32	(@x[$c1],@x[$c1],@x[$d1])",
-	  "&add_32	(@x[$c2],@x[$c2],@x[$d2])",
-	   "&add_32	(@x[$c3],@x[$c3],@x[$d3])",
-	"&eor_32	(@x[$b0],@x[$b0],@x[$c0])",
-	 "&eor_32	(@x[$b1],@x[$b1],@x[$c1])",
-	  "&eor_32	(@x[$b2],@x[$b2],@x[$c2])",
-	   "&eor_32	(@x[$b3],@x[$b3],@x[$c3])",
-	"&ror_32	(@x[$b0],@x[$b0],20)",
-	 "&ror_32	(@x[$b1],@x[$b1],20)",
-	  "&ror_32	(@x[$b2],@x[$b2],20)",
-	   "&ror_32	(@x[$b3],@x[$b3],20)",
-
-	"&add_32	(@x[$a0],@x[$a0],@x[$b0])",
-	 "&add_32	(@x[$a1],@x[$a1],@x[$b1])",
-	  "&add_32	(@x[$a2],@x[$a2],@x[$b2])",
-	   "&add_32	(@x[$a3],@x[$a3],@x[$b3])",
-	"&eor_32	(@x[$d0],@x[$d0],@x[$a0])",
-	 "&eor_32	(@x[$d1],@x[$d1],@x[$a1])",
-	  "&eor_32	(@x[$d2],@x[$d2],@x[$a2])",
-	   "&eor_32	(@x[$d3],@x[$d3],@x[$a3])",
-	"&ror_32	(@x[$d0],@x[$d0],24)",
-	 "&ror_32	(@x[$d1],@x[$d1],24)",
-	  "&ror_32	(@x[$d2],@x[$d2],24)",
-	   "&ror_32	(@x[$d3],@x[$d3],24)",
-
-	"&add_32	(@x[$c0],@x[$c0],@x[$d0])",
-	 "&add_32	(@x[$c1],@x[$c1],@x[$d1])",
-	  "&add_32	(@x[$c2],@x[$c2],@x[$d2])",
-	   "&add_32	(@x[$c3],@x[$c3],@x[$d3])",
-	"&eor_32	(@x[$b0],@x[$b0],@x[$c0])",
-	 "&eor_32	(@x[$b1],@x[$b1],@x[$c1])",
-	  "&eor_32	(@x[$b2],@x[$b2],@x[$c2])",
-	   "&eor_32	(@x[$b3],@x[$b3],@x[$c3])",
-	"&ror_32	(@x[$b0],@x[$b0],25)",
-	 "&ror_32	(@x[$b1],@x[$b1],25)",
-	  "&ror_32	(@x[$b2],@x[$b2],25)",
-	   "&ror_32	(@x[$b3],@x[$b3],25)"
-    );
-}
-
-$code.=<<___;
-.section .rodata
-
-.align	5
-.Lsigma:
-.quad	0x3320646e61707865,0x6b20657479622d32		// endian-neutral
-.Lone:
-.long	1,0,0,0
-.asciz	"ChaCha20 for ARMv8, CRYPTOGAMS by <appro\@openssl.org>"
-
-.text
-
-.globl	ChaCha20_ctr32_nohw
-.type	ChaCha20_ctr32_nohw,%function
-.align	5
-ChaCha20_ctr32_nohw:
-	AARCH64_SIGN_LINK_REGISTER
-	stp	x29,x30,[sp,#-96]!
-	add	x29,sp,#0
-
-	adrp	@x[0],:pg_hi21:.Lsigma
-	add	@x[0],@x[0],:lo12:.Lsigma
-	stp	x19,x20,[sp,#16]
-	stp	x21,x22,[sp,#32]
-	stp	x23,x24,[sp,#48]
-	stp	x25,x26,[sp,#64]
-	stp	x27,x28,[sp,#80]
-	sub	sp,sp,#64
-
-	ldp	@d[0],@d[1],[@x[0]]		// load sigma
-	ldp	@d[2],@d[3],[$key]		// load key
-	ldp	@d[4],@d[5],[$key,#16]
-	ldp	@d[6],@d[7],[$ctr]		// load counter
-#ifdef	__AARCH64EB__
-	ror	@d[2],@d[2],#32
-	ror	@d[3],@d[3],#32
-	ror	@d[4],@d[4],#32
-	ror	@d[5],@d[5],#32
-	ror	@d[6],@d[6],#32
-	ror	@d[7],@d[7],#32
-#endif
-
-.Loop_outer:
-	mov.32	@x[0],@d[0]			// unpack key block
-	lsr	@x[1],@d[0],#32
-	mov.32	@x[2],@d[1]
-	lsr	@x[3],@d[1],#32
-	mov.32	@x[4],@d[2]
-	lsr	@x[5],@d[2],#32
-	mov.32	@x[6],@d[3]
-	lsr	@x[7],@d[3],#32
-	mov.32	@x[8],@d[4]
-	lsr	@x[9],@d[4],#32
-	mov.32	@x[10],@d[5]
-	lsr	@x[11],@d[5],#32
-	mov.32	@x[12],@d[6]
-	lsr	@x[13],@d[6],#32
-	mov.32	@x[14],@d[7]
-	lsr	@x[15],@d[7],#32
-
-	mov	$ctr,#10
-	subs	$len,$len,#64
-.Loop:
-	sub	$ctr,$ctr,#1
-___
-	foreach (&ROUND(0, 4, 8,12)) { eval; }
-	foreach (&ROUND(0, 5,10,15)) { eval; }
-$code.=<<___;
-	cbnz	$ctr,.Loop
-
-	add.32	@x[0],@x[0],@d[0]		// accumulate key block
-	add	@x[1],@x[1],@d[0],lsr#32
-	add.32	@x[2],@x[2],@d[1]
-	add	@x[3],@x[3],@d[1],lsr#32
-	add.32	@x[4],@x[4],@d[2]
-	add	@x[5],@x[5],@d[2],lsr#32
-	add.32	@x[6],@x[6],@d[3]
-	add	@x[7],@x[7],@d[3],lsr#32
-	add.32	@x[8],@x[8],@d[4]
-	add	@x[9],@x[9],@d[4],lsr#32
-	add.32	@x[10],@x[10],@d[5]
-	add	@x[11],@x[11],@d[5],lsr#32
-	add.32	@x[12],@x[12],@d[6]
-	add	@x[13],@x[13],@d[6],lsr#32
-	add.32	@x[14],@x[14],@d[7]
-	add	@x[15],@x[15],@d[7],lsr#32
-
-	b.lo	.Ltail
-
-	add	@x[0],@x[0],@x[1],lsl#32	// pack
-	add	@x[2],@x[2],@x[3],lsl#32
-	ldp	@x[1],@x[3],[$inp,#0]		// load input
-	add	@x[4],@x[4],@x[5],lsl#32
-	add	@x[6],@x[6],@x[7],lsl#32
-	ldp	@x[5],@x[7],[$inp,#16]
-	add	@x[8],@x[8],@x[9],lsl#32
-	add	@x[10],@x[10],@x[11],lsl#32
-	ldp	@x[9],@x[11],[$inp,#32]
-	add	@x[12],@x[12],@x[13],lsl#32
-	add	@x[14],@x[14],@x[15],lsl#32
-	ldp	@x[13],@x[15],[$inp,#48]
-	add	$inp,$inp,#64
-#ifdef	__AARCH64EB__
-	rev	@x[0],@x[0]
-	rev	@x[2],@x[2]
-	rev	@x[4],@x[4]
-	rev	@x[6],@x[6]
-	rev	@x[8],@x[8]
-	rev	@x[10],@x[10]
-	rev	@x[12],@x[12]
-	rev	@x[14],@x[14]
-#endif
-	eor	@x[0],@x[0],@x[1]
-	eor	@x[2],@x[2],@x[3]
-	eor	@x[4],@x[4],@x[5]
-	eor	@x[6],@x[6],@x[7]
-	eor	@x[8],@x[8],@x[9]
-	eor	@x[10],@x[10],@x[11]
-	eor	@x[12],@x[12],@x[13]
-	eor	@x[14],@x[14],@x[15]
-
-	stp	@x[0],@x[2],[$out,#0]		// store output
-	 add	@d[6],@d[6],#1			// increment counter
-	stp	@x[4],@x[6],[$out,#16]
-	stp	@x[8],@x[10],[$out,#32]
-	stp	@x[12],@x[14],[$out,#48]
-	add	$out,$out,#64
-
-	b.hi	.Loop_outer
-
-	ldp	x19,x20,[x29,#16]
-	add	sp,sp,#64
-	ldp	x21,x22,[x29,#32]
-	ldp	x23,x24,[x29,#48]
-	ldp	x25,x26,[x29,#64]
-	ldp	x27,x28,[x29,#80]
-	ldp	x29,x30,[sp],#96
-	AARCH64_VALIDATE_LINK_REGISTER
-	ret
-
-.align	4
-.Ltail:
-	add	$len,$len,#64
-.Less_than_64:
-	sub	$out,$out,#1
-	add	$inp,$inp,$len
-	add	$out,$out,$len
-	add	$ctr,sp,$len
-	neg	$len,$len
-
-	add	@x[0],@x[0],@x[1],lsl#32	// pack
-	add	@x[2],@x[2],@x[3],lsl#32
-	add	@x[4],@x[4],@x[5],lsl#32
-	add	@x[6],@x[6],@x[7],lsl#32
-	add	@x[8],@x[8],@x[9],lsl#32
-	add	@x[10],@x[10],@x[11],lsl#32
-	add	@x[12],@x[12],@x[13],lsl#32
-	add	@x[14],@x[14],@x[15],lsl#32
-#ifdef	__AARCH64EB__
-	rev	@x[0],@x[0]
-	rev	@x[2],@x[2]
-	rev	@x[4],@x[4]
-	rev	@x[6],@x[6]
-	rev	@x[8],@x[8]
-	rev	@x[10],@x[10]
-	rev	@x[12],@x[12]
-	rev	@x[14],@x[14]
-#endif
-	stp	@x[0],@x[2],[sp,#0]
-	stp	@x[4],@x[6],[sp,#16]
-	stp	@x[8],@x[10],[sp,#32]
-	stp	@x[12],@x[14],[sp,#48]
-
-.Loop_tail:
-	ldrb	w10,[$inp,$len]
-	ldrb	w11,[$ctr,$len]
-	add	$len,$len,#1
-	eor	w10,w10,w11
-	strb	w10,[$out,$len]
-	cbnz	$len,.Loop_tail
-
-	stp	xzr,xzr,[sp,#0]
-	stp	xzr,xzr,[sp,#16]
-	stp	xzr,xzr,[sp,#32]
-	stp	xzr,xzr,[sp,#48]
-
-	ldp	x19,x20,[x29,#16]
-	add	sp,sp,#64
-	ldp	x21,x22,[x29,#32]
-	ldp	x23,x24,[x29,#48]
-	ldp	x25,x26,[x29,#64]
-	ldp	x27,x28,[x29,#80]
-	ldp	x29,x30,[sp],#96
-	AARCH64_VALIDATE_LINK_REGISTER
-	ret
-.size	ChaCha20_ctr32_nohw,.-ChaCha20_ctr32_nohw
-___
-
-{{{
-my ($A0,$B0,$C0,$D0,$A1,$B1,$C1,$D1,$A2,$B2,$C2,$D2,$T0,$T1,$T2,$T3) =
-    map("v$_.4s",(0..7,16..23));
-my (@K)=map("v$_.4s",(24..30));
-my $ONE="v31.4s";
-
-sub NEONROUND {
-my $odd = pop;
-my ($a,$b,$c,$d,$t)=@_;
-
-	(
-	"&add		('$a','$a','$b')",
-	"&eor		('$d','$d','$a')",
-	"&rev32_16	('$d','$d')",		# vrot ($d,16)
-
-	"&add		('$c','$c','$d')",
-	"&eor		('$t','$b','$c')",
-	"&ushr		('$b','$t',20)",
-	"&sli		('$b','$t',12)",
-
-	"&add		('$a','$a','$b')",
-	"&eor		('$t','$d','$a')",
-	"&ushr		('$d','$t',24)",
-	"&sli		('$d','$t',8)",
-
-	"&add		('$c','$c','$d')",
-	"&eor		('$t','$b','$c')",
-	"&ushr		('$b','$t',25)",
-	"&sli		('$b','$t',7)",
-
-	"&ext		('$c','$c','$c',8)",
-	"&ext		('$d','$d','$d',$odd?4:12)",
-	"&ext		('$b','$b','$b',$odd?12:4)"
-	);
-}
-
-$code.=<<___;
-
-.globl	ChaCha20_ctr32_neon
-.type	ChaCha20_ctr32_neon,%function
-.align	5
-ChaCha20_ctr32_neon:
-	AARCH64_SIGN_LINK_REGISTER
-	stp	x29,x30,[sp,#-96]!
-	add	x29,sp,#0
-
-	adrp	@x[0],:pg_hi21:.Lsigma
-	add	@x[0],@x[0],:lo12:.Lsigma
-	stp	x19,x20,[sp,#16]
-	stp	x21,x22,[sp,#32]
-	stp	x23,x24,[sp,#48]
-	stp	x25,x26,[sp,#64]
-	stp	x27,x28,[sp,#80]
-	cmp	$len,#512
-	b.hs	.L512_or_more_neon
-
-	sub	sp,sp,#64
-
-	ldp	@d[0],@d[1],[@x[0]]		// load sigma
-	ld1	{@K[0]},[@x[0]],#16
-	ldp	@d[2],@d[3],[$key]		// load key
-	ldp	@d[4],@d[5],[$key,#16]
-	ld1	{@K[1],@K[2]},[$key]
-	ldp	@d[6],@d[7],[$ctr]		// load counter
-	ld1	{@K[3]},[$ctr]
-	ld1	{$ONE},[@x[0]]
-#ifdef	__AARCH64EB__
-	rev64	@K[0],@K[0]
-	ror	@d[2],@d[2],#32
-	ror	@d[3],@d[3],#32
-	ror	@d[4],@d[4],#32
-	ror	@d[5],@d[5],#32
-	ror	@d[6],@d[6],#32
-	ror	@d[7],@d[7],#32
-#endif
-	add	@K[3],@K[3],$ONE		// += 1
-	add	@K[4],@K[3],$ONE
-	add	@K[5],@K[4],$ONE
-	shl	$ONE,$ONE,#2			// 1 -> 4
-
-.Loop_outer_neon:
-	mov.32	@x[0],@d[0]			// unpack key block
-	lsr	@x[1],@d[0],#32
-	 mov	$A0,@K[0]
-	mov.32	@x[2],@d[1]
-	lsr	@x[3],@d[1],#32
-	 mov	$A1,@K[0]
-	mov.32	@x[4],@d[2]
-	lsr	@x[5],@d[2],#32
-	 mov	$A2,@K[0]
-	mov.32	@x[6],@d[3]
-	 mov	$B0,@K[1]
-	lsr	@x[7],@d[3],#32
-	 mov	$B1,@K[1]
-	mov.32	@x[8],@d[4]
-	 mov	$B2,@K[1]
-	lsr	@x[9],@d[4],#32
-	 mov	$D0,@K[3]
-	mov.32	@x[10],@d[5]
-	 mov	$D1,@K[4]
-	lsr	@x[11],@d[5],#32
-	 mov	$D2,@K[5]
-	mov.32	@x[12],@d[6]
-	 mov	$C0,@K[2]
-	lsr	@x[13],@d[6],#32
-	 mov	$C1,@K[2]
-	mov.32	@x[14],@d[7]
-	 mov	$C2,@K[2]
-	lsr	@x[15],@d[7],#32
-
-	mov	$ctr,#10
-	subs	$len,$len,#256
-.Loop_neon:
-	sub	$ctr,$ctr,#1
-___
-	my @thread0=&NEONROUND($A0,$B0,$C0,$D0,$T0,0);
-	my @thread1=&NEONROUND($A1,$B1,$C1,$D1,$T1,0);
-	my @thread2=&NEONROUND($A2,$B2,$C2,$D2,$T2,0);
-	my @thread3=&ROUND(0,4,8,12);
-
-	foreach (@thread0) {
-		eval;			eval(shift(@thread3));
-		eval(shift(@thread1));	eval(shift(@thread3));
-		eval(shift(@thread2));	eval(shift(@thread3));
-	}
-
-	@thread0=&NEONROUND($A0,$B0,$C0,$D0,$T0,1);
-	@thread1=&NEONROUND($A1,$B1,$C1,$D1,$T1,1);
-	@thread2=&NEONROUND($A2,$B2,$C2,$D2,$T2,1);
-	@thread3=&ROUND(0,5,10,15);
-
-	foreach (@thread0) {
-		eval;			eval(shift(@thread3));
-		eval(shift(@thread1));	eval(shift(@thread3));
-		eval(shift(@thread2));	eval(shift(@thread3));
-	}
-$code.=<<___;
-	cbnz	$ctr,.Loop_neon
-
-	add.32	@x[0],@x[0],@d[0]		// accumulate key block
-	 add	$A0,$A0,@K[0]
-	add	@x[1],@x[1],@d[0],lsr#32
-	 add	$A1,$A1,@K[0]
-	add.32	@x[2],@x[2],@d[1]
-	 add	$A2,$A2,@K[0]
-	add	@x[3],@x[3],@d[1],lsr#32
-	 add	$C0,$C0,@K[2]
-	add.32	@x[4],@x[4],@d[2]
-	 add	$C1,$C1,@K[2]
-	add	@x[5],@x[5],@d[2],lsr#32
-	 add	$C2,$C2,@K[2]
-	add.32	@x[6],@x[6],@d[3]
-	 add	$D0,$D0,@K[3]
-	add	@x[7],@x[7],@d[3],lsr#32
-	add.32	@x[8],@x[8],@d[4]
-	 add	$D1,$D1,@K[4]
-	add	@x[9],@x[9],@d[4],lsr#32
-	add.32	@x[10],@x[10],@d[5]
-	 add	$D2,$D2,@K[5]
-	add	@x[11],@x[11],@d[5],lsr#32
-	add.32	@x[12],@x[12],@d[6]
-	 add	$B0,$B0,@K[1]
-	add	@x[13],@x[13],@d[6],lsr#32
-	add.32	@x[14],@x[14],@d[7]
-	 add	$B1,$B1,@K[1]
-	add	@x[15],@x[15],@d[7],lsr#32
-	 add	$B2,$B2,@K[1]
-
-	b.lo	.Ltail_neon
-
-	add	@x[0],@x[0],@x[1],lsl#32	// pack
-	add	@x[2],@x[2],@x[3],lsl#32
-	ldp	@x[1],@x[3],[$inp,#0]		// load input
-	add	@x[4],@x[4],@x[5],lsl#32
-	add	@x[6],@x[6],@x[7],lsl#32
-	ldp	@x[5],@x[7],[$inp,#16]
-	add	@x[8],@x[8],@x[9],lsl#32
-	add	@x[10],@x[10],@x[11],lsl#32
-	ldp	@x[9],@x[11],[$inp,#32]
-	add	@x[12],@x[12],@x[13],lsl#32
-	add	@x[14],@x[14],@x[15],lsl#32
-	ldp	@x[13],@x[15],[$inp,#48]
-	add	$inp,$inp,#64
-#ifdef	__AARCH64EB__
-	rev	@x[0],@x[0]
-	rev	@x[2],@x[2]
-	rev	@x[4],@x[4]
-	rev	@x[6],@x[6]
-	rev	@x[8],@x[8]
-	rev	@x[10],@x[10]
-	rev	@x[12],@x[12]
-	rev	@x[14],@x[14]
-#endif
-	ld1.8	{$T0-$T3},[$inp],#64
-	eor	@x[0],@x[0],@x[1]
-	eor	@x[2],@x[2],@x[3]
-	eor	@x[4],@x[4],@x[5]
-	eor	@x[6],@x[6],@x[7]
-	eor	@x[8],@x[8],@x[9]
-	 eor	$A0,$A0,$T0
-	eor	@x[10],@x[10],@x[11]
-	 eor	$B0,$B0,$T1
-	eor	@x[12],@x[12],@x[13]
-	 eor	$C0,$C0,$T2
-	eor	@x[14],@x[14],@x[15]
-	 eor	$D0,$D0,$T3
-	 ld1.8	{$T0-$T3},[$inp],#64
-
-	stp	@x[0],@x[2],[$out,#0]		// store output
-	 add	@d[6],@d[6],#4			// increment counter
-	stp	@x[4],@x[6],[$out,#16]
-	 add	@K[3],@K[3],$ONE		// += 4
-	stp	@x[8],@x[10],[$out,#32]
-	 add	@K[4],@K[4],$ONE
-	stp	@x[12],@x[14],[$out,#48]
-	 add	@K[5],@K[5],$ONE
-	add	$out,$out,#64
-
-	st1.8	{$A0-$D0},[$out],#64
-	ld1.8	{$A0-$D0},[$inp],#64
-
-	eor	$A1,$A1,$T0
-	eor	$B1,$B1,$T1
-	eor	$C1,$C1,$T2
-	eor	$D1,$D1,$T3
-	st1.8	{$A1-$D1},[$out],#64
-
-	eor	$A2,$A2,$A0
-	eor	$B2,$B2,$B0
-	eor	$C2,$C2,$C0
-	eor	$D2,$D2,$D0
-	st1.8	{$A2-$D2},[$out],#64
-
-	b.hi	.Loop_outer_neon
-
-	ldp	x19,x20,[x29,#16]
-	add	sp,sp,#64
-	ldp	x21,x22,[x29,#32]
-	ldp	x23,x24,[x29,#48]
-	ldp	x25,x26,[x29,#64]
-	ldp	x27,x28,[x29,#80]
-	ldp	x29,x30,[sp],#96
-	AARCH64_VALIDATE_LINK_REGISTER
-	ret
-
-.Ltail_neon:
-	add	$len,$len,#256
-	cmp	$len,#64
-	b.lo	.Less_than_64
-
-	add	@x[0],@x[0],@x[1],lsl#32	// pack
-	add	@x[2],@x[2],@x[3],lsl#32
-	ldp	@x[1],@x[3],[$inp,#0]		// load input
-	add	@x[4],@x[4],@x[5],lsl#32
-	add	@x[6],@x[6],@x[7],lsl#32
-	ldp	@x[5],@x[7],[$inp,#16]
-	add	@x[8],@x[8],@x[9],lsl#32
-	add	@x[10],@x[10],@x[11],lsl#32
-	ldp	@x[9],@x[11],[$inp,#32]
-	add	@x[12],@x[12],@x[13],lsl#32
-	add	@x[14],@x[14],@x[15],lsl#32
-	ldp	@x[13],@x[15],[$inp,#48]
-	add	$inp,$inp,#64
-#ifdef	__AARCH64EB__
-	rev	@x[0],@x[0]
-	rev	@x[2],@x[2]
-	rev	@x[4],@x[4]
-	rev	@x[6],@x[6]
-	rev	@x[8],@x[8]
-	rev	@x[10],@x[10]
-	rev	@x[12],@x[12]
-	rev	@x[14],@x[14]
-#endif
-	eor	@x[0],@x[0],@x[1]
-	eor	@x[2],@x[2],@x[3]
-	eor	@x[4],@x[4],@x[5]
-	eor	@x[6],@x[6],@x[7]
-	eor	@x[8],@x[8],@x[9]
-	eor	@x[10],@x[10],@x[11]
-	eor	@x[12],@x[12],@x[13]
-	eor	@x[14],@x[14],@x[15]
-
-	stp	@x[0],@x[2],[$out,#0]		// store output
-	 add	@d[6],@d[6],#4			// increment counter
-	stp	@x[4],@x[6],[$out,#16]
-	stp	@x[8],@x[10],[$out,#32]
-	stp	@x[12],@x[14],[$out,#48]
-	add	$out,$out,#64
-	b.eq	.Ldone_neon
-	sub	$len,$len,#64
-	cmp	$len,#64
-	b.lo	.Less_than_128
-
-	ld1.8	{$T0-$T3},[$inp],#64
-	eor	$A0,$A0,$T0
-	eor	$B0,$B0,$T1
-	eor	$C0,$C0,$T2
-	eor	$D0,$D0,$T3
-	st1.8	{$A0-$D0},[$out],#64
-	b.eq	.Ldone_neon
-	sub	$len,$len,#64
-	cmp	$len,#64
-	b.lo	.Less_than_192
-
-	ld1.8	{$T0-$T3},[$inp],#64
-	eor	$A1,$A1,$T0
-	eor	$B1,$B1,$T1
-	eor	$C1,$C1,$T2
-	eor	$D1,$D1,$T3
-	st1.8	{$A1-$D1},[$out],#64
-	b.eq	.Ldone_neon
-	sub	$len,$len,#64
-
-	st1.8	{$A2-$D2},[sp]
-	b	.Last_neon
-
-.Less_than_128:
-	st1.8	{$A0-$D0},[sp]
-	b	.Last_neon
-.Less_than_192:
-	st1.8	{$A1-$D1},[sp]
-	b	.Last_neon
-
-.align	4
-.Last_neon:
-	sub	$out,$out,#1
-	add	$inp,$inp,$len
-	add	$out,$out,$len
-	add	$ctr,sp,$len
-	neg	$len,$len
-
-.Loop_tail_neon:
-	ldrb	w10,[$inp,$len]
-	ldrb	w11,[$ctr,$len]
-	add	$len,$len,#1
-	eor	w10,w10,w11
-	strb	w10,[$out,$len]
-	cbnz	$len,.Loop_tail_neon
-
-	stp	xzr,xzr,[sp,#0]
-	stp	xzr,xzr,[sp,#16]
-	stp	xzr,xzr,[sp,#32]
-	stp	xzr,xzr,[sp,#48]
-
-.Ldone_neon:
-	ldp	x19,x20,[x29,#16]
-	add	sp,sp,#64
-	ldp	x21,x22,[x29,#32]
-	ldp	x23,x24,[x29,#48]
-	ldp	x25,x26,[x29,#64]
-	ldp	x27,x28,[x29,#80]
-	ldp	x29,x30,[sp],#96
-	AARCH64_VALIDATE_LINK_REGISTER
-	ret
-.size	ChaCha20_ctr32_neon,.-ChaCha20_ctr32_neon
-___
-{
-my ($T0,$T1,$T2,$T3,$T4,$T5)=@K;
-my ($A0,$B0,$C0,$D0,$A1,$B1,$C1,$D1,$A2,$B2,$C2,$D2,
-    $A3,$B3,$C3,$D3,$A4,$B4,$C4,$D4,$A5,$B5,$C5,$D5) = map("v$_.4s",(0..23));
-
-$code.=<<___;
-.type	ChaCha20_512_neon,%function
-.align	5
-ChaCha20_512_neon:
-	AARCH64_SIGN_LINK_REGISTER
-	stp	x29,x30,[sp,#-96]!
-	add	x29,sp,#0
-
-	adrp	@x[0],:pg_hi21:.Lsigma
-	add	@x[0],@x[0],:lo12:.Lsigma
-	stp	x19,x20,[sp,#16]
-	stp	x21,x22,[sp,#32]
-	stp	x23,x24,[sp,#48]
-	stp	x25,x26,[sp,#64]
-	stp	x27,x28,[sp,#80]
-
-.L512_or_more_neon:
-	sub	sp,sp,#128+64
-
-	ldp	@d[0],@d[1],[@x[0]]		// load sigma
-	ld1	{@K[0]},[@x[0]],#16
-	ldp	@d[2],@d[3],[$key]		// load key
-	ldp	@d[4],@d[5],[$key,#16]
-	ld1	{@K[1],@K[2]},[$key]
-	ldp	@d[6],@d[7],[$ctr]		// load counter
-	ld1	{@K[3]},[$ctr]
-	ld1	{$ONE},[@x[0]]
-#ifdef	__AARCH64EB__
-	rev64	@K[0],@K[0]
-	ror	@d[2],@d[2],#32
-	ror	@d[3],@d[3],#32
-	ror	@d[4],@d[4],#32
-	ror	@d[5],@d[5],#32
-	ror	@d[6],@d[6],#32
-	ror	@d[7],@d[7],#32
-#endif
-	add	@K[3],@K[3],$ONE		// += 1
-	stp	@K[0],@K[1],[sp,#0]		// off-load key block, invariant part
-	add	@K[3],@K[3],$ONE		// not typo
-	str	@K[2],[sp,#32]
-	add	@K[4],@K[3],$ONE
-	add	@K[5],@K[4],$ONE
-	add	@K[6],@K[5],$ONE
-	shl	$ONE,$ONE,#2			// 1 -> 4
-
-	stp	d8,d9,[sp,#128+0]		// meet ABI requirements
-	stp	d10,d11,[sp,#128+16]
-	stp	d12,d13,[sp,#128+32]
-	stp	d14,d15,[sp,#128+48]
-
-	sub	$len,$len,#512			// not typo
-
-.Loop_outer_512_neon:
-	 mov	$A0,@K[0]
-	 mov	$A1,@K[0]
-	 mov	$A2,@K[0]
-	 mov	$A3,@K[0]
-	 mov	$A4,@K[0]
-	 mov	$A5,@K[0]
-	 mov	$B0,@K[1]
-	mov.32	@x[0],@d[0]			// unpack key block
-	 mov	$B1,@K[1]
-	lsr	@x[1],@d[0],#32
-	 mov	$B2,@K[1]
-	mov.32	@x[2],@d[1]
-	 mov	$B3,@K[1]
-	lsr	@x[3],@d[1],#32
-	 mov	$B4,@K[1]
-	mov.32	@x[4],@d[2]
-	 mov	$B5,@K[1]
-	lsr	@x[5],@d[2],#32
-	 mov	$D0,@K[3]
-	mov.32	@x[6],@d[3]
-	 mov	$D1,@K[4]
-	lsr	@x[7],@d[3],#32
-	 mov	$D2,@K[5]
-	mov.32	@x[8],@d[4]
-	 mov	$D3,@K[6]
-	lsr	@x[9],@d[4],#32
-	 mov	$C0,@K[2]
-	mov.32	@x[10],@d[5]
-	 mov	$C1,@K[2]
-	lsr	@x[11],@d[5],#32
-	 add	$D4,$D0,$ONE			// +4
-	mov.32	@x[12],@d[6]
-	 add	$D5,$D1,$ONE			// +4
-	lsr	@x[13],@d[6],#32
-	 mov	$C2,@K[2]
-	mov.32	@x[14],@d[7]
-	 mov	$C3,@K[2]
-	lsr	@x[15],@d[7],#32
-	 mov	$C4,@K[2]
-	 stp	@K[3],@K[4],[sp,#48]		// off-load key block, variable part
-	 mov	$C5,@K[2]
-	 str	@K[5],[sp,#80]
-
-	mov	$ctr,#5
-	subs	$len,$len,#512
-.Loop_upper_neon:
-	sub	$ctr,$ctr,#1
-___
-	my @thread0=&NEONROUND($A0,$B0,$C0,$D0,$T0,0);
-	my @thread1=&NEONROUND($A1,$B1,$C1,$D1,$T1,0);
-	my @thread2=&NEONROUND($A2,$B2,$C2,$D2,$T2,0);
-	my @thread3=&NEONROUND($A3,$B3,$C3,$D3,$T3,0);
-	my @thread4=&NEONROUND($A4,$B4,$C4,$D4,$T4,0);
-	my @thread5=&NEONROUND($A5,$B5,$C5,$D5,$T5,0);
-	my @thread67=(&ROUND(0,4,8,12),&ROUND(0,5,10,15));
-	my $diff = ($#thread0+1)*6 - $#thread67 - 1;
-	my $i = 0;
-
-	foreach (@thread0) {
-		eval;			eval(shift(@thread67));
-		eval(shift(@thread1));	eval(shift(@thread67));
-		eval(shift(@thread2));	eval(shift(@thread67));
-		eval(shift(@thread3));	eval(shift(@thread67));
-		eval(shift(@thread4));	eval(shift(@thread67));
-		eval(shift(@thread5));	eval(shift(@thread67));
-	}
-
-	@thread0=&NEONROUND($A0,$B0,$C0,$D0,$T0,1);
-	@thread1=&NEONROUND($A1,$B1,$C1,$D1,$T1,1);
-	@thread2=&NEONROUND($A2,$B2,$C2,$D2,$T2,1);
-	@thread3=&NEONROUND($A3,$B3,$C3,$D3,$T3,1);
-	@thread4=&NEONROUND($A4,$B4,$C4,$D4,$T4,1);
-	@thread5=&NEONROUND($A5,$B5,$C5,$D5,$T5,1);
-	@thread67=(&ROUND(0,4,8,12),&ROUND(0,5,10,15));
-
-	foreach (@thread0) {
-		eval;			eval(shift(@thread67));
-		eval(shift(@thread1));	eval(shift(@thread67));
-		eval(shift(@thread2));	eval(shift(@thread67));
-		eval(shift(@thread3));	eval(shift(@thread67));
-		eval(shift(@thread4));	eval(shift(@thread67));
-		eval(shift(@thread5));	eval(shift(@thread67));
-	}
-$code.=<<___;
-	cbnz	$ctr,.Loop_upper_neon
-
-	add.32	@x[0],@x[0],@d[0]		// accumulate key block
-	add	@x[1],@x[1],@d[0],lsr#32
-	add.32	@x[2],@x[2],@d[1]
-	add	@x[3],@x[3],@d[1],lsr#32
-	add.32	@x[4],@x[4],@d[2]
-	add	@x[5],@x[5],@d[2],lsr#32
-	add.32	@x[6],@x[6],@d[3]
-	add	@x[7],@x[7],@d[3],lsr#32
-	add.32	@x[8],@x[8],@d[4]
-	add	@x[9],@x[9],@d[4],lsr#32
-	add.32	@x[10],@x[10],@d[5]
-	add	@x[11],@x[11],@d[5],lsr#32
-	add.32	@x[12],@x[12],@d[6]
-	add	@x[13],@x[13],@d[6],lsr#32
-	add.32	@x[14],@x[14],@d[7]
-	add	@x[15],@x[15],@d[7],lsr#32
-
-	add	@x[0],@x[0],@x[1],lsl#32	// pack
-	add	@x[2],@x[2],@x[3],lsl#32
-	ldp	@x[1],@x[3],[$inp,#0]		// load input
-	add	@x[4],@x[4],@x[5],lsl#32
-	add	@x[6],@x[6],@x[7],lsl#32
-	ldp	@x[5],@x[7],[$inp,#16]
-	add	@x[8],@x[8],@x[9],lsl#32
-	add	@x[10],@x[10],@x[11],lsl#32
-	ldp	@x[9],@x[11],[$inp,#32]
-	add	@x[12],@x[12],@x[13],lsl#32
-	add	@x[14],@x[14],@x[15],lsl#32
-	ldp	@x[13],@x[15],[$inp,#48]
-	add	$inp,$inp,#64
-#ifdef	__AARCH64EB__
-	rev	@x[0],@x[0]
-	rev	@x[2],@x[2]
-	rev	@x[4],@x[4]
-	rev	@x[6],@x[6]
-	rev	@x[8],@x[8]
-	rev	@x[10],@x[10]
-	rev	@x[12],@x[12]
-	rev	@x[14],@x[14]
-#endif
-	eor	@x[0],@x[0],@x[1]
-	eor	@x[2],@x[2],@x[3]
-	eor	@x[4],@x[4],@x[5]
-	eor	@x[6],@x[6],@x[7]
-	eor	@x[8],@x[8],@x[9]
-	eor	@x[10],@x[10],@x[11]
-	eor	@x[12],@x[12],@x[13]
-	eor	@x[14],@x[14],@x[15]
-
-	 stp	@x[0],@x[2],[$out,#0]		// store output
-	 add	@d[6],@d[6],#1			// increment counter
-	mov.32	@x[0],@d[0]			// unpack key block
-	lsr	@x[1],@d[0],#32
-	 stp	@x[4],@x[6],[$out,#16]
-	mov.32	@x[2],@d[1]
-	lsr	@x[3],@d[1],#32
-	 stp	@x[8],@x[10],[$out,#32]
-	mov.32	@x[4],@d[2]
-	lsr	@x[5],@d[2],#32
-	 stp	@x[12],@x[14],[$out,#48]
-	 add	$out,$out,#64
-	mov.32	@x[6],@d[3]
-	lsr	@x[7],@d[3],#32
-	mov.32	@x[8],@d[4]
-	lsr	@x[9],@d[4],#32
-	mov.32	@x[10],@d[5]
-	lsr	@x[11],@d[5],#32
-	mov.32	@x[12],@d[6]
-	lsr	@x[13],@d[6],#32
-	mov.32	@x[14],@d[7]
-	lsr	@x[15],@d[7],#32
-
-	mov	$ctr,#5
-.Loop_lower_neon:
-	sub	$ctr,$ctr,#1
-___
-	@thread0=&NEONROUND($A0,$B0,$C0,$D0,$T0,0);
-	@thread1=&NEONROUND($A1,$B1,$C1,$D1,$T1,0);
-	@thread2=&NEONROUND($A2,$B2,$C2,$D2,$T2,0);
-	@thread3=&NEONROUND($A3,$B3,$C3,$D3,$T3,0);
-	@thread4=&NEONROUND($A4,$B4,$C4,$D4,$T4,0);
-	@thread5=&NEONROUND($A5,$B5,$C5,$D5,$T5,0);
-	@thread67=(&ROUND(0,4,8,12),&ROUND(0,5,10,15));
-
-	foreach (@thread0) {
-		eval;			eval(shift(@thread67));
-		eval(shift(@thread1));	eval(shift(@thread67));
-		eval(shift(@thread2));	eval(shift(@thread67));
-		eval(shift(@thread3));	eval(shift(@thread67));
-		eval(shift(@thread4));	eval(shift(@thread67));
-		eval(shift(@thread5));	eval(shift(@thread67));
-	}
-
-	@thread0=&NEONROUND($A0,$B0,$C0,$D0,$T0,1);
-	@thread1=&NEONROUND($A1,$B1,$C1,$D1,$T1,1);
-	@thread2=&NEONROUND($A2,$B2,$C2,$D2,$T2,1);
-	@thread3=&NEONROUND($A3,$B3,$C3,$D3,$T3,1);
-	@thread4=&NEONROUND($A4,$B4,$C4,$D4,$T4,1);
-	@thread5=&NEONROUND($A5,$B5,$C5,$D5,$T5,1);
-	@thread67=(&ROUND(0,4,8,12),&ROUND(0,5,10,15));
-
-	foreach (@thread0) {
-		eval;			eval(shift(@thread67));
-		eval(shift(@thread1));	eval(shift(@thread67));
-		eval(shift(@thread2));	eval(shift(@thread67));
-		eval(shift(@thread3));	eval(shift(@thread67));
-		eval(shift(@thread4));	eval(shift(@thread67));
-		eval(shift(@thread5));	eval(shift(@thread67));
-	}
-$code.=<<___;
-	cbnz	$ctr,.Loop_lower_neon
-
-	add.32	@x[0],@x[0],@d[0]		// accumulate key block
-	 ldp	@K[0],@K[1],[sp,#0]
-	add	@x[1],@x[1],@d[0],lsr#32
-	 ldp	@K[2],@K[3],[sp,#32]
-	add.32	@x[2],@x[2],@d[1]
-	 ldp	@K[4],@K[5],[sp,#64]
-	add	@x[3],@x[3],@d[1],lsr#32
-	 add	$A0,$A0,@K[0]
-	add.32	@x[4],@x[4],@d[2]
-	 add	$A1,$A1,@K[0]
-	add	@x[5],@x[5],@d[2],lsr#32
-	 add	$A2,$A2,@K[0]
-	add.32	@x[6],@x[6],@d[3]
-	 add	$A3,$A3,@K[0]
-	add	@x[7],@x[7],@d[3],lsr#32
-	 add	$A4,$A4,@K[0]
-	add.32	@x[8],@x[8],@d[4]
-	 add	$A5,$A5,@K[0]
-	add	@x[9],@x[9],@d[4],lsr#32
-	 add	$C0,$C0,@K[2]
-	add.32	@x[10],@x[10],@d[5]
-	 add	$C1,$C1,@K[2]
-	add	@x[11],@x[11],@d[5],lsr#32
-	 add	$C2,$C2,@K[2]
-	add.32	@x[12],@x[12],@d[6]
-	 add	$C3,$C3,@K[2]
-	add	@x[13],@x[13],@d[6],lsr#32
-	 add	$C4,$C4,@K[2]
-	add.32	@x[14],@x[14],@d[7]
-	 add	$C5,$C5,@K[2]
-	add	@x[15],@x[15],@d[7],lsr#32
-	 add	$D4,$D4,$ONE			// +4
-	add	@x[0],@x[0],@x[1],lsl#32	// pack
-	 add	$D5,$D5,$ONE			// +4
-	add	@x[2],@x[2],@x[3],lsl#32
-	 add	$D0,$D0,@K[3]
-	ldp	@x[1],@x[3],[$inp,#0]		// load input
-	 add	$D1,$D1,@K[4]
-	add	@x[4],@x[4],@x[5],lsl#32
-	 add	$D2,$D2,@K[5]
-	add	@x[6],@x[6],@x[7],lsl#32
-	 add	$D3,$D3,@K[6]
-	ldp	@x[5],@x[7],[$inp,#16]
-	 add	$D4,$D4,@K[3]
-	add	@x[8],@x[8],@x[9],lsl#32
-	 add	$D5,$D5,@K[4]
-	add	@x[10],@x[10],@x[11],lsl#32
-	 add	$B0,$B0,@K[1]
-	ldp	@x[9],@x[11],[$inp,#32]
-	 add	$B1,$B1,@K[1]
-	add	@x[12],@x[12],@x[13],lsl#32
-	 add	$B2,$B2,@K[1]
-	add	@x[14],@x[14],@x[15],lsl#32
-	 add	$B3,$B3,@K[1]
-	ldp	@x[13],@x[15],[$inp,#48]
-	 add	$B4,$B4,@K[1]
-	add	$inp,$inp,#64
-	 add	$B5,$B5,@K[1]
-
-#ifdef	__AARCH64EB__
-	rev	@x[0],@x[0]
-	rev	@x[2],@x[2]
-	rev	@x[4],@x[4]
-	rev	@x[6],@x[6]
-	rev	@x[8],@x[8]
-	rev	@x[10],@x[10]
-	rev	@x[12],@x[12]
-	rev	@x[14],@x[14]
-#endif
-	ld1.8	{$T0-$T3},[$inp],#64
-	eor	@x[0],@x[0],@x[1]
-	eor	@x[2],@x[2],@x[3]
-	eor	@x[4],@x[4],@x[5]
-	eor	@x[6],@x[6],@x[7]
-	eor	@x[8],@x[8],@x[9]
-	 eor	$A0,$A0,$T0
-	eor	@x[10],@x[10],@x[11]
-	 eor	$B0,$B0,$T1
-	eor	@x[12],@x[12],@x[13]
-	 eor	$C0,$C0,$T2
-	eor	@x[14],@x[14],@x[15]
-	 eor	$D0,$D0,$T3
-	 ld1.8	{$T0-$T3},[$inp],#64
-
-	stp	@x[0],@x[2],[$out,#0]		// store output
-	 add	@d[6],@d[6],#7			// increment counter
-	stp	@x[4],@x[6],[$out,#16]
-	stp	@x[8],@x[10],[$out,#32]
-	stp	@x[12],@x[14],[$out,#48]
-	add	$out,$out,#64
-	st1.8	{$A0-$D0},[$out],#64
-
-	ld1.8	{$A0-$D0},[$inp],#64
-	eor	$A1,$A1,$T0
-	eor	$B1,$B1,$T1
-	eor	$C1,$C1,$T2
-	eor	$D1,$D1,$T3
-	st1.8	{$A1-$D1},[$out],#64
-
-	ld1.8	{$A1-$D1},[$inp],#64
-	eor	$A2,$A2,$A0
-	 ldp	@K[0],@K[1],[sp,#0]
-	eor	$B2,$B2,$B0
-	 ldp	@K[2],@K[3],[sp,#32]
-	eor	$C2,$C2,$C0
-	eor	$D2,$D2,$D0
-	st1.8	{$A2-$D2},[$out],#64
-
-	ld1.8	{$A2-$D2},[$inp],#64
-	eor	$A3,$A3,$A1
-	eor	$B3,$B3,$B1
-	eor	$C3,$C3,$C1
-	eor	$D3,$D3,$D1
-	st1.8	{$A3-$D3},[$out],#64
-
-	ld1.8	{$A3-$D3},[$inp],#64
-	eor	$A4,$A4,$A2
-	eor	$B4,$B4,$B2
-	eor	$C4,$C4,$C2
-	eor	$D4,$D4,$D2
-	st1.8	{$A4-$D4},[$out],#64
-
-	shl	$A0,$ONE,#1			// 4 -> 8
-	eor	$A5,$A5,$A3
-	eor	$B5,$B5,$B3
-	eor	$C5,$C5,$C3
-	eor	$D5,$D5,$D3
-	st1.8	{$A5-$D5},[$out],#64
-
-	add	@K[3],@K[3],$A0			// += 8
-	add	@K[4],@K[4],$A0
-	add	@K[5],@K[5],$A0
-	add	@K[6],@K[6],$A0
-
-	b.hs	.Loop_outer_512_neon
-
-	adds	$len,$len,#512
-	ushr	$A0,$ONE,#2			// 4 -> 1
-
-	ldp	d8,d9,[sp,#128+0]		// meet ABI requirements
-	ldp	d10,d11,[sp,#128+16]
-	ldp	d12,d13,[sp,#128+32]
-	ldp	d14,d15,[sp,#128+48]
-
-	stp	@K[0],$ONE,[sp,#0]		// wipe off-load area
-	stp	@K[0],$ONE,[sp,#32]
-	stp	@K[0],$ONE,[sp,#64]
-
-	b.eq	.Ldone_512_neon
-
-	cmp	$len,#192
-	sub	@K[3],@K[3],$A0			// -= 1
-	sub	@K[4],@K[4],$A0
-	sub	@K[5],@K[5],$A0
-	add	sp,sp,#128
-	b.hs	.Loop_outer_neon
-
-	eor	@K[1],@K[1],@K[1]
-	eor	@K[2],@K[2],@K[2]
-	eor	@K[3],@K[3],@K[3]
-	eor	@K[4],@K[4],@K[4]
-	eor	@K[5],@K[5],@K[5]
-	eor	@K[6],@K[6],@K[6]
-	b	.Loop_outer
-
-.Ldone_512_neon:
-	ldp	x19,x20,[x29,#16]
-	add	sp,sp,#128+64
-	ldp	x21,x22,[x29,#32]
-	ldp	x23,x24,[x29,#48]
-	ldp	x25,x26,[x29,#64]
-	ldp	x27,x28,[x29,#80]
-	ldp	x29,x30,[sp],#96
-	AARCH64_VALIDATE_LINK_REGISTER
-	ret
-.size	ChaCha20_512_neon,.-ChaCha20_512_neon
-___
-}
-}}}
-
-foreach (split("\n",$code)) {
-	s/\`([^\`]*)\`/eval $1/geo;
-
-	(s/\b([a-z]+)\.32\b/$1/ and (s/x([0-9]+)/w$1/g or 1))	or
-	(m/\b(eor|ext|mov)\b/ and (s/\.4s/\.16b/g or 1))	or
-	(s/\b((?:ld|st)1)\.8\b/$1/ and (s/\.4s/\.16b/g or 1))	or
-	(m/\b(ld|st)[rp]\b/ and (s/v([0-9]+)\.4s/q$1/g or 1))	or
-	(s/\brev32\.16\b/rev32/ and (s/\.4s/\.8h/g or 1));
-
-	#s/\bq([0-9]+)#(lo|hi)/sprintf "d%d",2*$1+($2 eq "hi")/geo;
-
-	print $_,"\n";
-}
-close STDOUT or die "error closing STDOUT: $!";	# flush
diff --git a/src/crypto/chacha/asm/chacha-x86.pl b/src/crypto/chacha/asm/chacha-x86.pl
deleted file mode 100755
index 7d3df9a..0000000
--- a/src/crypto/chacha/asm/chacha-x86.pl
+++ /dev/null
@@ -1,763 +0,0 @@
-#! /usr/bin/env perl
-# Copyright 2016 The OpenSSL Project Authors. All Rights Reserved.
-#
-# 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
-#
-#     https://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.
-
-#
-# ====================================================================
-# Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
-# project.
-# ====================================================================
-#
-# January 2015
-#
-# ChaCha20 for x86.
-#
-# Performance in cycles per byte out of large buffer.
-#
-#		1xIALU/gcc	4xSSSE3
-# Pentium	17.5/+80%
-# PIII		14.2/+60%
-# P4		18.6/+84%
-# Core2		9.56/+89%	4.83
-# Westmere	9.50/+45%	3.35
-# Sandy Bridge	10.5/+47%	3.20
-# Haswell	8.15/+50%	2.83
-# Skylake	7.53/+22%	2.75
-# Silvermont	17.4/+36%	8.35
-# Goldmont	13.4/+40%	4.36
-# Sledgehammer	10.2/+54%
-# Bulldozer	13.4/+50%	4.38(*)
-#
-# (*)	Bulldozer actually executes 4xXOP code path that delivers 3.55;
-#
-# Modified from upstream OpenSSL to remove the XOP code.
-
-$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
-push(@INC,"${dir}","${dir}../../perlasm");
-require "x86asm.pl";
-
-$output=pop;
-open STDOUT,">$output";
-
-&asm_init($ARGV[0]);
-
-$xmm=$ymm=1;
-$gasver=999;  # enable everything
-
-$a="eax";
-($b,$b_)=("ebx","ebp");
-($c,$c_)=("ecx","esi");
-($d,$d_)=("edx","edi");
-
-sub QUARTERROUND {
-my ($ai,$bi,$ci,$di,$i)=@_;
-my ($an,$bn,$cn,$dn)=map(($_&~3)+(($_+1)&3),($ai,$bi,$ci,$di));	# next
-my ($ap,$bp,$cp,$dp)=map(($_&~3)+(($_-1)&3),($ai,$bi,$ci,$di));	# previous
-
-	#       a   b   c   d
-	#
-	#       0   4   8  12 < even round
-	#       1   5   9  13
-	#       2   6  10  14
-	#       3   7  11  15
-	#       0   5  10  15 < odd round
-	#       1   6  11  12
-	#       2   7   8  13
-	#       3   4   9  14
-
-	if ($i==0) {
-            my $j=4;
-	    ($ap,$bp,$cp,$dp)=map(($_&~3)+(($_-$j--)&3),($ap,$bp,$cp,$dp));
-	} elsif ($i==3) {
-            my $j=0;
-	    ($an,$bn,$cn,$dn)=map(($_&~3)+(($_+$j++)&3),($an,$bn,$cn,$dn));
-	} elsif ($i==4) {
-            my $j=4;
-	    ($ap,$bp,$cp,$dp)=map(($_&~3)+(($_+$j--)&3),($ap,$bp,$cp,$dp));
-	} elsif ($i==7) {
-            my $j=0;
-	    ($an,$bn,$cn,$dn)=map(($_&~3)+(($_-$j++)&3),($an,$bn,$cn,$dn));
-	}
-
-	#&add	($a,$b);			# see elsewhere
-	&xor	($d,$a);
-	 &mov	(&DWP(4*$cp,"esp"),$c_)		if ($ai>0 && $ai<3);
-	&rol	($d,16);
-	 &mov	(&DWP(4*$bp,"esp"),$b_)		if ($i!=0);
-	&add	($c,$d);
-	 &mov	($c_,&DWP(4*$cn,"esp"))		if ($ai>0 && $ai<3);
-	&xor	($b,$c);
-	 &mov	($d_,&DWP(4*$dn,"esp"))		if ($di!=$dn);
-	&rol	($b,12);
-	 &mov	($b_,&DWP(4*$bn,"esp"))		if ($i<7);
-	 &mov	($b_,&DWP(128,"esp"))		if ($i==7);	# loop counter
-	&add	($a,$b);
-	&xor	($d,$a);
-	&mov	(&DWP(4*$ai,"esp"),$a);
-	&rol	($d,8);
-	&mov	($a,&DWP(4*$an,"esp"));
-	&add	($c,$d);
-	&mov	(&DWP(4*$di,"esp"),$d)		if ($di!=$dn);
-	&mov	($d_,$d)			if ($di==$dn);
-	&xor	($b,$c);
-	 &add	($a,$b_)			if ($i<7);	# elsewhere
-	&rol	($b,7);
-
-	($b,$b_)=($b_,$b);
-	($c,$c_)=($c_,$c);
-	($d,$d_)=($d_,$d);
-}
-
-&static_label("ssse3_data");
-&static_label("pic_point");
-
-&function_begin("ChaCha20_ctr32_nohw");
-	&mov	("esi",&wparam(3));		# key
-	&mov	("edi",&wparam(4));		# counter and nonce
-
-	&stack_push(33);
-
-	&mov	("eax",&DWP(4*0,"esi"));	# copy key
-	&mov	("ebx",&DWP(4*1,"esi"));
-	&mov	("ecx",&DWP(4*2,"esi"));
-	&mov	("edx",&DWP(4*3,"esi"));
-	&mov	(&DWP(64+4*4,"esp"),"eax");
-	&mov	(&DWP(64+4*5,"esp"),"ebx");
-	&mov	(&DWP(64+4*6,"esp"),"ecx");
-	&mov	(&DWP(64+4*7,"esp"),"edx");
-	&mov	("eax",&DWP(4*4,"esi"));
-	&mov	("ebx",&DWP(4*5,"esi"));
-	&mov	("ecx",&DWP(4*6,"esi"));
-	&mov	("edx",&DWP(4*7,"esi"));
-	&mov	(&DWP(64+4*8,"esp"),"eax");
-	&mov	(&DWP(64+4*9,"esp"),"ebx");
-	&mov	(&DWP(64+4*10,"esp"),"ecx");
-	&mov	(&DWP(64+4*11,"esp"),"edx");
-	&mov	("eax",&DWP(4*0,"edi"));	# copy counter and nonce
-	&mov	("ebx",&DWP(4*1,"edi"));
-	&mov	("ecx",&DWP(4*2,"edi"));
-	&mov	("edx",&DWP(4*3,"edi"));
-	&sub	("eax",1);
-	&mov	(&DWP(64+4*12,"esp"),"eax");
-	&mov	(&DWP(64+4*13,"esp"),"ebx");
-	&mov	(&DWP(64+4*14,"esp"),"ecx");
-	&mov	(&DWP(64+4*15,"esp"),"edx");
-	&jmp	(&label("entry"));
-
-&set_label("outer_loop",16);
-	&mov	(&wparam(1),$b);		# save input
-	&mov	(&wparam(0),$a);		# save output
-	&mov	(&wparam(2),$c);		# save len
-&set_label("entry");
-	&mov	($a,0x61707865);
-	&mov	(&DWP(4*1,"esp"),0x3320646e);
-	&mov	(&DWP(4*2,"esp"),0x79622d32);
-	&mov	(&DWP(4*3,"esp"),0x6b206574);
-
-	&mov	($b, &DWP(64+4*5,"esp"));	# copy key material
-	&mov	($b_,&DWP(64+4*6,"esp"));
-	&mov	($c, &DWP(64+4*10,"esp"));
-	&mov	($c_,&DWP(64+4*11,"esp"));
-	&mov	($d, &DWP(64+4*13,"esp"));
-	&mov	($d_,&DWP(64+4*14,"esp"));
-	&mov	(&DWP(4*5,"esp"),$b);
-	&mov	(&DWP(4*6,"esp"),$b_);
-	&mov	(&DWP(4*10,"esp"),$c);
-	&mov	(&DWP(4*11,"esp"),$c_);
-	&mov	(&DWP(4*13,"esp"),$d);
-	&mov	(&DWP(4*14,"esp"),$d_);
-
-	&mov	($b, &DWP(64+4*7,"esp"));
-	&mov	($d_,&DWP(64+4*15,"esp"));
-	&mov	($d, &DWP(64+4*12,"esp"));
-	&mov	($b_,&DWP(64+4*4,"esp"));
-	&mov	($c, &DWP(64+4*8,"esp"));
-	&mov	($c_,&DWP(64+4*9,"esp"));
-	&add	($d,1);				# counter value
-	&mov	(&DWP(4*7,"esp"),$b);
-	&mov	(&DWP(4*15,"esp"),$d_);
-	&mov	(&DWP(64+4*12,"esp"),$d);	# save counter value
-
-	&mov	($b,10);			# loop counter
-	&jmp	(&label("loop"));
-
-&set_label("loop",16);
-	&add	($a,$b_);			# elsewhere
-	&mov	(&DWP(128,"esp"),$b);		# save loop counter
-	&mov	($b,$b_);
-	&QUARTERROUND(0, 4, 8, 12, 0);
-	&QUARTERROUND(1, 5, 9, 13, 1);
-	&QUARTERROUND(2, 6,10, 14, 2);
-	&QUARTERROUND(3, 7,11, 15, 3);
-	&QUARTERROUND(0, 5,10, 15, 4);
-	&QUARTERROUND(1, 6,11, 12, 5);
-	&QUARTERROUND(2, 7, 8, 13, 6);
-	&QUARTERROUND(3, 4, 9, 14, 7);
-	&dec	($b);
-	&jnz	(&label("loop"));
-
-	&mov	($b,&wparam(2));		# load len
-
-	&add	($a,0x61707865);		# accumulate key material
-	&add	($b_,&DWP(64+4*4,"esp"));
-	&add	($c, &DWP(64+4*8,"esp"));
-	&add	($c_,&DWP(64+4*9,"esp"));
-
-	&cmp	($b,64);
-	&jb	(&label("tail"));
-
-	&mov	($b,&wparam(1));		# load input pointer
-	&add	($d, &DWP(64+4*12,"esp"));
-	&add	($d_,&DWP(64+4*14,"esp"));
-
-	&xor	($a, &DWP(4*0,$b));		# xor with input
-	&xor	($b_,&DWP(4*4,$b));
-	&mov	(&DWP(4*0,"esp"),$a);
-	&mov	($a,&wparam(0));		# load output pointer
-	&xor	($c, &DWP(4*8,$b));
-	&xor	($c_,&DWP(4*9,$b));
-	&xor	($d, &DWP(4*12,$b));
-	&xor	($d_,&DWP(4*14,$b));
-	&mov	(&DWP(4*4,$a),$b_);		# write output
-	&mov	(&DWP(4*8,$a),$c);
-	&mov	(&DWP(4*9,$a),$c_);
-	&mov	(&DWP(4*12,$a),$d);
-	&mov	(&DWP(4*14,$a),$d_);
-
-	&mov	($b_,&DWP(4*1,"esp"));
-	&mov	($c, &DWP(4*2,"esp"));
-	&mov	($c_,&DWP(4*3,"esp"));
-	&mov	($d, &DWP(4*5,"esp"));
-	&mov	($d_,&DWP(4*6,"esp"));
-	&add	($b_,0x3320646e);		# accumulate key material
-	&add	($c, 0x79622d32);
-	&add	($c_,0x6b206574);
-	&add	($d, &DWP(64+4*5,"esp"));
-	&add	($d_,&DWP(64+4*6,"esp"));
-	&xor	($b_,&DWP(4*1,$b));
-	&xor	($c, &DWP(4*2,$b));
-	&xor	($c_,&DWP(4*3,$b));
-	&xor	($d, &DWP(4*5,$b));
-	&xor	($d_,&DWP(4*6,$b));
-	&mov	(&DWP(4*1,$a),$b_);
-	&mov	(&DWP(4*2,$a),$c);
-	&mov	(&DWP(4*3,$a),$c_);
-	&mov	(&DWP(4*5,$a),$d);
-	&mov	(&DWP(4*6,$a),$d_);
-
-	&mov	($b_,&DWP(4*7,"esp"));
-	&mov	($c, &DWP(4*10,"esp"));
-	&mov	($c_,&DWP(4*11,"esp"));
-	&mov	($d, &DWP(4*13,"esp"));
-	&mov	($d_,&DWP(4*15,"esp"));
-	&add	($b_,&DWP(64+4*7,"esp"));
-	&add	($c, &DWP(64+4*10,"esp"));
-	&add	($c_,&DWP(64+4*11,"esp"));
-	&add	($d, &DWP(64+4*13,"esp"));
-	&add	($d_,&DWP(64+4*15,"esp"));
-	&xor	($b_,&DWP(4*7,$b));
-	&xor	($c, &DWP(4*10,$b));
-	&xor	($c_,&DWP(4*11,$b));
-	&xor	($d, &DWP(4*13,$b));
-	&xor	($d_,&DWP(4*15,$b));
-	&lea	($b,&DWP(4*16,$b));
-	&mov	(&DWP(4*7,$a),$b_);
-	&mov	($b_,&DWP(4*0,"esp"));
-	&mov	(&DWP(4*10,$a),$c);
-	&mov	($c,&wparam(2));		# len
-	&mov	(&DWP(4*11,$a),$c_);
-	&mov	(&DWP(4*13,$a),$d);
-	&mov	(&DWP(4*15,$a),$d_);
-	&mov	(&DWP(4*0,$a),$b_);
-	&lea	($a,&DWP(4*16,$a));
-	&sub	($c,64);
-	&jnz	(&label("outer_loop"));
-
-	&jmp	(&label("done"));
-
-&set_label("tail");
-	&add	($d, &DWP(64+4*12,"esp"));
-	&add	($d_,&DWP(64+4*14,"esp"));
-	&mov	(&DWP(4*0,"esp"),$a);
-	&mov	(&DWP(4*4,"esp"),$b_);
-	&mov	(&DWP(4*8,"esp"),$c);
-	&mov	(&DWP(4*9,"esp"),$c_);
-	&mov	(&DWP(4*12,"esp"),$d);
-	&mov	(&DWP(4*14,"esp"),$d_);
-
-	&mov	($b_,&DWP(4*1,"esp"));
-	&mov	($c, &DWP(4*2,"esp"));
-	&mov	($c_,&DWP(4*3,"esp"));
-	&mov	($d, &DWP(4*5,"esp"));
-	&mov	($d_,&DWP(4*6,"esp"));
-	&add	($b_,0x3320646e);		# accumulate key material
-	&add	($c, 0x79622d32);
-	&add	($c_,0x6b206574);
-	&add	($d, &DWP(64+4*5,"esp"));
-	&add	($d_,&DWP(64+4*6,"esp"));
-	&mov	(&DWP(4*1,"esp"),$b_);
-	&mov	(&DWP(4*2,"esp"),$c);
-	&mov	(&DWP(4*3,"esp"),$c_);
-	&mov	(&DWP(4*5,"esp"),$d);
-	&mov	(&DWP(4*6,"esp"),$d_);
-
-	&mov	($b_,&DWP(4*7,"esp"));
-	&mov	($c, &DWP(4*10,"esp"));
-	&mov	($c_,&DWP(4*11,"esp"));
-	&mov	($d, &DWP(4*13,"esp"));
-	&mov	($d_,&DWP(4*15,"esp"));
-	&add	($b_,&DWP(64+4*7,"esp"));
-	&add	($c, &DWP(64+4*10,"esp"));
-	&add	($c_,&DWP(64+4*11,"esp"));
-	&add	($d, &DWP(64+4*13,"esp"));
-	&add	($d_,&DWP(64+4*15,"esp"));
-	&mov	(&DWP(4*7,"esp"),$b_);
-	&mov	($b_,&wparam(1));		# load input
-	&mov	(&DWP(4*10,"esp"),$c);
-	&mov	($c,&wparam(0));		# load output
-	&mov	(&DWP(4*11,"esp"),$c_);
-	&xor	($c_,$c_);
-	&mov	(&DWP(4*13,"esp"),$d);
-	&mov	(&DWP(4*15,"esp"),$d_);
-
-	&xor	("eax","eax");
-	&xor	("edx","edx");
-&set_label("tail_loop");
-	&movb	("al",&BP(0,$c_,$b_));
-	&movb	("dl",&BP(0,"esp",$c_));
-	&lea	($c_,&DWP(1,$c_));
-	&xor	("al","dl");
-	&mov	(&BP(-1,$c,$c_),"al");
-	&dec	($b);
-	&jnz	(&label("tail_loop"));
-
-&set_label("done");
-	&stack_pop(33);
-&function_end("ChaCha20_ctr32_nohw");
-
-if ($xmm) {
-my ($xa,$xa_,$xb,$xb_,$xc,$xc_,$xd,$xd_)=map("xmm$_",(0..7));
-my ($out,$inp,$len)=("edi","esi","ecx");
-
-sub QUARTERROUND_SSSE3 {
-my ($ai,$bi,$ci,$di,$i)=@_;
-my ($an,$bn,$cn,$dn)=map(($_&~3)+(($_+1)&3),($ai,$bi,$ci,$di));	# next
-my ($ap,$bp,$cp,$dp)=map(($_&~3)+(($_-1)&3),($ai,$bi,$ci,$di));	# previous
-
-	#       a   b   c   d
-	#
-	#       0   4   8  12 < even round
-	#       1   5   9  13
-	#       2   6  10  14
-	#       3   7  11  15
-	#       0   5  10  15 < odd round
-	#       1   6  11  12
-	#       2   7   8  13
-	#       3   4   9  14
-
-	if ($i==0) {
-            my $j=4;
-	    ($ap,$bp,$cp,$dp)=map(($_&~3)+(($_-$j--)&3),($ap,$bp,$cp,$dp));
-	} elsif ($i==3) {
-            my $j=0;
-	    ($an,$bn,$cn,$dn)=map(($_&~3)+(($_+$j++)&3),($an,$bn,$cn,$dn));
-	} elsif ($i==4) {
-            my $j=4;
-	    ($ap,$bp,$cp,$dp)=map(($_&~3)+(($_+$j--)&3),($ap,$bp,$cp,$dp));
-	} elsif ($i==7) {
-            my $j=0;
-	    ($an,$bn,$cn,$dn)=map(($_&~3)+(($_-$j++)&3),($an,$bn,$cn,$dn));
-	}
-
-	#&paddd	($xa,$xb);			# see elsewhere
-	#&pxor	($xd,$xa);			# see elsewhere
-	 &movdqa(&QWP(16*$cp-128,"ebx"),$xc_)	if ($ai>0 && $ai<3);
-	&pshufb	($xd,&QWP(0,"eax"));		# rot16
-	 &movdqa(&QWP(16*$bp-128,"ebx"),$xb_)	if ($i!=0);
-	&paddd	($xc,$xd);
-	 &movdqa($xc_,&QWP(16*$cn-128,"ebx"))	if ($ai>0 && $ai<3);
-	&pxor	($xb,$xc);
-	 &movdqa($xb_,&QWP(16*$bn-128,"ebx"))	if ($i<7);
-	&movdqa	($xa_,$xb);			# borrow as temporary
-	&pslld	($xb,12);
-	&psrld	($xa_,20);
-	&por	($xb,$xa_);
-	 &movdqa($xa_,&QWP(16*$an-128,"ebx"));
-	&paddd	($xa,$xb);
-	 &movdqa($xd_,&QWP(16*$dn-128,"ebx"))	if ($di!=$dn);
-	&pxor	($xd,$xa);
-	&movdqa	(&QWP(16*$ai-128,"ebx"),$xa);
-	&pshufb	($xd,&QWP(16,"eax"));		# rot8
-	&paddd	($xc,$xd);
-	&movdqa	(&QWP(16*$di-128,"ebx"),$xd)	if ($di!=$dn);
-	&movdqa	($xd_,$xd)			if ($di==$dn);
-	&pxor	($xb,$xc);
-	 &paddd	($xa_,$xb_)			if ($i<7);	# elsewhere
-	&movdqa	($xa,$xb);			# borrow as temporary
-	&pslld	($xb,7);
-	&psrld	($xa,25);
-	 &pxor	($xd_,$xa_)			if ($i<7);	# elsewhere
-	&por	($xb,$xa);
-
-	($xa,$xa_)=($xa_,$xa);
-	($xb,$xb_)=($xb_,$xb);
-	($xc,$xc_)=($xc_,$xc);
-	($xd,$xd_)=($xd_,$xd);
-}
-
-&function_begin("ChaCha20_ctr32_ssse3");
-	&call	(&label("pic_point"));
-&set_label("pic_point");
-	&blindpop("eax");
-
-	&mov		($out,&wparam(0));
-	&mov		($inp,&wparam(1));
-	&mov		($len,&wparam(2));
-	&mov		("edx",&wparam(3));		# key
-	&mov		("ebx",&wparam(4));		# counter and nonce
-
-	&mov		("ebp","esp");
-	&stack_push	(131);
-	&and		("esp",-64);
-	&mov		(&DWP(512,"esp"),"ebp");
-
-	&lea		("eax",&DWP(&label("ssse3_data")."-".
-				    &label("pic_point"),"eax"));
-	&movdqu		("xmm3",&QWP(0,"ebx"));		# counter and nonce
-
-if (defined($gasver) && $gasver>=2.17) {		# even though we encode
-							# pshufb manually, we
-							# handle only register
-							# operands, while this
-							# segment uses memory
-							# operand...
-	&cmp		($len,64*4);
-	&jb		(&label("1x"));
-
-	&mov		(&DWP(512+4,"esp"),"edx");	# offload pointers
-	&mov		(&DWP(512+8,"esp"),"ebx");
-	&sub		($len,64*4);			# bias len
-	&lea		("ebp",&DWP(256+128,"esp"));	# size optimization
-
-	&movdqu		("xmm7",&QWP(0,"edx"));		# key
-	&pshufd		("xmm0","xmm3",0x00);
-	&pshufd		("xmm1","xmm3",0x55);
-	&pshufd		("xmm2","xmm3",0xaa);
-	&pshufd		("xmm3","xmm3",0xff);
-	 &paddd		("xmm0",&QWP(16*3,"eax"));	# fix counters
-	&pshufd		("xmm4","xmm7",0x00);
-	&pshufd		("xmm5","xmm7",0x55);
-	 &psubd		("xmm0",&QWP(16*4,"eax"));
-	&pshufd		("xmm6","xmm7",0xaa);
-	&pshufd		("xmm7","xmm7",0xff);
-	&movdqa		(&QWP(16*12-128,"ebp"),"xmm0");
-	&movdqa		(&QWP(16*13-128,"ebp"),"xmm1");
-	&movdqa		(&QWP(16*14-128,"ebp"),"xmm2");
-	&movdqa		(&QWP(16*15-128,"ebp"),"xmm3");
-	 &movdqu	("xmm3",&QWP(16,"edx"));	# key
-	&movdqa		(&QWP(16*4-128,"ebp"),"xmm4");
-	&movdqa		(&QWP(16*5-128,"ebp"),"xmm5");
-	&movdqa		(&QWP(16*6-128,"ebp"),"xmm6");
-	&movdqa		(&QWP(16*7-128,"ebp"),"xmm7");
-	 &movdqa	("xmm7",&QWP(16*2,"eax"));	# sigma
-	 &lea		("ebx",&DWP(128,"esp"));	# size optimization
-
-	&pshufd		("xmm0","xmm3",0x00);
-	&pshufd		("xmm1","xmm3",0x55);
-	&pshufd		("xmm2","xmm3",0xaa);
-	&pshufd		("xmm3","xmm3",0xff);
-	&pshufd		("xmm4","xmm7",0x00);
-	&pshufd		("xmm5","xmm7",0x55);
-	&pshufd		("xmm6","xmm7",0xaa);
-	&pshufd		("xmm7","xmm7",0xff);
-	&movdqa		(&QWP(16*8-128,"ebp"),"xmm0");
-	&movdqa		(&QWP(16*9-128,"ebp"),"xmm1");
-	&movdqa		(&QWP(16*10-128,"ebp"),"xmm2");
-	&movdqa		(&QWP(16*11-128,"ebp"),"xmm3");
-	&movdqa		(&QWP(16*0-128,"ebp"),"xmm4");
-	&movdqa		(&QWP(16*1-128,"ebp"),"xmm5");
-	&movdqa		(&QWP(16*2-128,"ebp"),"xmm6");
-	&movdqa		(&QWP(16*3-128,"ebp"),"xmm7");
-
-	&lea		($inp,&DWP(128,$inp));		# size optimization
-	&lea		($out,&DWP(128,$out));		# size optimization
-	&jmp		(&label("outer_loop"));
-
-&set_label("outer_loop",16);
-	#&movdqa	("xmm0",&QWP(16*0-128,"ebp"));	# copy key material
-	&movdqa		("xmm1",&QWP(16*1-128,"ebp"));
-	&movdqa		("xmm2",&QWP(16*2-128,"ebp"));
-	&movdqa		("xmm3",&QWP(16*3-128,"ebp"));
-	#&movdqa	("xmm4",&QWP(16*4-128,"ebp"));
-	&movdqa		("xmm5",&QWP(16*5-128,"ebp"));
-	&movdqa		("xmm6",&QWP(16*6-128,"ebp"));
-	&movdqa		("xmm7",&QWP(16*7-128,"ebp"));
-	#&movdqa	(&QWP(16*0-128,"ebx"),"xmm0");
-	&movdqa		(&QWP(16*1-128,"ebx"),"xmm1");
-	&movdqa		(&QWP(16*2-128,"ebx"),"xmm2");
-	&movdqa		(&QWP(16*3-128,"ebx"),"xmm3");
-	#&movdqa	(&QWP(16*4-128,"ebx"),"xmm4");
-	&movdqa		(&QWP(16*5-128,"ebx"),"xmm5");
-	&movdqa		(&QWP(16*6-128,"ebx"),"xmm6");
-	&movdqa		(&QWP(16*7-128,"ebx"),"xmm7");
-	#&movdqa	("xmm0",&QWP(16*8-128,"ebp"));
-	#&movdqa	("xmm1",&QWP(16*9-128,"ebp"));
-	&movdqa		("xmm2",&QWP(16*10-128,"ebp"));
-	&movdqa		("xmm3",&QWP(16*11-128,"ebp"));
-	&movdqa		("xmm4",&QWP(16*12-128,"ebp"));
-	&movdqa		("xmm5",&QWP(16*13-128,"ebp"));
-	&movdqa		("xmm6",&QWP(16*14-128,"ebp"));
-	&movdqa		("xmm7",&QWP(16*15-128,"ebp"));
-	&paddd		("xmm4",&QWP(16*4,"eax"));	# counter value
-	#&movdqa	(&QWP(16*8-128,"ebx"),"xmm0");
-	#&movdqa	(&QWP(16*9-128,"ebx"),"xmm1");
-	&movdqa		(&QWP(16*10-128,"ebx"),"xmm2");
-	&movdqa		(&QWP(16*11-128,"ebx"),"xmm3");
-	&movdqa		(&QWP(16*12-128,"ebx"),"xmm4");
-	&movdqa		(&QWP(16*13-128,"ebx"),"xmm5");
-	&movdqa		(&QWP(16*14-128,"ebx"),"xmm6");
-	&movdqa		(&QWP(16*15-128,"ebx"),"xmm7");
-	&movdqa		(&QWP(16*12-128,"ebp"),"xmm4");	# save counter value
-
-	&movdqa		($xa, &QWP(16*0-128,"ebp"));
-	&movdqa		($xd, "xmm4");
-	&movdqa		($xb_,&QWP(16*4-128,"ebp"));
-	&movdqa		($xc, &QWP(16*8-128,"ebp"));
-	&movdqa		($xc_,&QWP(16*9-128,"ebp"));
-
-	&mov		("edx",10);			# loop counter
-	&nop		();
-
-&set_label("loop",16);
-	&paddd		($xa,$xb_);			# elsewhere
-	&movdqa		($xb,$xb_);
-	&pxor		($xd,$xa);			# elsewhere
-	&QUARTERROUND_SSSE3(0, 4, 8, 12, 0);
-	&QUARTERROUND_SSSE3(1, 5, 9, 13, 1);
-	&QUARTERROUND_SSSE3(2, 6,10, 14, 2);
-	&QUARTERROUND_SSSE3(3, 7,11, 15, 3);
-	&QUARTERROUND_SSSE3(0, 5,10, 15, 4);
-	&QUARTERROUND_SSSE3(1, 6,11, 12, 5);
-	&QUARTERROUND_SSSE3(2, 7, 8, 13, 6);
-	&QUARTERROUND_SSSE3(3, 4, 9, 14, 7);
-	&dec		("edx");
-	&jnz		(&label("loop"));
-
-	&movdqa		(&QWP(16*4-128,"ebx"),$xb_);
-	&movdqa		(&QWP(16*8-128,"ebx"),$xc);
-	&movdqa		(&QWP(16*9-128,"ebx"),$xc_);
-	&movdqa		(&QWP(16*12-128,"ebx"),$xd);
-	&movdqa		(&QWP(16*14-128,"ebx"),$xd_);
-
-    my ($xa0,$xa1,$xa2,$xa3,$xt0,$xt1,$xt2,$xt3)=map("xmm$_",(0..7));
-
-	#&movdqa	($xa0,&QWP(16*0-128,"ebx"));	# it's there
-	&movdqa		($xa1,&QWP(16*1-128,"ebx"));
-	&movdqa		($xa2,&QWP(16*2-128,"ebx"));
-	&movdqa		($xa3,&QWP(16*3-128,"ebx"));
-
-    for($i=0;$i<256;$i+=64) {
-	&paddd		($xa0,&QWP($i+16*0-128,"ebp"));	# accumulate key material
-	&paddd		($xa1,&QWP($i+16*1-128,"ebp"));
-	&paddd		($xa2,&QWP($i+16*2-128,"ebp"));
-	&paddd		($xa3,&QWP($i+16*3-128,"ebp"));
-
-	&movdqa		($xt2,$xa0);		# "de-interlace" data
-	&punpckldq	($xa0,$xa1);
-	&movdqa		($xt3,$xa2);
-	&punpckldq	($xa2,$xa3);
-	&punpckhdq	($xt2,$xa1);
-	&punpckhdq	($xt3,$xa3);
-	&movdqa		($xa1,$xa0);
-	&punpcklqdq	($xa0,$xa2);		# "a0"
-	&movdqa		($xa3,$xt2);
-	&punpcklqdq	($xt2,$xt3);		# "a2"
-	&punpckhqdq	($xa1,$xa2);		# "a1"
-	&punpckhqdq	($xa3,$xt3);		# "a3"
-
-	#($xa2,$xt2)=($xt2,$xa2);
-
-	&movdqu		($xt0,&QWP(64*0-128,$inp));	# load input
-	&movdqu		($xt1,&QWP(64*1-128,$inp));
-	&movdqu		($xa2,&QWP(64*2-128,$inp));
-	&movdqu		($xt3,&QWP(64*3-128,$inp));
-	&lea		($inp,&QWP($i<192?16:(64*4-16*3),$inp));
-	&pxor		($xt0,$xa0);
-	&movdqa		($xa0,&QWP($i+16*4-128,"ebx"))	if ($i<192);
-	&pxor		($xt1,$xa1);
-	&movdqa		($xa1,&QWP($i+16*5-128,"ebx"))	if ($i<192);
-	&pxor		($xt2,$xa2);
-	&movdqa		($xa2,&QWP($i+16*6-128,"ebx"))	if ($i<192);
-	&pxor		($xt3,$xa3);
-	&movdqa		($xa3,&QWP($i+16*7-128,"ebx"))	if ($i<192);
-	&movdqu		(&QWP(64*0-128,$out),$xt0);	# store output
-	&movdqu		(&QWP(64*1-128,$out),$xt1);
-	&movdqu		(&QWP(64*2-128,$out),$xt2);
-	&movdqu		(&QWP(64*3-128,$out),$xt3);
-	&lea		($out,&QWP($i<192?16:(64*4-16*3),$out));
-    }
-	&sub		($len,64*4);
-	&jnc		(&label("outer_loop"));
-
-	&add		($len,64*4);
-	&jz		(&label("done"));
-
-	&mov		("ebx",&DWP(512+8,"esp"));	# restore pointers
-	&lea		($inp,&DWP(-128,$inp));
-	&mov		("edx",&DWP(512+4,"esp"));
-	&lea		($out,&DWP(-128,$out));
-
-	&movd		("xmm2",&DWP(16*12-128,"ebp"));	# counter value
-	&movdqu		("xmm3",&QWP(0,"ebx"));
-	&paddd		("xmm2",&QWP(16*6,"eax"));	# +four
-	&pand		("xmm3",&QWP(16*7,"eax"));
-	&por		("xmm3","xmm2");		# counter value
-}
-{
-my ($a,$b,$c,$d,$t,$t1,$rot16,$rot24)=map("xmm$_",(0..7));
-
-sub SSSE3ROUND {	# critical path is 20 "SIMD ticks" per round
-	&paddd		($a,$b);
-	&pxor		($d,$a);
-	&pshufb		($d,$rot16);
-
-	&paddd		($c,$d);
-	&pxor		($b,$c);
-	&movdqa		($t,$b);
-	&psrld		($b,20);
-	&pslld		($t,12);
-	&por		($b,$t);
-
-	&paddd		($a,$b);
-	&pxor		($d,$a);
-	&pshufb		($d,$rot24);
-
-	&paddd		($c,$d);
-	&pxor		($b,$c);
-	&movdqa		($t,$b);
-	&psrld		($b,25);
-	&pslld		($t,7);
-	&por		($b,$t);
-}
-
-&set_label("1x");
-	&movdqa		($a,&QWP(16*2,"eax"));		# sigma
-	&movdqu		($b,&QWP(0,"edx"));
-	&movdqu		($c,&QWP(16,"edx"));
-	#&movdqu	($d,&QWP(0,"ebx"));		# already loaded
-	&movdqa		($rot16,&QWP(0,"eax"));
-	&movdqa		($rot24,&QWP(16,"eax"));
-	&mov		(&DWP(16*3,"esp"),"ebp");
-
-	&movdqa		(&QWP(16*0,"esp"),$a);
-	&movdqa		(&QWP(16*1,"esp"),$b);
-	&movdqa		(&QWP(16*2,"esp"),$c);
-	&movdqa		(&QWP(16*3,"esp"),$d);
-	&mov		("edx",10);
-	&jmp		(&label("loop1x"));
-
-&set_label("outer1x",16);
-	&movdqa		($d,&QWP(16*5,"eax"));		# one
-	&movdqa		($a,&QWP(16*0,"esp"));
-	&movdqa		($b,&QWP(16*1,"esp"));
-	&movdqa		($c,&QWP(16*2,"esp"));
-	&paddd		($d,&QWP(16*3,"esp"));
-	&mov		("edx",10);
-	&movdqa		(&QWP(16*3,"esp"),$d);
-	&jmp		(&label("loop1x"));
-
-&set_label("loop1x",16);
-	&SSSE3ROUND();
-	&pshufd	($c,$c,0b01001110);
-	&pshufd	($b,$b,0b00111001);
-	&pshufd	($d,$d,0b10010011);
-	&nop	();
-
-	&SSSE3ROUND();
-	&pshufd	($c,$c,0b01001110);
-	&pshufd	($b,$b,0b10010011);
-	&pshufd	($d,$d,0b00111001);
-
-	&dec		("edx");
-	&jnz		(&label("loop1x"));
-
-	&paddd		($a,&QWP(16*0,"esp"));
-	&paddd		($b,&QWP(16*1,"esp"));
-	&paddd		($c,&QWP(16*2,"esp"));
-	&paddd		($d,&QWP(16*3,"esp"));
-
-	&cmp		($len,64);
-	&jb		(&label("tail"));
-
-	&movdqu		($t,&QWP(16*0,$inp));
-	&movdqu		($t1,&QWP(16*1,$inp));
-	&pxor		($a,$t);		# xor with input
-	&movdqu		($t,&QWP(16*2,$inp));
-	&pxor		($b,$t1);
-	&movdqu		($t1,&QWP(16*3,$inp));
-	&pxor		($c,$t);
-	&pxor		($d,$t1);
-	&lea		($inp,&DWP(16*4,$inp));	# inp+=64
-
-	&movdqu		(&QWP(16*0,$out),$a);	# write output
-	&movdqu		(&QWP(16*1,$out),$b);
-	&movdqu		(&QWP(16*2,$out),$c);
-	&movdqu		(&QWP(16*3,$out),$d);
-	&lea		($out,&DWP(16*4,$out));	# inp+=64
-
-	&sub		($len,64);
-	&jnz		(&label("outer1x"));
-
-	&jmp		(&label("done"));
-
-&set_label("tail");
-	&movdqa		(&QWP(16*0,"esp"),$a);
-	&movdqa		(&QWP(16*1,"esp"),$b);
-	&movdqa		(&QWP(16*2,"esp"),$c);
-	&movdqa		(&QWP(16*3,"esp"),$d);
-
-	&xor		("eax","eax");
-	&xor		("edx","edx");
-	&xor		("ebp","ebp");
-
-&set_label("tail_loop");
-	&movb		("al",&BP(0,"esp","ebp"));
-	&movb		("dl",&BP(0,$inp,"ebp"));
-	&lea		("ebp",&DWP(1,"ebp"));
-	&xor		("al","dl");
-	&movb		(&BP(-1,$out,"ebp"),"al");
-	&dec		($len);
-	&jnz		(&label("tail_loop"));
-}
-&set_label("done");
-	&mov		("esp",&DWP(512,"esp"));
-&function_end("ChaCha20_ctr32_ssse3");
-
-&align	(64);
-&set_label("ssse3_data");
-&data_byte(0x2,0x3,0x0,0x1, 0x6,0x7,0x4,0x5, 0xa,0xb,0x8,0x9, 0xe,0xf,0xc,0xd);
-&data_byte(0x3,0x0,0x1,0x2, 0x7,0x4,0x5,0x6, 0xb,0x8,0x9,0xa, 0xf,0xc,0xd,0xe);
-&data_word(0x61707865,0x3320646e,0x79622d32,0x6b206574);
-&data_word(0,1,2,3);
-&data_word(4,4,4,4);
-&data_word(1,0,0,0);
-&data_word(4,0,0,0);
-&data_word(0,-1,-1,-1);
-&align	(64);
-}
-&asciz	("ChaCha20 for x86, CRYPTOGAMS by <appro\@openssl.org>");
-
-&asm_finish();
-
-close STDOUT or die "error closing STDOUT: $!";
diff --git a/src/crypto/chacha/asm/chacha-x86_64.pl b/src/crypto/chacha/asm/chacha-x86_64.pl
deleted file mode 100755
index c34ed9a..0000000
--- a/src/crypto/chacha/asm/chacha-x86_64.pl
+++ /dev/null
@@ -1,2764 +0,0 @@
-#! /usr/bin/env perl
-# Copyright 2016 The OpenSSL Project Authors. All Rights Reserved.
-#
-# 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
-#
-#     https://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.
-
-#
-# ====================================================================
-# Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
-# project.
-# ====================================================================
-#
-# November 2014
-#
-# ChaCha20 for x86_64.
-#
-# December 2016
-#
-# Add AVX512F code path.
-#
-# Performance in cycles per byte out of large buffer.
-#
-#		IALU/gcc 4.8(i)	1xSSSE3/SSE2	4xSSSE3	    NxAVX(v)
-#
-# P4		9.48/+99%	-/22.7(ii)	-
-# Core2		7.83/+55%	7.90/8.08	4.35
-# Westmere	7.19/+50%	5.60/6.70	3.00
-# Sandy Bridge	8.31/+42%	5.45/6.76	2.72
-# Ivy Bridge	6.71/+46%	5.40/6.49	2.41
-# Haswell	5.92/+43%	5.20/6.45	2.42	    1.23
-# Skylake[-X]	5.87/+39%	4.70/-		2.31	    1.19[0.57]
-# Silvermont	12.0/+33%	7.75/7.40	7.03(iii)
-# Knights L	11.7/-		-		9.60(iii)   0.80
-# Goldmont	10.6/+17%	5.10/-		3.28
-# Sledgehammer	7.28/+52%	-/14.2(ii)	-
-# Bulldozer	9.66/+28%	9.85/11.1	3.06(iv)
-# Ryzen		5.96/+50%	5.19/-		2.40        2.09
-# VIA Nano	10.5/+46%	6.72/8.60	6.05
-#
-# (i)	compared to older gcc 3.x one can observe >2x improvement on
-#	most platforms;
-# (ii)	as it can be seen, SSE2 performance is too low on legacy
-#	processors; NxSSE2 results are naturally better, but not
-#	impressively better than IALU ones, which is why you won't
-#	find SSE2 code below;
-# (iii)	this is not optimal result for Atom because of MSROM
-#	limitations, SSE2 can do better, but gain is considered too
-#	low to justify the [maintenance] effort;
-# (iv)	Bulldozer actually executes 4xXOP code path that delivers 2.20;
-#
-# Modified from upstream OpenSSL to remove the XOP code.
-
-$flavour = shift;
-$output  = shift;
-if ($flavour =~ /\./) { $output = $flavour; undef $flavour; }
-
-$win64=0; $win64=1 if ($flavour =~ /[nm]asm|mingw64/ || $output =~ /\.asm$/);
-
-$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
-( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or
-( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
-die "can't locate x86_64-xlate.pl";
-
-$avx = 2;
-
-open OUT,"| \"$^X\" \"$xlate\" $flavour \"$output\"";
-*STDOUT=*OUT;
-
-# input parameter block
-($out,$inp,$len,$key,$counter)=("%rdi","%rsi","%rdx","%rcx","%r8");
-
-$code.=<<___;
-.text
-
-.section .rodata
-.align	64
-.Lzero:
-.long	0,0,0,0
-.Lone:
-.long	1,0,0,0
-.Linc:
-.long	0,1,2,3
-.Lfour:
-.long	4,4,4,4
-.Lincy:
-.long	0,2,4,6,1,3,5,7
-.Leight:
-.long	8,8,8,8,8,8,8,8
-.Lrot16:
-.byte	0x2,0x3,0x0,0x1, 0x6,0x7,0x4,0x5, 0xa,0xb,0x8,0x9, 0xe,0xf,0xc,0xd
-.Lrot24:
-.byte	0x3,0x0,0x1,0x2, 0x7,0x4,0x5,0x6, 0xb,0x8,0x9,0xa, 0xf,0xc,0xd,0xe
-.Lsigma:
-.asciz	"expand 32-byte k"
-.align	64
-.Lzeroz:
-.long	0,0,0,0, 1,0,0,0, 2,0,0,0, 3,0,0,0
-.Lfourz:
-.long	4,0,0,0, 4,0,0,0, 4,0,0,0, 4,0,0,0
-.Lincz:
-.long	0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
-.Lsixteen:
-.long	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16
-.asciz	"ChaCha20 for x86_64, CRYPTOGAMS by <appro\@openssl.org>"
-.text
-___
-
-sub AUTOLOAD()          # thunk [simplified] 32-bit style perlasm
-{ my $opcode = $AUTOLOAD; $opcode =~ s/.*:://;
-  my $arg = pop;
-    $arg = "\$$arg" if ($arg*1 eq $arg);
-    $code .= "\t$opcode\t".join(',',$arg,reverse @_)."\n";
-}
-
-@x=("%eax","%ebx","%ecx","%edx",map("%r${_}d",(8..11)),
-    "%nox","%nox","%nox","%nox",map("%r${_}d",(12..15)));
-@t=("%esi","%edi");
-
-sub ROUND {			# critical path is 24 cycles per round
-my ($a0,$b0,$c0,$d0)=@_;
-my ($a1,$b1,$c1,$d1)=map(($_&~3)+(($_+1)&3),($a0,$b0,$c0,$d0));
-my ($a2,$b2,$c2,$d2)=map(($_&~3)+(($_+1)&3),($a1,$b1,$c1,$d1));
-my ($a3,$b3,$c3,$d3)=map(($_&~3)+(($_+1)&3),($a2,$b2,$c2,$d2));
-my ($xc,$xc_)=map("\"$_\"",@t);
-my @x=map("\"$_\"",@x);
-
-	# Consider order in which variables are addressed by their
-	# index:
-	#
-	#	a   b   c   d
-	#
-	#	0   4   8  12 < even round
-	#	1   5   9  13
-	#	2   6  10  14
-	#	3   7  11  15
-	#	0   5  10  15 < odd round
-	#	1   6  11  12
-	#	2   7   8  13
-	#	3   4   9  14
-	#
-	# 'a', 'b' and 'd's are permanently allocated in registers,
-	# @x[0..7,12..15], while 'c's are maintained in memory. If
-	# you observe 'c' column, you'll notice that pair of 'c's is
-	# invariant between rounds. This means that we have to reload
-	# them once per round, in the middle. This is why you'll see
-	# bunch of 'c' stores and loads in the middle, but none in
-	# the beginning or end.
-
-	# Normally instructions would be interleaved to favour in-order
-	# execution. Generally out-of-order cores manage it gracefully,
-	# but not this time for some reason. As in-order execution
-	# cores are dying breed, old Atom is the only one around,
-	# instructions are left uninterleaved. Besides, Atom is better
-	# off executing 1xSSSE3 code anyway...
-
-	(
-	"&add	(@x[$a0],@x[$b0])",	# Q1
-	"&xor	(@x[$d0],@x[$a0])",
-	"&rol	(@x[$d0],16)",
-	 "&add	(@x[$a1],@x[$b1])",	# Q2
-	 "&xor	(@x[$d1],@x[$a1])",
-	 "&rol	(@x[$d1],16)",
-
-	"&add	($xc,@x[$d0])",
-	"&xor	(@x[$b0],$xc)",
-	"&rol	(@x[$b0],12)",
-	 "&add	($xc_,@x[$d1])",
-	 "&xor	(@x[$b1],$xc_)",
-	 "&rol	(@x[$b1],12)",
-
-	"&add	(@x[$a0],@x[$b0])",
-	"&xor	(@x[$d0],@x[$a0])",
-	"&rol	(@x[$d0],8)",
-	 "&add	(@x[$a1],@x[$b1])",
-	 "&xor	(@x[$d1],@x[$a1])",
-	 "&rol	(@x[$d1],8)",
-
-	"&add	($xc,@x[$d0])",
-	"&xor	(@x[$b0],$xc)",
-	"&rol	(@x[$b0],7)",
-	 "&add	($xc_,@x[$d1])",
-	 "&xor	(@x[$b1],$xc_)",
-	 "&rol	(@x[$b1],7)",
-
-	"&mov	(\"4*$c0(%rsp)\",$xc)",	# reload pair of 'c's
-	 "&mov	(\"4*$c1(%rsp)\",$xc_)",
-	"&mov	($xc,\"4*$c2(%rsp)\")",
-	 "&mov	($xc_,\"4*$c3(%rsp)\")",
-
-	"&add	(@x[$a2],@x[$b2])",	# Q3
-	"&xor	(@x[$d2],@x[$a2])",
-	"&rol	(@x[$d2],16)",
-	 "&add	(@x[$a3],@x[$b3])",	# Q4
-	 "&xor	(@x[$d3],@x[$a3])",
-	 "&rol	(@x[$d3],16)",
-
-	"&add	($xc,@x[$d2])",
-	"&xor	(@x[$b2],$xc)",
-	"&rol	(@x[$b2],12)",
-	 "&add	($xc_,@x[$d3])",
-	 "&xor	(@x[$b3],$xc_)",
-	 "&rol	(@x[$b3],12)",
-
-	"&add	(@x[$a2],@x[$b2])",
-	"&xor	(@x[$d2],@x[$a2])",
-	"&rol	(@x[$d2],8)",
-	 "&add	(@x[$a3],@x[$b3])",
-	 "&xor	(@x[$d3],@x[$a3])",
-	 "&rol	(@x[$d3],8)",
-
-	"&add	($xc,@x[$d2])",
-	"&xor	(@x[$b2],$xc)",
-	"&rol	(@x[$b2],7)",
-	 "&add	($xc_,@x[$d3])",
-	 "&xor	(@x[$b3],$xc_)",
-	 "&rol	(@x[$b3],7)"
-	);
-}
-
-########################################################################
-# Generic code path that handles all lengths on pre-SSSE3 processors.
-$code.=<<___;
-.globl	ChaCha20_ctr32_nohw
-.type	ChaCha20_ctr32_nohw,\@function,5
-.align	64
-ChaCha20_ctr32_nohw:
-.cfi_startproc
-	_CET_ENDBR
-	push	%rbx
-.cfi_push	rbx
-	push	%rbp
-.cfi_push	rbp
-	push	%r12
-.cfi_push	r12
-	push	%r13
-.cfi_push	r13
-	push	%r14
-.cfi_push	r14
-	push	%r15
-.cfi_push	r15
-	sub	\$64+24,%rsp
-.cfi_adjust_cfa_offset	`64+24`
-.Lctr32_body:
-
-	#movdqa	.Lsigma(%rip),%xmm0
-	movdqu	($key),%xmm1
-	movdqu	16($key),%xmm2
-	movdqu	($counter),%xmm3
-	movdqa	.Lone(%rip),%xmm4
-
-	#movdqa	%xmm0,4*0(%rsp)		# key[0]
-	movdqa	%xmm1,4*4(%rsp)		# key[1]
-	movdqa	%xmm2,4*8(%rsp)		# key[2]
-	movdqa	%xmm3,4*12(%rsp)	# key[3]
-	mov	$len,%rbp		# reassign $len
-	jmp	.Loop_outer
-
-.align	32
-.Loop_outer:
-	mov	\$0x61707865,@x[0]      # 'expa'
-	mov	\$0x3320646e,@x[1]      # 'nd 3'
-	mov	\$0x79622d32,@x[2]      # '2-by'
-	mov	\$0x6b206574,@x[3]      # 'te k'
-	mov	4*4(%rsp),@x[4]
-	mov	4*5(%rsp),@x[5]
-	mov	4*6(%rsp),@x[6]
-	mov	4*7(%rsp),@x[7]
-	movd	%xmm3,@x[12]
-	mov	4*13(%rsp),@x[13]
-	mov	4*14(%rsp),@x[14]
-	mov	4*15(%rsp),@x[15]
-
-	mov	%rbp,64+0(%rsp)		# save len
-	mov	\$10,%ebp
-	mov	$inp,64+8(%rsp)		# save inp
-	movq	%xmm2,%rsi		# "@x[8]"
-	mov	$out,64+16(%rsp)	# save out
-	mov	%rsi,%rdi
-	shr	\$32,%rdi		# "@x[9]"
-	jmp	.Loop
-
-.align	32
-.Loop:
-___
-	foreach (&ROUND (0, 4, 8,12)) { eval; }
-	foreach (&ROUND	(0, 5,10,15)) { eval; }
-	&dec	("%ebp");
-	&jnz	(".Loop");
-
-$code.=<<___;
-	mov	@t[1],4*9(%rsp)		# modulo-scheduled
-	mov	@t[0],4*8(%rsp)
-	mov	64(%rsp),%rbp		# load len
-	movdqa	%xmm2,%xmm1
-	mov	64+8(%rsp),$inp		# load inp
-	paddd	%xmm4,%xmm3		# increment counter
-	mov	64+16(%rsp),$out	# load out
-
-	add	\$0x61707865,@x[0]      # 'expa'
-	add	\$0x3320646e,@x[1]      # 'nd 3'
-	add	\$0x79622d32,@x[2]      # '2-by'
-	add	\$0x6b206574,@x[3]      # 'te k'
-	add	4*4(%rsp),@x[4]
-	add	4*5(%rsp),@x[5]
-	add	4*6(%rsp),@x[6]
-	add	4*7(%rsp),@x[7]
-	add	4*12(%rsp),@x[12]
-	add	4*13(%rsp),@x[13]
-	add	4*14(%rsp),@x[14]
-	add	4*15(%rsp),@x[15]
-	paddd	4*8(%rsp),%xmm1
-
-	cmp	\$64,%rbp
-	jb	.Ltail
-
-	xor	4*0($inp),@x[0]		# xor with input
-	xor	4*1($inp),@x[1]
-	xor	4*2($inp),@x[2]
-	xor	4*3($inp),@x[3]
-	xor	4*4($inp),@x[4]
-	xor	4*5($inp),@x[5]
-	xor	4*6($inp),@x[6]
-	xor	4*7($inp),@x[7]
-	movdqu	4*8($inp),%xmm0
-	xor	4*12($inp),@x[12]
-	xor	4*13($inp),@x[13]
-	xor	4*14($inp),@x[14]
-	xor	4*15($inp),@x[15]
-	lea	4*16($inp),$inp		# inp+=64
-	pxor	%xmm1,%xmm0
-
-	movdqa	%xmm2,4*8(%rsp)
-	movd	%xmm3,4*12(%rsp)
-
-	mov	@x[0],4*0($out)		# write output
-	mov	@x[1],4*1($out)
-	mov	@x[2],4*2($out)
-	mov	@x[3],4*3($out)
-	mov	@x[4],4*4($out)
-	mov	@x[5],4*5($out)
-	mov	@x[6],4*6($out)
-	mov	@x[7],4*7($out)
-	movdqu	%xmm0,4*8($out)
-	mov	@x[12],4*12($out)
-	mov	@x[13],4*13($out)
-	mov	@x[14],4*14($out)
-	mov	@x[15],4*15($out)
-	lea	4*16($out),$out		# out+=64
-
-	sub	\$64,%rbp
-	jnz	.Loop_outer
-
-	jmp	.Ldone
-
-.align	16
-.Ltail:
-	mov	@x[0],4*0(%rsp)
-	mov	@x[1],4*1(%rsp)
-	xor	%rbx,%rbx
-	mov	@x[2],4*2(%rsp)
-	mov	@x[3],4*3(%rsp)
-	mov	@x[4],4*4(%rsp)
-	mov	@x[5],4*5(%rsp)
-	mov	@x[6],4*6(%rsp)
-	mov	@x[7],4*7(%rsp)
-	movdqa	%xmm1,4*8(%rsp)
-	mov	@x[12],4*12(%rsp)
-	mov	@x[13],4*13(%rsp)
-	mov	@x[14],4*14(%rsp)
-	mov	@x[15],4*15(%rsp)
-
-.Loop_tail:
-	movzb	($inp,%rbx),%eax
-	movzb	(%rsp,%rbx),%edx
-	lea	1(%rbx),%rbx
-	xor	%edx,%eax
-	mov	%al,-1($out,%rbx)
-	dec	%rbp
-	jnz	.Loop_tail
-
-.Ldone:
-	lea	64+24+48(%rsp),%rsi
-	mov	-48(%rsi),%r15
-.cfi_restore	r15
-	mov	-40(%rsi),%r14
-.cfi_restore	r14
-	mov	-32(%rsi),%r13
-.cfi_restore	r13
-	mov	-24(%rsi),%r12
-.cfi_restore	r12
-	mov	-16(%rsi),%rbp
-.cfi_restore	rbp
-	mov	-8(%rsi),%rbx
-.cfi_restore	rbx
-	lea	(%rsi),%rsp
-.cfi_adjust_cfa_offset	`-64-24-48`
-.Lno_data:
-	ret
-.cfi_endproc
-.size	ChaCha20_ctr32_nohw,.-ChaCha20_ctr32_nohw
-___
-
-########################################################################
-# SSSE3 code path that handles shorter lengths
-{
-my ($a,$b,$c,$d,$t,$t1,$rot16,$rot24)=map("%xmm$_",(0..7));
-
-sub SSSE3ROUND {	# critical path is 20 "SIMD ticks" per round
-	&paddd	($a,$b);
-	&pxor	($d,$a);
-	&pshufb	($d,$rot16);
-
-	&paddd	($c,$d);
-	&pxor	($b,$c);
-	&movdqa	($t,$b);
-	&psrld	($b,20);
-	&pslld	($t,12);
-	&por	($b,$t);
-
-	&paddd	($a,$b);
-	&pxor	($d,$a);
-	&pshufb	($d,$rot24);
-
-	&paddd	($c,$d);
-	&pxor	($b,$c);
-	&movdqa	($t,$b);
-	&psrld	($b,25);
-	&pslld	($t,7);
-	&por	($b,$t);
-}
-
-my $xframe = $win64 ? 32+8 : 8;
-
-$code.=<<___;
-.globl	ChaCha20_ctr32_ssse3
-.type	ChaCha20_ctr32_ssse3,\@function,5
-.align	32
-ChaCha20_ctr32_ssse3:
-.cfi_startproc
-	_CET_ENDBR
-	mov	%rsp,%r9		# frame pointer
-.cfi_def_cfa_register	r9
-___
-$code.=<<___;
-	sub	\$64+$xframe,%rsp
-___
-$code.=<<___	if ($win64);
-	movaps	%xmm6,-0x28(%r9)
-	movaps	%xmm7,-0x18(%r9)
-.Lssse3_body:
-___
-$code.=<<___;
-	movdqa	.Lsigma(%rip),$a
-	movdqu	($key),$b
-	movdqu	16($key),$c
-	movdqu	($counter),$d
-	movdqa	.Lrot16(%rip),$rot16
-	movdqa	.Lrot24(%rip),$rot24
-
-	movdqa	$a,0x00(%rsp)
-	movdqa	$b,0x10(%rsp)
-	movdqa	$c,0x20(%rsp)
-	movdqa	$d,0x30(%rsp)
-	mov	\$10,$counter		# reuse $counter
-	jmp	.Loop_ssse3
-
-.align	32
-.Loop_outer_ssse3:
-	movdqa	.Lone(%rip),$d
-	movdqa	0x00(%rsp),$a
-	movdqa	0x10(%rsp),$b
-	movdqa	0x20(%rsp),$c
-	paddd	0x30(%rsp),$d
-	mov	\$10,$counter
-	movdqa	$d,0x30(%rsp)
-	jmp	.Loop_ssse3
-
-.align	32
-.Loop_ssse3:
-___
-	&SSSE3ROUND();
-	&pshufd	($c,$c,0b01001110);
-	&pshufd	($b,$b,0b00111001);
-	&pshufd	($d,$d,0b10010011);
-	&nop	();
-
-	&SSSE3ROUND();
-	&pshufd	($c,$c,0b01001110);
-	&pshufd	($b,$b,0b10010011);
-	&pshufd	($d,$d,0b00111001);
-
-	&dec	($counter);
-	&jnz	(".Loop_ssse3");
-
-$code.=<<___;
-	paddd	0x00(%rsp),$a
-	paddd	0x10(%rsp),$b
-	paddd	0x20(%rsp),$c
-	paddd	0x30(%rsp),$d
-
-	cmp	\$64,$len
-	jb	.Ltail_ssse3
-
-	movdqu	0x00($inp),$t
-	movdqu	0x10($inp),$t1
-	pxor	$t,$a			# xor with input
-	movdqu	0x20($inp),$t
-	pxor	$t1,$b
-	movdqu	0x30($inp),$t1
-	lea	0x40($inp),$inp		# inp+=64
-	pxor	$t,$c
-	pxor	$t1,$d
-
-	movdqu	$a,0x00($out)		# write output
-	movdqu	$b,0x10($out)
-	movdqu	$c,0x20($out)
-	movdqu	$d,0x30($out)
-	lea	0x40($out),$out		# out+=64
-
-	sub	\$64,$len
-	jnz	.Loop_outer_ssse3
-
-	jmp	.Ldone_ssse3
-
-.align	16
-.Ltail_ssse3:
-	movdqa	$a,0x00(%rsp)
-	movdqa	$b,0x10(%rsp)
-	movdqa	$c,0x20(%rsp)
-	movdqa	$d,0x30(%rsp)
-	xor	$counter,$counter
-
-.Loop_tail_ssse3:
-	movzb	($inp,$counter),%eax
-	movzb	(%rsp,$counter),%ecx
-	lea	1($counter),$counter
-	xor	%ecx,%eax
-	mov	%al,-1($out,$counter)
-	dec	$len
-	jnz	.Loop_tail_ssse3
-
-.Ldone_ssse3:
-___
-$code.=<<___	if ($win64);
-	movaps	-0x28(%r9),%xmm6
-	movaps	-0x18(%r9),%xmm7
-___
-$code.=<<___;
-	lea	(%r9),%rsp
-.cfi_def_cfa_register	rsp
-.Lssse3_epilogue:
-	ret
-.cfi_endproc
-.size	ChaCha20_ctr32_ssse3,.-ChaCha20_ctr32_ssse3
-___
-}
-
-########################################################################
-# SSSE3 code path that handles longer messages.
-{
-# assign variables to favor Atom front-end
-my ($xd0,$xd1,$xd2,$xd3, $xt0,$xt1,$xt2,$xt3,
-    $xa0,$xa1,$xa2,$xa3, $xb0,$xb1,$xb2,$xb3)=map("%xmm$_",(0..15));
-my  @xx=($xa0,$xa1,$xa2,$xa3, $xb0,$xb1,$xb2,$xb3,
-	"%nox","%nox","%nox","%nox", $xd0,$xd1,$xd2,$xd3);
-
-sub SSSE3_lane_ROUND {
-my ($a0,$b0,$c0,$d0)=@_;
-my ($a1,$b1,$c1,$d1)=map(($_&~3)+(($_+1)&3),($a0,$b0,$c0,$d0));
-my ($a2,$b2,$c2,$d2)=map(($_&~3)+(($_+1)&3),($a1,$b1,$c1,$d1));
-my ($a3,$b3,$c3,$d3)=map(($_&~3)+(($_+1)&3),($a2,$b2,$c2,$d2));
-my ($xc,$xc_,$t0,$t1)=map("\"$_\"",$xt0,$xt1,$xt2,$xt3);
-my @x=map("\"$_\"",@xx);
-
-	# Consider order in which variables are addressed by their
-	# index:
-	#
-	#	a   b   c   d
-	#
-	#	0   4   8  12 < even round
-	#	1   5   9  13
-	#	2   6  10  14
-	#	3   7  11  15
-	#	0   5  10  15 < odd round
-	#	1   6  11  12
-	#	2   7   8  13
-	#	3   4   9  14
-	#
-	# 'a', 'b' and 'd's are permanently allocated in registers,
-	# @x[0..7,12..15], while 'c's are maintained in memory. If
-	# you observe 'c' column, you'll notice that pair of 'c's is
-	# invariant between rounds. This means that we have to reload
-	# them once per round, in the middle. This is why you'll see
-	# bunch of 'c' stores and loads in the middle, but none in
-	# the beginning or end.
-
-	(
-	"&paddd		(@x[$a0],@x[$b0])",	# Q1
-	 "&paddd	(@x[$a1],@x[$b1])",	# Q2
-	"&pxor		(@x[$d0],@x[$a0])",
-	 "&pxor		(@x[$d1],@x[$a1])",
-	"&pshufb	(@x[$d0],$t1)",
-	 "&pshufb	(@x[$d1],$t1)",
-
-	"&paddd		($xc,@x[$d0])",
-	 "&paddd	($xc_,@x[$d1])",
-	"&pxor		(@x[$b0],$xc)",
-	 "&pxor		(@x[$b1],$xc_)",
-	"&movdqa	($t0,@x[$b0])",
-	"&pslld		(@x[$b0],12)",
-	"&psrld		($t0,20)",
-	 "&movdqa	($t1,@x[$b1])",
-	 "&pslld	(@x[$b1],12)",
-	"&por		(@x[$b0],$t0)",
-	 "&psrld	($t1,20)",
-	"&movdqa	($t0,'(%r11)')",	# .Lrot24(%rip)
-	 "&por		(@x[$b1],$t1)",
-
-	"&paddd		(@x[$a0],@x[$b0])",
-	 "&paddd	(@x[$a1],@x[$b1])",
-	"&pxor		(@x[$d0],@x[$a0])",
-	 "&pxor		(@x[$d1],@x[$a1])",
-	"&pshufb	(@x[$d0],$t0)",
-	 "&pshufb	(@x[$d1],$t0)",
-
-	"&paddd		($xc,@x[$d0])",
-	 "&paddd	($xc_,@x[$d1])",
-	"&pxor		(@x[$b0],$xc)",
-	 "&pxor		(@x[$b1],$xc_)",
-	"&movdqa	($t1,@x[$b0])",
-	"&pslld		(@x[$b0],7)",
-	"&psrld		($t1,25)",
-	 "&movdqa	($t0,@x[$b1])",
-	 "&pslld	(@x[$b1],7)",
-	"&por		(@x[$b0],$t1)",
-	 "&psrld	($t0,25)",
-	"&movdqa	($t1,'(%r10)')",	# .Lrot16(%rip)
-	 "&por		(@x[$b1],$t0)",
-
-	"&movdqa	(\"`16*($c0-8)`(%rsp)\",$xc)",	# reload pair of 'c's
-	 "&movdqa	(\"`16*($c1-8)`(%rsp)\",$xc_)",
-	"&movdqa	($xc,\"`16*($c2-8)`(%rsp)\")",
-	 "&movdqa	($xc_,\"`16*($c3-8)`(%rsp)\")",
-
-	"&paddd		(@x[$a2],@x[$b2])",	# Q3
-	 "&paddd	(@x[$a3],@x[$b3])",	# Q4
-	"&pxor		(@x[$d2],@x[$a2])",
-	 "&pxor		(@x[$d3],@x[$a3])",
-	"&pshufb	(@x[$d2],$t1)",
-	 "&pshufb	(@x[$d3],$t1)",
-
-	"&paddd		($xc,@x[$d2])",
-	 "&paddd	($xc_,@x[$d3])",
-	"&pxor		(@x[$b2],$xc)",
-	 "&pxor		(@x[$b3],$xc_)",
-	"&movdqa	($t0,@x[$b2])",
-	"&pslld		(@x[$b2],12)",
-	"&psrld		($t0,20)",
-	 "&movdqa	($t1,@x[$b3])",
-	 "&pslld	(@x[$b3],12)",
-	"&por		(@x[$b2],$t0)",
-	 "&psrld	($t1,20)",
-	"&movdqa	($t0,'(%r11)')",	# .Lrot24(%rip)
-	 "&por		(@x[$b3],$t1)",
-
-	"&paddd		(@x[$a2],@x[$b2])",
-	 "&paddd	(@x[$a3],@x[$b3])",
-	"&pxor		(@x[$d2],@x[$a2])",
-	 "&pxor		(@x[$d3],@x[$a3])",
-	"&pshufb	(@x[$d2],$t0)",
-	 "&pshufb	(@x[$d3],$t0)",
-
-	"&paddd		($xc,@x[$d2])",
-	 "&paddd	($xc_,@x[$d3])",
-	"&pxor		(@x[$b2],$xc)",
-	 "&pxor		(@x[$b3],$xc_)",
-	"&movdqa	($t1,@x[$b2])",
-	"&pslld		(@x[$b2],7)",
-	"&psrld		($t1,25)",
-	 "&movdqa	($t0,@x[$b3])",
-	 "&pslld	(@x[$b3],7)",
-	"&por		(@x[$b2],$t1)",
-	 "&psrld	($t0,25)",
-	"&movdqa	($t1,'(%r10)')",	# .Lrot16(%rip)
-	 "&por		(@x[$b3],$t0)"
-	);
-}
-
-my $xframe = $win64 ? 0xa8 : 8;
-
-$code.=<<___;
-.globl	ChaCha20_ctr32_ssse3_4x
-.type	ChaCha20_ctr32_ssse3_4x,\@function,5
-.align	32
-ChaCha20_ctr32_ssse3_4x:
-.cfi_startproc
-	_CET_ENDBR
-	mov		%rsp,%r9		# frame pointer
-.cfi_def_cfa_register	r9
-___
-$code.=<<___;
-	sub		\$0x140+$xframe,%rsp
-___
-	################ stack layout
-	# +0x00		SIMD equivalent of @x[8-12]
-	# ...
-	# +0x40		constant copy of key[0-2] smashed by lanes
-	# ...
-	# +0x100	SIMD counters (with nonce smashed by lanes)
-	# ...
-	# +0x140
-$code.=<<___	if ($win64);
-	movaps		%xmm6,-0xa8(%r9)
-	movaps		%xmm7,-0x98(%r9)
-	movaps		%xmm8,-0x88(%r9)
-	movaps		%xmm9,-0x78(%r9)
-	movaps		%xmm10,-0x68(%r9)
-	movaps		%xmm11,-0x58(%r9)
-	movaps		%xmm12,-0x48(%r9)
-	movaps		%xmm13,-0x38(%r9)
-	movaps		%xmm14,-0x28(%r9)
-	movaps		%xmm15,-0x18(%r9)
-.L4x_body:
-___
-$code.=<<___;
-	movdqa		.Lsigma(%rip),$xa3	# key[0]
-	movdqu		($key),$xb3		# key[1]
-	movdqu		16($key),$xt3		# key[2]
-	movdqu		($counter),$xd3		# key[3]
-	lea		0x100(%rsp),%rcx	# size optimization
-	lea		.Lrot16(%rip),%r10
-	lea		.Lrot24(%rip),%r11
-
-	pshufd		\$0x00,$xa3,$xa0	# smash key by lanes...
-	pshufd		\$0x55,$xa3,$xa1
-	movdqa		$xa0,0x40(%rsp)		# ... and offload
-	pshufd		\$0xaa,$xa3,$xa2
-	movdqa		$xa1,0x50(%rsp)
-	pshufd		\$0xff,$xa3,$xa3
-	movdqa		$xa2,0x60(%rsp)
-	movdqa		$xa3,0x70(%rsp)
-
-	pshufd		\$0x00,$xb3,$xb0
-	pshufd		\$0x55,$xb3,$xb1
-	movdqa		$xb0,0x80-0x100(%rcx)
-	pshufd		\$0xaa,$xb3,$xb2
-	movdqa		$xb1,0x90-0x100(%rcx)
-	pshufd		\$0xff,$xb3,$xb3
-	movdqa		$xb2,0xa0-0x100(%rcx)
-	movdqa		$xb3,0xb0-0x100(%rcx)
-
-	pshufd		\$0x00,$xt3,$xt0	# "$xc0"
-	pshufd		\$0x55,$xt3,$xt1	# "$xc1"
-	movdqa		$xt0,0xc0-0x100(%rcx)
-	pshufd		\$0xaa,$xt3,$xt2	# "$xc2"
-	movdqa		$xt1,0xd0-0x100(%rcx)
-	pshufd		\$0xff,$xt3,$xt3	# "$xc3"
-	movdqa		$xt2,0xe0-0x100(%rcx)
-	movdqa		$xt3,0xf0-0x100(%rcx)
-
-	pshufd		\$0x00,$xd3,$xd0
-	pshufd		\$0x55,$xd3,$xd1
-	paddd		.Linc(%rip),$xd0	# don't save counters yet
-	pshufd		\$0xaa,$xd3,$xd2
-	movdqa		$xd1,0x110-0x100(%rcx)
-	pshufd		\$0xff,$xd3,$xd3
-	movdqa		$xd2,0x120-0x100(%rcx)
-	movdqa		$xd3,0x130-0x100(%rcx)
-
-	jmp		.Loop_enter4x
-
-.align	32
-.Loop_outer4x:
-	movdqa		0x40(%rsp),$xa0		# re-load smashed key
-	movdqa		0x50(%rsp),$xa1
-	movdqa		0x60(%rsp),$xa2
-	movdqa		0x70(%rsp),$xa3
-	movdqa		0x80-0x100(%rcx),$xb0
-	movdqa		0x90-0x100(%rcx),$xb1
-	movdqa		0xa0-0x100(%rcx),$xb2
-	movdqa		0xb0-0x100(%rcx),$xb3
-	movdqa		0xc0-0x100(%rcx),$xt0	# "$xc0"
-	movdqa		0xd0-0x100(%rcx),$xt1	# "$xc1"
-	movdqa		0xe0-0x100(%rcx),$xt2	# "$xc2"
-	movdqa		0xf0-0x100(%rcx),$xt3	# "$xc3"
-	movdqa		0x100-0x100(%rcx),$xd0
-	movdqa		0x110-0x100(%rcx),$xd1
-	movdqa		0x120-0x100(%rcx),$xd2
-	movdqa		0x130-0x100(%rcx),$xd3
-	paddd		.Lfour(%rip),$xd0	# next SIMD counters
-
-.Loop_enter4x:
-	movdqa		$xt2,0x20(%rsp)		# SIMD equivalent of "@x[10]"
-	movdqa		$xt3,0x30(%rsp)		# SIMD equivalent of "@x[11]"
-	movdqa		(%r10),$xt3		# .Lrot16(%rip)
-	mov		\$10,%eax
-	movdqa		$xd0,0x100-0x100(%rcx)	# save SIMD counters
-	jmp		.Loop4x
-
-.align	32
-.Loop4x:
-___
-	foreach (&SSSE3_lane_ROUND(0, 4, 8,12)) { eval; }
-	foreach (&SSSE3_lane_ROUND(0, 5,10,15)) { eval; }
-$code.=<<___;
-	dec		%eax
-	jnz		.Loop4x
-
-	paddd		0x40(%rsp),$xa0		# accumulate key material
-	paddd		0x50(%rsp),$xa1
-	paddd		0x60(%rsp),$xa2
-	paddd		0x70(%rsp),$xa3
-
-	movdqa		$xa0,$xt2		# "de-interlace" data
-	punpckldq	$xa1,$xa0
-	movdqa		$xa2,$xt3
-	punpckldq	$xa3,$xa2
-	punpckhdq	$xa1,$xt2
-	punpckhdq	$xa3,$xt3
-	movdqa		$xa0,$xa1
-	punpcklqdq	$xa2,$xa0		# "a0"
-	movdqa		$xt2,$xa3
-	punpcklqdq	$xt3,$xt2		# "a2"
-	punpckhqdq	$xa2,$xa1		# "a1"
-	punpckhqdq	$xt3,$xa3		# "a3"
-___
-	($xa2,$xt2)=($xt2,$xa2);
-$code.=<<___;
-	paddd		0x80-0x100(%rcx),$xb0
-	paddd		0x90-0x100(%rcx),$xb1
-	paddd		0xa0-0x100(%rcx),$xb2
-	paddd		0xb0-0x100(%rcx),$xb3
-
-	movdqa		$xa0,0x00(%rsp)		# offload $xaN
-	movdqa		$xa1,0x10(%rsp)
-	movdqa		0x20(%rsp),$xa0		# "xc2"
-	movdqa		0x30(%rsp),$xa1		# "xc3"
-
-	movdqa		$xb0,$xt2
-	punpckldq	$xb1,$xb0
-	movdqa		$xb2,$xt3
-	punpckldq	$xb3,$xb2
-	punpckhdq	$xb1,$xt2
-	punpckhdq	$xb3,$xt3
-	movdqa		$xb0,$xb1
-	punpcklqdq	$xb2,$xb0		# "b0"
-	movdqa		$xt2,$xb3
-	punpcklqdq	$xt3,$xt2		# "b2"
-	punpckhqdq	$xb2,$xb1		# "b1"
-	punpckhqdq	$xt3,$xb3		# "b3"
-___
-	($xb2,$xt2)=($xt2,$xb2);
-	my ($xc0,$xc1,$xc2,$xc3)=($xt0,$xt1,$xa0,$xa1);
-$code.=<<___;
-	paddd		0xc0-0x100(%rcx),$xc0
-	paddd		0xd0-0x100(%rcx),$xc1
-	paddd		0xe0-0x100(%rcx),$xc2
-	paddd		0xf0-0x100(%rcx),$xc3
-
-	movdqa		$xa2,0x20(%rsp)		# keep offloading $xaN
-	movdqa		$xa3,0x30(%rsp)
-
-	movdqa		$xc0,$xt2
-	punpckldq	$xc1,$xc0
-	movdqa		$xc2,$xt3
-	punpckldq	$xc3,$xc2
-	punpckhdq	$xc1,$xt2
-	punpckhdq	$xc3,$xt3
-	movdqa		$xc0,$xc1
-	punpcklqdq	$xc2,$xc0		# "c0"
-	movdqa		$xt2,$xc3
-	punpcklqdq	$xt3,$xt2		# "c2"
-	punpckhqdq	$xc2,$xc1		# "c1"
-	punpckhqdq	$xt3,$xc3		# "c3"
-___
-	($xc2,$xt2)=($xt2,$xc2);
-	($xt0,$xt1)=($xa2,$xa3);		# use $xaN as temporary
-$code.=<<___;
-	paddd		0x100-0x100(%rcx),$xd0
-	paddd		0x110-0x100(%rcx),$xd1
-	paddd		0x120-0x100(%rcx),$xd2
-	paddd		0x130-0x100(%rcx),$xd3
-
-	movdqa		$xd0,$xt2
-	punpckldq	$xd1,$xd0
-	movdqa		$xd2,$xt3
-	punpckldq	$xd3,$xd2
-	punpckhdq	$xd1,$xt2
-	punpckhdq	$xd3,$xt3
-	movdqa		$xd0,$xd1
-	punpcklqdq	$xd2,$xd0		# "d0"
-	movdqa		$xt2,$xd3
-	punpcklqdq	$xt3,$xt2		# "d2"
-	punpckhqdq	$xd2,$xd1		# "d1"
-	punpckhqdq	$xt3,$xd3		# "d3"
-___
-	($xd2,$xt2)=($xt2,$xd2);
-$code.=<<___;
-	cmp		\$64*4,$len
-	jb		.Ltail4x
-
-	movdqu		0x00($inp),$xt0		# xor with input
-	movdqu		0x10($inp),$xt1
-	movdqu		0x20($inp),$xt2
-	movdqu		0x30($inp),$xt3
-	pxor		0x00(%rsp),$xt0		# $xaN is offloaded, remember?
-	pxor		$xb0,$xt1
-	pxor		$xc0,$xt2
-	pxor		$xd0,$xt3
-
-	 movdqu		$xt0,0x00($out)
-	movdqu		0x40($inp),$xt0
-	 movdqu		$xt1,0x10($out)
-	movdqu		0x50($inp),$xt1
-	 movdqu		$xt2,0x20($out)
-	movdqu		0x60($inp),$xt2
-	 movdqu		$xt3,0x30($out)
-	movdqu		0x70($inp),$xt3
-	lea		0x80($inp),$inp		# size optimization
-	pxor		0x10(%rsp),$xt0
-	pxor		$xb1,$xt1
-	pxor		$xc1,$xt2
-	pxor		$xd1,$xt3
-
-	 movdqu		$xt0,0x40($out)
-	movdqu		0x00($inp),$xt0
-	 movdqu		$xt1,0x50($out)
-	movdqu		0x10($inp),$xt1
-	 movdqu		$xt2,0x60($out)
-	movdqu		0x20($inp),$xt2
-	 movdqu		$xt3,0x70($out)
-	 lea		0x80($out),$out		# size optimization
-	movdqu		0x30($inp),$xt3
-	pxor		0x20(%rsp),$xt0
-	pxor		$xb2,$xt1
-	pxor		$xc2,$xt2
-	pxor		$xd2,$xt3
-
-	 movdqu		$xt0,0x00($out)
-	movdqu		0x40($inp),$xt0
-	 movdqu		$xt1,0x10($out)
-	movdqu		0x50($inp),$xt1
-	 movdqu		$xt2,0x20($out)
-	movdqu		0x60($inp),$xt2
-	 movdqu		$xt3,0x30($out)
-	movdqu		0x70($inp),$xt3
-	lea		0x80($inp),$inp		# inp+=64*4
-	pxor		0x30(%rsp),$xt0
-	pxor		$xb3,$xt1
-	pxor		$xc3,$xt2
-	pxor		$xd3,$xt3
-	movdqu		$xt0,0x40($out)
-	movdqu		$xt1,0x50($out)
-	movdqu		$xt2,0x60($out)
-	movdqu		$xt3,0x70($out)
-	lea		0x80($out),$out		# out+=64*4
-
-	sub		\$64*4,$len
-	jnz		.Loop_outer4x
-
-	jmp		.Ldone4x
-
-.Ltail4x:
-	cmp		\$192,$len
-	jae		.L192_or_more4x
-	cmp		\$128,$len
-	jae		.L128_or_more4x
-	cmp		\$64,$len
-	jae		.L64_or_more4x
-
-	#movdqa		0x00(%rsp),$xt0		# $xaN is offloaded, remember?
-	xor		%r10,%r10
-	#movdqa		$xt0,0x00(%rsp)
-	movdqa		$xb0,0x10(%rsp)
-	movdqa		$xc0,0x20(%rsp)
-	movdqa		$xd0,0x30(%rsp)
-	jmp		.Loop_tail4x
-
-.align	32
-.L64_or_more4x:
-	movdqu		0x00($inp),$xt0		# xor with input
-	movdqu		0x10($inp),$xt1
-	movdqu		0x20($inp),$xt2
-	movdqu		0x30($inp),$xt3
-	pxor		0x00(%rsp),$xt0		# $xaxN is offloaded, remember?
-	pxor		$xb0,$xt1
-	pxor		$xc0,$xt2
-	pxor		$xd0,$xt3
-	movdqu		$xt0,0x00($out)
-	movdqu		$xt1,0x10($out)
-	movdqu		$xt2,0x20($out)
-	movdqu		$xt3,0x30($out)
-	je		.Ldone4x
-
-	movdqa		0x10(%rsp),$xt0		# $xaN is offloaded, remember?
-	lea		0x40($inp),$inp		# inp+=64*1
-	xor		%r10,%r10
-	movdqa		$xt0,0x00(%rsp)
-	movdqa		$xb1,0x10(%rsp)
-	lea		0x40($out),$out		# out+=64*1
-	movdqa		$xc1,0x20(%rsp)
-	sub		\$64,$len		# len-=64*1
-	movdqa		$xd1,0x30(%rsp)
-	jmp		.Loop_tail4x
-
-.align	32
-.L128_or_more4x:
-	movdqu		0x00($inp),$xt0		# xor with input
-	movdqu		0x10($inp),$xt1
-	movdqu		0x20($inp),$xt2
-	movdqu		0x30($inp),$xt3
-	pxor		0x00(%rsp),$xt0		# $xaN is offloaded, remember?
-	pxor		$xb0,$xt1
-	pxor		$xc0,$xt2
-	pxor		$xd0,$xt3
-
-	 movdqu		$xt0,0x00($out)
-	movdqu		0x40($inp),$xt0
-	 movdqu		$xt1,0x10($out)
-	movdqu		0x50($inp),$xt1
-	 movdqu		$xt2,0x20($out)
-	movdqu		0x60($inp),$xt2
-	 movdqu		$xt3,0x30($out)
-	movdqu		0x70($inp),$xt3
-	pxor		0x10(%rsp),$xt0
-	pxor		$xb1,$xt1
-	pxor		$xc1,$xt2
-	pxor		$xd1,$xt3
-	movdqu		$xt0,0x40($out)
-	movdqu		$xt1,0x50($out)
-	movdqu		$xt2,0x60($out)
-	movdqu		$xt3,0x70($out)
-	je		.Ldone4x
-
-	movdqa		0x20(%rsp),$xt0		# $xaN is offloaded, remember?
-	lea		0x80($inp),$inp		# inp+=64*2
-	xor		%r10,%r10
-	movdqa		$xt0,0x00(%rsp)
-	movdqa		$xb2,0x10(%rsp)
-	lea		0x80($out),$out		# out+=64*2
-	movdqa		$xc2,0x20(%rsp)
-	sub		\$128,$len		# len-=64*2
-	movdqa		$xd2,0x30(%rsp)
-	jmp		.Loop_tail4x
-
-.align	32
-.L192_or_more4x:
-	movdqu		0x00($inp),$xt0		# xor with input
-	movdqu		0x10($inp),$xt1
-	movdqu		0x20($inp),$xt2
-	movdqu		0x30($inp),$xt3
-	pxor		0x00(%rsp),$xt0		# $xaN is offloaded, remember?
-	pxor		$xb0,$xt1
-	pxor		$xc0,$xt2
-	pxor		$xd0,$xt3
-
-	 movdqu		$xt0,0x00($out)
-	movdqu		0x40($inp),$xt0
-	 movdqu		$xt1,0x10($out)
-	movdqu		0x50($inp),$xt1
-	 movdqu		$xt2,0x20($out)
-	movdqu		0x60($inp),$xt2
-	 movdqu		$xt3,0x30($out)
-	movdqu		0x70($inp),$xt3
-	lea		0x80($inp),$inp		# size optimization
-	pxor		0x10(%rsp),$xt0
-	pxor		$xb1,$xt1
-	pxor		$xc1,$xt2
-	pxor		$xd1,$xt3
-
-	 movdqu		$xt0,0x40($out)
-	movdqu		0x00($inp),$xt0
-	 movdqu		$xt1,0x50($out)
-	movdqu		0x10($inp),$xt1
-	 movdqu		$xt2,0x60($out)
-	movdqu		0x20($inp),$xt2
-	 movdqu		$xt3,0x70($out)
-	 lea		0x80($out),$out		# size optimization
-	movdqu		0x30($inp),$xt3
-	pxor		0x20(%rsp),$xt0
-	pxor		$xb2,$xt1
-	pxor		$xc2,$xt2
-	pxor		$xd2,$xt3
-	movdqu		$xt0,0x00($out)
-	movdqu		$xt1,0x10($out)
-	movdqu		$xt2,0x20($out)
-	movdqu		$xt3,0x30($out)
-	je		.Ldone4x
-
-	movdqa		0x30(%rsp),$xt0		# $xaN is offloaded, remember?
-	lea		0x40($inp),$inp		# inp+=64*3
-	xor		%r10,%r10
-	movdqa		$xt0,0x00(%rsp)
-	movdqa		$xb3,0x10(%rsp)
-	lea		0x40($out),$out		# out+=64*3
-	movdqa		$xc3,0x20(%rsp)
-	sub		\$192,$len		# len-=64*3
-	movdqa		$xd3,0x30(%rsp)
-
-.Loop_tail4x:
-	movzb		($inp,%r10),%eax
-	movzb		(%rsp,%r10),%ecx
-	lea		1(%r10),%r10
-	xor		%ecx,%eax
-	mov		%al,-1($out,%r10)
-	dec		$len
-	jnz		.Loop_tail4x
-
-.Ldone4x:
-___
-$code.=<<___	if ($win64);
-	movaps		-0xa8(%r9),%xmm6
-	movaps		-0x98(%r9),%xmm7
-	movaps		-0x88(%r9),%xmm8
-	movaps		-0x78(%r9),%xmm9
-	movaps		-0x68(%r9),%xmm10
-	movaps		-0x58(%r9),%xmm11
-	movaps		-0x48(%r9),%xmm12
-	movaps		-0x38(%r9),%xmm13
-	movaps		-0x28(%r9),%xmm14
-	movaps		-0x18(%r9),%xmm15
-___
-$code.=<<___;
-	lea		(%r9),%rsp
-.cfi_def_cfa_register	rsp
-.L4x_epilogue:
-	ret
-.cfi_endproc
-.size	ChaCha20_ctr32_ssse3_4x,.-ChaCha20_ctr32_ssse3_4x
-___
-}
-
-########################################################################
-# AVX2 code path
-if ($avx>1) {
-my ($xb0,$xb1,$xb2,$xb3, $xd0,$xd1,$xd2,$xd3,
-    $xa0,$xa1,$xa2,$xa3, $xt0,$xt1,$xt2,$xt3)=map("%ymm$_",(0..15));
-my @xx=($xa0,$xa1,$xa2,$xa3, $xb0,$xb1,$xb2,$xb3,
-	"%nox","%nox","%nox","%nox", $xd0,$xd1,$xd2,$xd3);
-
-sub AVX2_lane_ROUND {
-my ($a0,$b0,$c0,$d0)=@_;
-my ($a1,$b1,$c1,$d1)=map(($_&~3)+(($_+1)&3),($a0,$b0,$c0,$d0));
-my ($a2,$b2,$c2,$d2)=map(($_&~3)+(($_+1)&3),($a1,$b1,$c1,$d1));
-my ($a3,$b3,$c3,$d3)=map(($_&~3)+(($_+1)&3),($a2,$b2,$c2,$d2));
-my ($xc,$xc_,$t0,$t1)=map("\"$_\"",$xt0,$xt1,$xt2,$xt3);
-my @x=map("\"$_\"",@xx);
-
-	# Consider order in which variables are addressed by their
-	# index:
-	#
-	#	a   b   c   d
-	#
-	#	0   4   8  12 < even round
-	#	1   5   9  13
-	#	2   6  10  14
-	#	3   7  11  15
-	#	0   5  10  15 < odd round
-	#	1   6  11  12
-	#	2   7   8  13
-	#	3   4   9  14
-	#
-	# 'a', 'b' and 'd's are permanently allocated in registers,
-	# @x[0..7,12..15], while 'c's are maintained in memory. If
-	# you observe 'c' column, you'll notice that pair of 'c's is
-	# invariant between rounds. This means that we have to reload
-	# them once per round, in the middle. This is why you'll see
-	# bunch of 'c' stores and loads in the middle, but none in
-	# the beginning or end.
-
-	(
-	"&vpaddd	(@x[$a0],@x[$a0],@x[$b0])",	# Q1
-	"&vpxor		(@x[$d0],@x[$a0],@x[$d0])",
-	"&vpshufb	(@x[$d0],@x[$d0],$t1)",
-	 "&vpaddd	(@x[$a1],@x[$a1],@x[$b1])",	# Q2
-	 "&vpxor	(@x[$d1],@x[$a1],@x[$d1])",
-	 "&vpshufb	(@x[$d1],@x[$d1],$t1)",
-
-	"&vpaddd	($xc,$xc,@x[$d0])",
-	"&vpxor		(@x[$b0],$xc,@x[$b0])",
-	"&vpslld	($t0,@x[$b0],12)",
-	"&vpsrld	(@x[$b0],@x[$b0],20)",
-	"&vpor		(@x[$b0],$t0,@x[$b0])",
-	"&vbroadcasti128($t0,'(%r11)')",		# .Lrot24(%rip)
-	 "&vpaddd	($xc_,$xc_,@x[$d1])",
-	 "&vpxor	(@x[$b1],$xc_,@x[$b1])",
-	 "&vpslld	($t1,@x[$b1],12)",
-	 "&vpsrld	(@x[$b1],@x[$b1],20)",
-	 "&vpor		(@x[$b1],$t1,@x[$b1])",
-
-	"&vpaddd	(@x[$a0],@x[$a0],@x[$b0])",
-	"&vpxor		(@x[$d0],@x[$a0],@x[$d0])",
-	"&vpshufb	(@x[$d0],@x[$d0],$t0)",
-	 "&vpaddd	(@x[$a1],@x[$a1],@x[$b1])",
-	 "&vpxor	(@x[$d1],@x[$a1],@x[$d1])",
-	 "&vpshufb	(@x[$d1],@x[$d1],$t0)",
-
-	"&vpaddd	($xc,$xc,@x[$d0])",
-	"&vpxor		(@x[$b0],$xc,@x[$b0])",
-	"&vpslld	($t1,@x[$b0],7)",
-	"&vpsrld	(@x[$b0],@x[$b0],25)",
-	"&vpor		(@x[$b0],$t1,@x[$b0])",
-	"&vbroadcasti128($t1,'(%r10)')",		# .Lrot16(%rip)
-	 "&vpaddd	($xc_,$xc_,@x[$d1])",
-	 "&vpxor	(@x[$b1],$xc_,@x[$b1])",
-	 "&vpslld	($t0,@x[$b1],7)",
-	 "&vpsrld	(@x[$b1],@x[$b1],25)",
-	 "&vpor		(@x[$b1],$t0,@x[$b1])",
-
-	"&vmovdqa	(\"`32*($c0-8)`(%rsp)\",$xc)",	# reload pair of 'c's
-	 "&vmovdqa	(\"`32*($c1-8)`(%rsp)\",$xc_)",
-	"&vmovdqa	($xc,\"`32*($c2-8)`(%rsp)\")",
-	 "&vmovdqa	($xc_,\"`32*($c3-8)`(%rsp)\")",
-
-	"&vpaddd	(@x[$a2],@x[$a2],@x[$b2])",	# Q3
-	"&vpxor		(@x[$d2],@x[$a2],@x[$d2])",
-	"&vpshufb	(@x[$d2],@x[$d2],$t1)",
-	 "&vpaddd	(@x[$a3],@x[$a3],@x[$b3])",	# Q4
-	 "&vpxor	(@x[$d3],@x[$a3],@x[$d3])",
-	 "&vpshufb	(@x[$d3],@x[$d3],$t1)",
-
-	"&vpaddd	($xc,$xc,@x[$d2])",
-	"&vpxor		(@x[$b2],$xc,@x[$b2])",
-	"&vpslld	($t0,@x[$b2],12)",
-	"&vpsrld	(@x[$b2],@x[$b2],20)",
-	"&vpor		(@x[$b2],$t0,@x[$b2])",
-	"&vbroadcasti128($t0,'(%r11)')",		# .Lrot24(%rip)
-	 "&vpaddd	($xc_,$xc_,@x[$d3])",
-	 "&vpxor	(@x[$b3],$xc_,@x[$b3])",
-	 "&vpslld	($t1,@x[$b3],12)",
-	 "&vpsrld	(@x[$b3],@x[$b3],20)",
-	 "&vpor		(@x[$b3],$t1,@x[$b3])",
-
-	"&vpaddd	(@x[$a2],@x[$a2],@x[$b2])",
-	"&vpxor		(@x[$d2],@x[$a2],@x[$d2])",
-	"&vpshufb	(@x[$d2],@x[$d2],$t0)",
-	 "&vpaddd	(@x[$a3],@x[$a3],@x[$b3])",
-	 "&vpxor	(@x[$d3],@x[$a3],@x[$d3])",
-	 "&vpshufb	(@x[$d3],@x[$d3],$t0)",
-
-	"&vpaddd	($xc,$xc,@x[$d2])",
-	"&vpxor		(@x[$b2],$xc,@x[$b2])",
-	"&vpslld	($t1,@x[$b2],7)",
-	"&vpsrld	(@x[$b2],@x[$b2],25)",
-	"&vpor		(@x[$b2],$t1,@x[$b2])",
-	"&vbroadcasti128($t1,'(%r10)')",		# .Lrot16(%rip)
-	 "&vpaddd	($xc_,$xc_,@x[$d3])",
-	 "&vpxor	(@x[$b3],$xc_,@x[$b3])",
-	 "&vpslld	($t0,@x[$b3],7)",
-	 "&vpsrld	(@x[$b3],@x[$b3],25)",
-	 "&vpor		(@x[$b3],$t0,@x[$b3])"
-	);
-}
-
-my $xframe = $win64 ? 0xa8 : 8;
-
-$code.=<<___;
-.globl	ChaCha20_ctr32_avx2
-.type	ChaCha20_ctr32_avx2,\@function,5
-.align	32
-ChaCha20_ctr32_avx2:
-.cfi_startproc
-	_CET_ENDBR
-	mov		%rsp,%r9		# frame register
-.cfi_def_cfa_register	r9
-	sub		\$0x280+$xframe,%rsp
-	and		\$-32,%rsp
-___
-$code.=<<___	if ($win64);
-	movaps		%xmm6,-0xa8(%r9)
-	movaps		%xmm7,-0x98(%r9)
-	movaps		%xmm8,-0x88(%r9)
-	movaps		%xmm9,-0x78(%r9)
-	movaps		%xmm10,-0x68(%r9)
-	movaps		%xmm11,-0x58(%r9)
-	movaps		%xmm12,-0x48(%r9)
-	movaps		%xmm13,-0x38(%r9)
-	movaps		%xmm14,-0x28(%r9)
-	movaps		%xmm15,-0x18(%r9)
-.L8x_body:
-___
-$code.=<<___;
-	vzeroupper
-
-	################ stack layout
-	# +0x00		SIMD equivalent of @x[8-12]
-	# ...
-	# +0x80		constant copy of key[0-2] smashed by lanes
-	# ...
-	# +0x200	SIMD counters (with nonce smashed by lanes)
-	# ...
-	# +0x280
-
-	vbroadcasti128	.Lsigma(%rip),$xa3	# key[0]
-	vbroadcasti128	($key),$xb3		# key[1]
-	vbroadcasti128	16($key),$xt3		# key[2]
-	vbroadcasti128	($counter),$xd3		# key[3]
-	lea		0x100(%rsp),%rcx	# size optimization
-	lea		0x200(%rsp),%rax	# size optimization
-	lea		.Lrot16(%rip),%r10
-	lea		.Lrot24(%rip),%r11
-
-	vpshufd		\$0x00,$xa3,$xa0	# smash key by lanes...
-	vpshufd		\$0x55,$xa3,$xa1
-	vmovdqa		$xa0,0x80-0x100(%rcx)	# ... and offload
-	vpshufd		\$0xaa,$xa3,$xa2
-	vmovdqa		$xa1,0xa0-0x100(%rcx)
-	vpshufd		\$0xff,$xa3,$xa3
-	vmovdqa		$xa2,0xc0-0x100(%rcx)
-	vmovdqa		$xa3,0xe0-0x100(%rcx)
-
-	vpshufd		\$0x00,$xb3,$xb0
-	vpshufd		\$0x55,$xb3,$xb1
-	vmovdqa		$xb0,0x100-0x100(%rcx)
-	vpshufd		\$0xaa,$xb3,$xb2
-	vmovdqa		$xb1,0x120-0x100(%rcx)
-	vpshufd		\$0xff,$xb3,$xb3
-	vmovdqa		$xb2,0x140-0x100(%rcx)
-	vmovdqa		$xb3,0x160-0x100(%rcx)
-
-	vpshufd		\$0x00,$xt3,$xt0	# "xc0"
-	vpshufd		\$0x55,$xt3,$xt1	# "xc1"
-	vmovdqa		$xt0,0x180-0x200(%rax)
-	vpshufd		\$0xaa,$xt3,$xt2	# "xc2"
-	vmovdqa		$xt1,0x1a0-0x200(%rax)
-	vpshufd		\$0xff,$xt3,$xt3	# "xc3"
-	vmovdqa		$xt2,0x1c0-0x200(%rax)
-	vmovdqa		$xt3,0x1e0-0x200(%rax)
-
-	vpshufd		\$0x00,$xd3,$xd0
-	vpshufd		\$0x55,$xd3,$xd1
-	vpaddd		.Lincy(%rip),$xd0,$xd0	# don't save counters yet
-	vpshufd		\$0xaa,$xd3,$xd2
-	vmovdqa		$xd1,0x220-0x200(%rax)
-	vpshufd		\$0xff,$xd3,$xd3
-	vmovdqa		$xd2,0x240-0x200(%rax)
-	vmovdqa		$xd3,0x260-0x200(%rax)
-
-	jmp		.Loop_enter8x
-
-.align	32
-.Loop_outer8x:
-	vmovdqa		0x80-0x100(%rcx),$xa0	# re-load smashed key
-	vmovdqa		0xa0-0x100(%rcx),$xa1
-	vmovdqa		0xc0-0x100(%rcx),$xa2
-	vmovdqa		0xe0-0x100(%rcx),$xa3
-	vmovdqa		0x100-0x100(%rcx),$xb0
-	vmovdqa		0x120-0x100(%rcx),$xb1
-	vmovdqa		0x140-0x100(%rcx),$xb2
-	vmovdqa		0x160-0x100(%rcx),$xb3
-	vmovdqa		0x180-0x200(%rax),$xt0	# "xc0"
-	vmovdqa		0x1a0-0x200(%rax),$xt1	# "xc1"
-	vmovdqa		0x1c0-0x200(%rax),$xt2	# "xc2"
-	vmovdqa		0x1e0-0x200(%rax),$xt3	# "xc3"
-	vmovdqa		0x200-0x200(%rax),$xd0
-	vmovdqa		0x220-0x200(%rax),$xd1
-	vmovdqa		0x240-0x200(%rax),$xd2
-	vmovdqa		0x260-0x200(%rax),$xd3
-	vpaddd		.Leight(%rip),$xd0,$xd0	# next SIMD counters
-
-.Loop_enter8x:
-	vmovdqa		$xt2,0x40(%rsp)		# SIMD equivalent of "@x[10]"
-	vmovdqa		$xt3,0x60(%rsp)		# SIMD equivalent of "@x[11]"
-	vbroadcasti128	(%r10),$xt3
-	vmovdqa		$xd0,0x200-0x200(%rax)	# save SIMD counters
-	mov		\$10,%eax
-	jmp		.Loop8x
-
-.align	32
-.Loop8x:
-___
-	foreach (&AVX2_lane_ROUND(0, 4, 8,12)) { eval; }
-	foreach (&AVX2_lane_ROUND(0, 5,10,15)) { eval; }
-$code.=<<___;
-	dec		%eax
-	jnz		.Loop8x
-
-	lea		0x200(%rsp),%rax	# size optimization
-	vpaddd		0x80-0x100(%rcx),$xa0,$xa0	# accumulate key
-	vpaddd		0xa0-0x100(%rcx),$xa1,$xa1
-	vpaddd		0xc0-0x100(%rcx),$xa2,$xa2
-	vpaddd		0xe0-0x100(%rcx),$xa3,$xa3
-
-	vpunpckldq	$xa1,$xa0,$xt2		# "de-interlace" data
-	vpunpckldq	$xa3,$xa2,$xt3
-	vpunpckhdq	$xa1,$xa0,$xa0
-	vpunpckhdq	$xa3,$xa2,$xa2
-	vpunpcklqdq	$xt3,$xt2,$xa1		# "a0"
-	vpunpckhqdq	$xt3,$xt2,$xt2		# "a1"
-	vpunpcklqdq	$xa2,$xa0,$xa3		# "a2"
-	vpunpckhqdq	$xa2,$xa0,$xa0		# "a3"
-___
-	($xa0,$xa1,$xa2,$xa3,$xt2)=($xa1,$xt2,$xa3,$xa0,$xa2);
-$code.=<<___;
-	vpaddd		0x100-0x100(%rcx),$xb0,$xb0
-	vpaddd		0x120-0x100(%rcx),$xb1,$xb1
-	vpaddd		0x140-0x100(%rcx),$xb2,$xb2
-	vpaddd		0x160-0x100(%rcx),$xb3,$xb3
-
-	vpunpckldq	$xb1,$xb0,$xt2
-	vpunpckldq	$xb3,$xb2,$xt3
-	vpunpckhdq	$xb1,$xb0,$xb0
-	vpunpckhdq	$xb3,$xb2,$xb2
-	vpunpcklqdq	$xt3,$xt2,$xb1		# "b0"
-	vpunpckhqdq	$xt3,$xt2,$xt2		# "b1"
-	vpunpcklqdq	$xb2,$xb0,$xb3		# "b2"
-	vpunpckhqdq	$xb2,$xb0,$xb0		# "b3"
-___
-	($xb0,$xb1,$xb2,$xb3,$xt2)=($xb1,$xt2,$xb3,$xb0,$xb2);
-$code.=<<___;
-	vperm2i128	\$0x20,$xb0,$xa0,$xt3	# "de-interlace" further
-	vperm2i128	\$0x31,$xb0,$xa0,$xb0
-	vperm2i128	\$0x20,$xb1,$xa1,$xa0
-	vperm2i128	\$0x31,$xb1,$xa1,$xb1
-	vperm2i128	\$0x20,$xb2,$xa2,$xa1
-	vperm2i128	\$0x31,$xb2,$xa2,$xb2
-	vperm2i128	\$0x20,$xb3,$xa3,$xa2
-	vperm2i128	\$0x31,$xb3,$xa3,$xb3
-___
-	($xa0,$xa1,$xa2,$xa3,$xt3)=($xt3,$xa0,$xa1,$xa2,$xa3);
-	my ($xc0,$xc1,$xc2,$xc3)=($xt0,$xt1,$xa0,$xa1);
-$code.=<<___;
-	vmovdqa		$xa0,0x00(%rsp)		# offload $xaN
-	vmovdqa		$xa1,0x20(%rsp)
-	vmovdqa		0x40(%rsp),$xc2		# $xa0
-	vmovdqa		0x60(%rsp),$xc3		# $xa1
-
-	vpaddd		0x180-0x200(%rax),$xc0,$xc0
-	vpaddd		0x1a0-0x200(%rax),$xc1,$xc1
-	vpaddd		0x1c0-0x200(%rax),$xc2,$xc2
-	vpaddd		0x1e0-0x200(%rax),$xc3,$xc3
-
-	vpunpckldq	$xc1,$xc0,$xt2
-	vpunpckldq	$xc3,$xc2,$xt3
-	vpunpckhdq	$xc1,$xc0,$xc0
-	vpunpckhdq	$xc3,$xc2,$xc2
-	vpunpcklqdq	$xt3,$xt2,$xc1		# "c0"
-	vpunpckhqdq	$xt3,$xt2,$xt2		# "c1"
-	vpunpcklqdq	$xc2,$xc0,$xc3		# "c2"
-	vpunpckhqdq	$xc2,$xc0,$xc0		# "c3"
-___
-	($xc0,$xc1,$xc2,$xc3,$xt2)=($xc1,$xt2,$xc3,$xc0,$xc2);
-$code.=<<___;
-	vpaddd		0x200-0x200(%rax),$xd0,$xd0
-	vpaddd		0x220-0x200(%rax),$xd1,$xd1
-	vpaddd		0x240-0x200(%rax),$xd2,$xd2
-	vpaddd		0x260-0x200(%rax),$xd3,$xd3
-
-	vpunpckldq	$xd1,$xd0,$xt2
-	vpunpckldq	$xd3,$xd2,$xt3
-	vpunpckhdq	$xd1,$xd0,$xd0
-	vpunpckhdq	$xd3,$xd2,$xd2
-	vpunpcklqdq	$xt3,$xt2,$xd1		# "d0"
-	vpunpckhqdq	$xt3,$xt2,$xt2		# "d1"
-	vpunpcklqdq	$xd2,$xd0,$xd3		# "d2"
-	vpunpckhqdq	$xd2,$xd0,$xd0		# "d3"
-___
-	($xd0,$xd1,$xd2,$xd3,$xt2)=($xd1,$xt2,$xd3,$xd0,$xd2);
-$code.=<<___;
-	vperm2i128	\$0x20,$xd0,$xc0,$xt3	# "de-interlace" further
-	vperm2i128	\$0x31,$xd0,$xc0,$xd0
-	vperm2i128	\$0x20,$xd1,$xc1,$xc0
-	vperm2i128	\$0x31,$xd1,$xc1,$xd1
-	vperm2i128	\$0x20,$xd2,$xc2,$xc1
-	vperm2i128	\$0x31,$xd2,$xc2,$xd2
-	vperm2i128	\$0x20,$xd3,$xc3,$xc2
-	vperm2i128	\$0x31,$xd3,$xc3,$xd3
-___
-	($xc0,$xc1,$xc2,$xc3,$xt3)=($xt3,$xc0,$xc1,$xc2,$xc3);
-	($xb0,$xb1,$xb2,$xb3,$xc0,$xc1,$xc2,$xc3)=
-	($xc0,$xc1,$xc2,$xc3,$xb0,$xb1,$xb2,$xb3);
-	($xa0,$xa1)=($xt2,$xt3);
-$code.=<<___;
-	vmovdqa		0x00(%rsp),$xa0		# $xaN was offloaded, remember?
-	vmovdqa		0x20(%rsp),$xa1
-
-	cmp		\$64*8,$len
-	jb		.Ltail8x
-
-	vpxor		0x00($inp),$xa0,$xa0	# xor with input
-	vpxor		0x20($inp),$xb0,$xb0
-	vpxor		0x40($inp),$xc0,$xc0
-	vpxor		0x60($inp),$xd0,$xd0
-	lea		0x80($inp),$inp		# size optimization
-	vmovdqu		$xa0,0x00($out)
-	vmovdqu		$xb0,0x20($out)
-	vmovdqu		$xc0,0x40($out)
-	vmovdqu		$xd0,0x60($out)
-	lea		0x80($out),$out		# size optimization
-
-	vpxor		0x00($inp),$xa1,$xa1
-	vpxor		0x20($inp),$xb1,$xb1
-	vpxor		0x40($inp),$xc1,$xc1
-	vpxor		0x60($inp),$xd1,$xd1
-	lea		0x80($inp),$inp		# size optimization
-	vmovdqu		$xa1,0x00($out)
-	vmovdqu		$xb1,0x20($out)
-	vmovdqu		$xc1,0x40($out)
-	vmovdqu		$xd1,0x60($out)
-	lea		0x80($out),$out		# size optimization
-
-	vpxor		0x00($inp),$xa2,$xa2
-	vpxor		0x20($inp),$xb2,$xb2
-	vpxor		0x40($inp),$xc2,$xc2
-	vpxor		0x60($inp),$xd2,$xd2
-	lea		0x80($inp),$inp		# size optimization
-	vmovdqu		$xa2,0x00($out)
-	vmovdqu		$xb2,0x20($out)
-	vmovdqu		$xc2,0x40($out)
-	vmovdqu		$xd2,0x60($out)
-	lea		0x80($out),$out		# size optimization
-
-	vpxor		0x00($inp),$xa3,$xa3
-	vpxor		0x20($inp),$xb3,$xb3
-	vpxor		0x40($inp),$xc3,$xc3
-	vpxor		0x60($inp),$xd3,$xd3
-	lea		0x80($inp),$inp		# size optimization
-	vmovdqu		$xa3,0x00($out)
-	vmovdqu		$xb3,0x20($out)
-	vmovdqu		$xc3,0x40($out)
-	vmovdqu		$xd3,0x60($out)
-	lea		0x80($out),$out		# size optimization
-
-	sub		\$64*8,$len
-	jnz		.Loop_outer8x
-
-	jmp		.Ldone8x
-
-.Ltail8x:
-	cmp		\$448,$len
-	jae		.L448_or_more8x
-	cmp		\$384,$len
-	jae		.L384_or_more8x
-	cmp		\$320,$len
-	jae		.L320_or_more8x
-	cmp		\$256,$len
-	jae		.L256_or_more8x
-	cmp		\$192,$len
-	jae		.L192_or_more8x
-	cmp		\$128,$len
-	jae		.L128_or_more8x
-	cmp		\$64,$len
-	jae		.L64_or_more8x
-
-	xor		%r10,%r10
-	vmovdqa		$xa0,0x00(%rsp)
-	vmovdqa		$xb0,0x20(%rsp)
-	jmp		.Loop_tail8x
-
-.align	32
-.L64_or_more8x:
-	vpxor		0x00($inp),$xa0,$xa0	# xor with input
-	vpxor		0x20($inp),$xb0,$xb0
-	vmovdqu		$xa0,0x00($out)
-	vmovdqu		$xb0,0x20($out)
-	je		.Ldone8x
-
-	lea		0x40($inp),$inp		# inp+=64*1
-	xor		%r10,%r10
-	vmovdqa		$xc0,0x00(%rsp)
-	lea		0x40($out),$out		# out+=64*1
-	sub		\$64,$len		# len-=64*1
-	vmovdqa		$xd0,0x20(%rsp)
-	jmp		.Loop_tail8x
-
-.align	32
-.L128_or_more8x:
-	vpxor		0x00($inp),$xa0,$xa0	# xor with input
-	vpxor		0x20($inp),$xb0,$xb0
-	vpxor		0x40($inp),$xc0,$xc0
-	vpxor		0x60($inp),$xd0,$xd0
-	vmovdqu		$xa0,0x00($out)
-	vmovdqu		$xb0,0x20($out)
-	vmovdqu		$xc0,0x40($out)
-	vmovdqu		$xd0,0x60($out)
-	je		.Ldone8x
-
-	lea		0x80($inp),$inp		# inp+=64*2
-	xor		%r10,%r10
-	vmovdqa		$xa1,0x00(%rsp)
-	lea		0x80($out),$out		# out+=64*2
-	sub		\$128,$len		# len-=64*2
-	vmovdqa		$xb1,0x20(%rsp)
-	jmp		.Loop_tail8x
-
-.align	32
-.L192_or_more8x:
-	vpxor		0x00($inp),$xa0,$xa0	# xor with input
-	vpxor		0x20($inp),$xb0,$xb0
-	vpxor		0x40($inp),$xc0,$xc0
-	vpxor		0x60($inp),$xd0,$xd0
-	vpxor		0x80($inp),$xa1,$xa1
-	vpxor		0xa0($inp),$xb1,$xb1
-	vmovdqu		$xa0,0x00($out)
-	vmovdqu		$xb0,0x20($out)
-	vmovdqu		$xc0,0x40($out)
-	vmovdqu		$xd0,0x60($out)
-	vmovdqu		$xa1,0x80($out)
-	vmovdqu		$xb1,0xa0($out)
-	je		.Ldone8x
-
-	lea		0xc0($inp),$inp		# inp+=64*3
-	xor		%r10,%r10
-	vmovdqa		$xc1,0x00(%rsp)
-	lea		0xc0($out),$out		# out+=64*3
-	sub		\$192,$len		# len-=64*3
-	vmovdqa		$xd1,0x20(%rsp)
-	jmp		.Loop_tail8x
-
-.align	32
-.L256_or_more8x:
-	vpxor		0x00($inp),$xa0,$xa0	# xor with input
-	vpxor		0x20($inp),$xb0,$xb0
-	vpxor		0x40($inp),$xc0,$xc0
-	vpxor		0x60($inp),$xd0,$xd0
-	vpxor		0x80($inp),$xa1,$xa1
-	vpxor		0xa0($inp),$xb1,$xb1
-	vpxor		0xc0($inp),$xc1,$xc1
-	vpxor		0xe0($inp),$xd1,$xd1
-	vmovdqu		$xa0,0x00($out)
-	vmovdqu		$xb0,0x20($out)
-	vmovdqu		$xc0,0x40($out)
-	vmovdqu		$xd0,0x60($out)
-	vmovdqu		$xa1,0x80($out)
-	vmovdqu		$xb1,0xa0($out)
-	vmovdqu		$xc1,0xc0($out)
-	vmovdqu		$xd1,0xe0($out)
-	je		.Ldone8x
-
-	lea		0x100($inp),$inp	# inp+=64*4
-	xor		%r10,%r10
-	vmovdqa		$xa2,0x00(%rsp)
-	lea		0x100($out),$out	# out+=64*4
-	sub		\$256,$len		# len-=64*4
-	vmovdqa		$xb2,0x20(%rsp)
-	jmp		.Loop_tail8x
-
-.align	32
-.L320_or_more8x:
-	vpxor		0x00($inp),$xa0,$xa0	# xor with input
-	vpxor		0x20($inp),$xb0,$xb0
-	vpxor		0x40($inp),$xc0,$xc0
-	vpxor		0x60($inp),$xd0,$xd0
-	vpxor		0x80($inp),$xa1,$xa1
-	vpxor		0xa0($inp),$xb1,$xb1
-	vpxor		0xc0($inp),$xc1,$xc1
-	vpxor		0xe0($inp),$xd1,$xd1
-	vpxor		0x100($inp),$xa2,$xa2
-	vpxor		0x120($inp),$xb2,$xb2
-	vmovdqu		$xa0,0x00($out)
-	vmovdqu		$xb0,0x20($out)
-	vmovdqu		$xc0,0x40($out)
-	vmovdqu		$xd0,0x60($out)
-	vmovdqu		$xa1,0x80($out)
-	vmovdqu		$xb1,0xa0($out)
-	vmovdqu		$xc1,0xc0($out)
-	vmovdqu		$xd1,0xe0($out)
-	vmovdqu		$xa2,0x100($out)
-	vmovdqu		$xb2,0x120($out)
-	je		.Ldone8x
-
-	lea		0x140($inp),$inp	# inp+=64*5
-	xor		%r10,%r10
-	vmovdqa		$xc2,0x00(%rsp)
-	lea		0x140($out),$out	# out+=64*5
-	sub		\$320,$len		# len-=64*5
-	vmovdqa		$xd2,0x20(%rsp)
-	jmp		.Loop_tail8x
-
-.align	32
-.L384_or_more8x:
-	vpxor		0x00($inp),$xa0,$xa0	# xor with input
-	vpxor		0x20($inp),$xb0,$xb0
-	vpxor		0x40($inp),$xc0,$xc0
-	vpxor		0x60($inp),$xd0,$xd0
-	vpxor		0x80($inp),$xa1,$xa1
-	vpxor		0xa0($inp),$xb1,$xb1
-	vpxor		0xc0($inp),$xc1,$xc1
-	vpxor		0xe0($inp),$xd1,$xd1
-	vpxor		0x100($inp),$xa2,$xa2
-	vpxor		0x120($inp),$xb2,$xb2
-	vpxor		0x140($inp),$xc2,$xc2
-	vpxor		0x160($inp),$xd2,$xd2
-	vmovdqu		$xa0,0x00($out)
-	vmovdqu		$xb0,0x20($out)
-	vmovdqu		$xc0,0x40($out)
-	vmovdqu		$xd0,0x60($out)
-	vmovdqu		$xa1,0x80($out)
-	vmovdqu		$xb1,0xa0($out)
-	vmovdqu		$xc1,0xc0($out)
-	vmovdqu		$xd1,0xe0($out)
-	vmovdqu		$xa2,0x100($out)
-	vmovdqu		$xb2,0x120($out)
-	vmovdqu		$xc2,0x140($out)
-	vmovdqu		$xd2,0x160($out)
-	je		.Ldone8x
-
-	lea		0x180($inp),$inp	# inp+=64*6
-	xor		%r10,%r10
-	vmovdqa		$xa3,0x00(%rsp)
-	lea		0x180($out),$out	# out+=64*6
-	sub		\$384,$len		# len-=64*6
-	vmovdqa		$xb3,0x20(%rsp)
-	jmp		.Loop_tail8x
-
-.align	32
-.L448_or_more8x:
-	vpxor		0x00($inp),$xa0,$xa0	# xor with input
-	vpxor		0x20($inp),$xb0,$xb0
-	vpxor		0x40($inp),$xc0,$xc0
-	vpxor		0x60($inp),$xd0,$xd0
-	vpxor		0x80($inp),$xa1,$xa1
-	vpxor		0xa0($inp),$xb1,$xb1
-	vpxor		0xc0($inp),$xc1,$xc1
-	vpxor		0xe0($inp),$xd1,$xd1
-	vpxor		0x100($inp),$xa2,$xa2
-	vpxor		0x120($inp),$xb2,$xb2
-	vpxor		0x140($inp),$xc2,$xc2
-	vpxor		0x160($inp),$xd2,$xd2
-	vpxor		0x180($inp),$xa3,$xa3
-	vpxor		0x1a0($inp),$xb3,$xb3
-	vmovdqu		$xa0,0x00($out)
-	vmovdqu		$xb0,0x20($out)
-	vmovdqu		$xc0,0x40($out)
-	vmovdqu		$xd0,0x60($out)
-	vmovdqu		$xa1,0x80($out)
-	vmovdqu		$xb1,0xa0($out)
-	vmovdqu		$xc1,0xc0($out)
-	vmovdqu		$xd1,0xe0($out)
-	vmovdqu		$xa2,0x100($out)
-	vmovdqu		$xb2,0x120($out)
-	vmovdqu		$xc2,0x140($out)
-	vmovdqu		$xd2,0x160($out)
-	vmovdqu		$xa3,0x180($out)
-	vmovdqu		$xb3,0x1a0($out)
-	je		.Ldone8x
-
-	lea		0x1c0($inp),$inp	# inp+=64*7
-	xor		%r10,%r10
-	vmovdqa		$xc3,0x00(%rsp)
-	lea		0x1c0($out),$out	# out+=64*7
-	sub		\$448,$len		# len-=64*7
-	vmovdqa		$xd3,0x20(%rsp)
-
-.Loop_tail8x:
-	movzb		($inp,%r10),%eax
-	movzb		(%rsp,%r10),%ecx
-	lea		1(%r10),%r10
-	xor		%ecx,%eax
-	mov		%al,-1($out,%r10)
-	dec		$len
-	jnz		.Loop_tail8x
-
-.Ldone8x:
-	vzeroall
-___
-$code.=<<___	if ($win64);
-	movaps		-0xa8(%r9),%xmm6
-	movaps		-0x98(%r9),%xmm7
-	movaps		-0x88(%r9),%xmm8
-	movaps		-0x78(%r9),%xmm9
-	movaps		-0x68(%r9),%xmm10
-	movaps		-0x58(%r9),%xmm11
-	movaps		-0x48(%r9),%xmm12
-	movaps		-0x38(%r9),%xmm13
-	movaps		-0x28(%r9),%xmm14
-	movaps		-0x18(%r9),%xmm15
-___
-$code.=<<___;
-	lea		(%r9),%rsp
-.cfi_def_cfa_register	rsp
-.L8x_epilogue:
-	ret
-.cfi_endproc
-.size	ChaCha20_ctr32_avx2,.-ChaCha20_ctr32_avx2
-___
-}
-
-########################################################################
-# AVX512 code paths
-if ($avx>2) {
-# This one handles shorter inputs...
-
-my ($a,$b,$c,$d, $a_,$b_,$c_,$d_,$fourz) = map("%zmm$_",(0..3,16..20));
-my ($t0,$t1,$t2,$t3) = map("%xmm$_",(4..7));
-
-sub AVX512ROUND {	# critical path is 14 "SIMD ticks" per round
-	&vpaddd	($a,$a,$b);
-	&vpxord	($d,$d,$a);
-	&vprold	($d,$d,16);
-
-	&vpaddd	($c,$c,$d);
-	&vpxord	($b,$b,$c);
-	&vprold	($b,$b,12);
-
-	&vpaddd	($a,$a,$b);
-	&vpxord	($d,$d,$a);
-	&vprold	($d,$d,8);
-
-	&vpaddd	($c,$c,$d);
-	&vpxord	($b,$b,$c);
-	&vprold	($b,$b,7);
-}
-
-my $xframe = $win64 ? 32+8 : 8;
-
-$code.=<<___;
-.type	ChaCha20_avx512,\@function,5
-.align	32
-ChaCha20_avx512:
-.LChaCha20_avx512:
-.cfi_startproc
-	mov	%rsp,%r9		# frame pointer
-.cfi_def_cfa_register	r9
-	cmp	\$512,$len
-	ja	.LChaCha20_16x
-
-	sub	\$64+$xframe,%rsp
-___
-$code.=<<___	if ($win64);
-	movaps	%xmm6,-0x28(%r9)
-	movaps	%xmm7,-0x18(%r9)
-.Lavx512_body:
-___
-$code.=<<___;
-	vbroadcasti32x4	.Lsigma(%rip),$a
-	vbroadcasti32x4	($key),$b
-	vbroadcasti32x4	16($key),$c
-	vbroadcasti32x4	($counter),$d
-
-	vmovdqa32	$a,$a_
-	vmovdqa32	$b,$b_
-	vmovdqa32	$c,$c_
-	vpaddd		.Lzeroz(%rip),$d,$d
-	vmovdqa32	.Lfourz(%rip),$fourz
-	mov		\$10,$counter	# reuse $counter
-	vmovdqa32	$d,$d_
-	jmp		.Loop_avx512
-
-.align	16
-.Loop_outer_avx512:
-	vmovdqa32	$a_,$a
-	vmovdqa32	$b_,$b
-	vmovdqa32	$c_,$c
-	vpaddd		$fourz,$d_,$d
-	mov		\$10,$counter
-	vmovdqa32	$d,$d_
-	jmp		.Loop_avx512
-
-.align	32
-.Loop_avx512:
-___
-	&AVX512ROUND();
-	&vpshufd	($c,$c,0b01001110);
-	&vpshufd	($b,$b,0b00111001);
-	&vpshufd	($d,$d,0b10010011);
-
-	&AVX512ROUND();
-	&vpshufd	($c,$c,0b01001110);
-	&vpshufd	($b,$b,0b10010011);
-	&vpshufd	($d,$d,0b00111001);
-
-	&dec		($counter);
-	&jnz		(".Loop_avx512");
-
-$code.=<<___;
-	vpaddd		$a_,$a,$a
-	vpaddd		$b_,$b,$b
-	vpaddd		$c_,$c,$c
-	vpaddd		$d_,$d,$d
-
-	sub		\$64,$len
-	jb		.Ltail64_avx512
-
-	vpxor		0x00($inp),%x#$a,$t0	# xor with input
-	vpxor		0x10($inp),%x#$b,$t1
-	vpxor		0x20($inp),%x#$c,$t2
-	vpxor		0x30($inp),%x#$d,$t3
-	lea		0x40($inp),$inp		# inp+=64
-
-	vmovdqu		$t0,0x00($out)		# write output
-	vmovdqu		$t1,0x10($out)
-	vmovdqu		$t2,0x20($out)
-	vmovdqu		$t3,0x30($out)
-	lea		0x40($out),$out		# out+=64
-
-	jz		.Ldone_avx512
-
-	vextracti32x4	\$1,$a,$t0
-	vextracti32x4	\$1,$b,$t1
-	vextracti32x4	\$1,$c,$t2
-	vextracti32x4	\$1,$d,$t3
-
-	sub		\$64,$len
-	jb		.Ltail_avx512
-
-	vpxor		0x00($inp),$t0,$t0	# xor with input
-	vpxor		0x10($inp),$t1,$t1
-	vpxor		0x20($inp),$t2,$t2
-	vpxor		0x30($inp),$t3,$t3
-	lea		0x40($inp),$inp		# inp+=64
-
-	vmovdqu		$t0,0x00($out)		# write output
-	vmovdqu		$t1,0x10($out)
-	vmovdqu		$t2,0x20($out)
-	vmovdqu		$t3,0x30($out)
-	lea		0x40($out),$out		# out+=64
-
-	jz		.Ldone_avx512
-
-	vextracti32x4	\$2,$a,$t0
-	vextracti32x4	\$2,$b,$t1
-	vextracti32x4	\$2,$c,$t2
-	vextracti32x4	\$2,$d,$t3
-
-	sub		\$64,$len
-	jb		.Ltail_avx512
-
-	vpxor		0x00($inp),$t0,$t0	# xor with input
-	vpxor		0x10($inp),$t1,$t1
-	vpxor		0x20($inp),$t2,$t2
-	vpxor		0x30($inp),$t3,$t3
-	lea		0x40($inp),$inp		# inp+=64
-
-	vmovdqu		$t0,0x00($out)		# write output
-	vmovdqu		$t1,0x10($out)
-	vmovdqu		$t2,0x20($out)
-	vmovdqu		$t3,0x30($out)
-	lea		0x40($out),$out		# out+=64
-
-	jz		.Ldone_avx512
-
-	vextracti32x4	\$3,$a,$t0
-	vextracti32x4	\$3,$b,$t1
-	vextracti32x4	\$3,$c,$t2
-	vextracti32x4	\$3,$d,$t3
-
-	sub		\$64,$len
-	jb		.Ltail_avx512
-
-	vpxor		0x00($inp),$t0,$t0	# xor with input
-	vpxor		0x10($inp),$t1,$t1
-	vpxor		0x20($inp),$t2,$t2
-	vpxor		0x30($inp),$t3,$t3
-	lea		0x40($inp),$inp		# inp+=64
-
-	vmovdqu		$t0,0x00($out)		# write output
-	vmovdqu		$t1,0x10($out)
-	vmovdqu		$t2,0x20($out)
-	vmovdqu		$t3,0x30($out)
-	lea		0x40($out),$out		# out+=64
-
-	jnz		.Loop_outer_avx512
-
-	jmp		.Ldone_avx512
-
-.align	16
-.Ltail64_avx512:
-	vmovdqa		%x#$a,0x00(%rsp)
-	vmovdqa		%x#$b,0x10(%rsp)
-	vmovdqa		%x#$c,0x20(%rsp)
-	vmovdqa		%x#$d,0x30(%rsp)
-	add		\$64,$len
-	jmp		.Loop_tail_avx512
-
-.align	16
-.Ltail_avx512:
-	vmovdqa		$t0,0x00(%rsp)
-	vmovdqa		$t1,0x10(%rsp)
-	vmovdqa		$t2,0x20(%rsp)
-	vmovdqa		$t3,0x30(%rsp)
-	add		\$64,$len
-
-.Loop_tail_avx512:
-	movzb		($inp,$counter),%eax
-	movzb		(%rsp,$counter),%ecx
-	lea		1($counter),$counter
-	xor		%ecx,%eax
-	mov		%al,-1($out,$counter)
-	dec		$len
-	jnz		.Loop_tail_avx512
-
-	vmovdqa32	$a_,0x00(%rsp)
-
-.Ldone_avx512:
-	vzeroall
-___
-$code.=<<___	if ($win64);
-	movaps	-0x28(%r9),%xmm6
-	movaps	-0x18(%r9),%xmm7
-___
-$code.=<<___;
-	lea	(%r9),%rsp
-.cfi_def_cfa_register	rsp
-.Lavx512_epilogue:
-	ret
-.cfi_endproc
-.size	ChaCha20_avx512,.-ChaCha20_avx512
-___
-}
-if ($avx>2) {
-# This one handles longer inputs...
-
-my ($xa0,$xa1,$xa2,$xa3, $xb0,$xb1,$xb2,$xb3,
-    $xc0,$xc1,$xc2,$xc3, $xd0,$xd1,$xd2,$xd3)=map("%zmm$_",(0..15));
-my  @xx=($xa0,$xa1,$xa2,$xa3, $xb0,$xb1,$xb2,$xb3,
-	 $xc0,$xc1,$xc2,$xc3, $xd0,$xd1,$xd2,$xd3);
-my @key=map("%zmm$_",(16..31));
-my ($xt0,$xt1,$xt2,$xt3)=@key[0..3];
-
-sub AVX512_lane_ROUND {
-my ($a0,$b0,$c0,$d0)=@_;
-my ($a1,$b1,$c1,$d1)=map(($_&~3)+(($_+1)&3),($a0,$b0,$c0,$d0));
-my ($a2,$b2,$c2,$d2)=map(($_&~3)+(($_+1)&3),($a1,$b1,$c1,$d1));
-my ($a3,$b3,$c3,$d3)=map(($_&~3)+(($_+1)&3),($a2,$b2,$c2,$d2));
-my @x=map("\"$_\"",@xx);
-
-	(
-	"&vpaddd	(@x[$a0],@x[$a0],@x[$b0])",	# Q1
-	 "&vpaddd	(@x[$a1],@x[$a1],@x[$b1])",	# Q2
-	  "&vpaddd	(@x[$a2],@x[$a2],@x[$b2])",	# Q3
-	   "&vpaddd	(@x[$a3],@x[$a3],@x[$b3])",	# Q4
-	"&vpxord	(@x[$d0],@x[$d0],@x[$a0])",
-	 "&vpxord	(@x[$d1],@x[$d1],@x[$a1])",
-	  "&vpxord	(@x[$d2],@x[$d2],@x[$a2])",
-	   "&vpxord	(@x[$d3],@x[$d3],@x[$a3])",
-	"&vprold	(@x[$d0],@x[$d0],16)",
-	 "&vprold	(@x[$d1],@x[$d1],16)",
-	  "&vprold	(@x[$d2],@x[$d2],16)",
-	   "&vprold	(@x[$d3],@x[$d3],16)",
-
-	"&vpaddd	(@x[$c0],@x[$c0],@x[$d0])",
-	 "&vpaddd	(@x[$c1],@x[$c1],@x[$d1])",
-	  "&vpaddd	(@x[$c2],@x[$c2],@x[$d2])",
-	   "&vpaddd	(@x[$c3],@x[$c3],@x[$d3])",
-	"&vpxord	(@x[$b0],@x[$b0],@x[$c0])",
-	 "&vpxord	(@x[$b1],@x[$b1],@x[$c1])",
-	  "&vpxord	(@x[$b2],@x[$b2],@x[$c2])",
-	   "&vpxord	(@x[$b3],@x[$b3],@x[$c3])",
-	"&vprold	(@x[$b0],@x[$b0],12)",
-	 "&vprold	(@x[$b1],@x[$b1],12)",
-	  "&vprold	(@x[$b2],@x[$b2],12)",
-	   "&vprold	(@x[$b3],@x[$b3],12)",
-
-	"&vpaddd	(@x[$a0],@x[$a0],@x[$b0])",
-	 "&vpaddd	(@x[$a1],@x[$a1],@x[$b1])",
-	  "&vpaddd	(@x[$a2],@x[$a2],@x[$b2])",
-	   "&vpaddd	(@x[$a3],@x[$a3],@x[$b3])",
-	"&vpxord	(@x[$d0],@x[$d0],@x[$a0])",
-	 "&vpxord	(@x[$d1],@x[$d1],@x[$a1])",
-	  "&vpxord	(@x[$d2],@x[$d2],@x[$a2])",
-	   "&vpxord	(@x[$d3],@x[$d3],@x[$a3])",
-	"&vprold	(@x[$d0],@x[$d0],8)",
-	 "&vprold	(@x[$d1],@x[$d1],8)",
-	  "&vprold	(@x[$d2],@x[$d2],8)",
-	   "&vprold	(@x[$d3],@x[$d3],8)",
-
-	"&vpaddd	(@x[$c0],@x[$c0],@x[$d0])",
-	 "&vpaddd	(@x[$c1],@x[$c1],@x[$d1])",
-	  "&vpaddd	(@x[$c2],@x[$c2],@x[$d2])",
-	   "&vpaddd	(@x[$c3],@x[$c3],@x[$d3])",
-	"&vpxord	(@x[$b0],@x[$b0],@x[$c0])",
-	 "&vpxord	(@x[$b1],@x[$b1],@x[$c1])",
-	  "&vpxord	(@x[$b2],@x[$b2],@x[$c2])",
-	   "&vpxord	(@x[$b3],@x[$b3],@x[$c3])",
-	"&vprold	(@x[$b0],@x[$b0],7)",
-	 "&vprold	(@x[$b1],@x[$b1],7)",
-	  "&vprold	(@x[$b2],@x[$b2],7)",
-	   "&vprold	(@x[$b3],@x[$b3],7)"
-	);
-}
-
-my $xframe = $win64 ? 0xa8 : 8;
-
-$code.=<<___;
-.type	ChaCha20_16x,\@function,5
-.align	32
-ChaCha20_16x:
-.LChaCha20_16x:
-.cfi_startproc
-	mov		%rsp,%r9		# frame register
-.cfi_def_cfa_register	r9
-	sub		\$64+$xframe,%rsp
-	and		\$-64,%rsp
-___
-$code.=<<___	if ($win64);
-	movaps		%xmm6,-0xa8(%r9)
-	movaps		%xmm7,-0x98(%r9)
-	movaps		%xmm8,-0x88(%r9)
-	movaps		%xmm9,-0x78(%r9)
-	movaps		%xmm10,-0x68(%r9)
-	movaps		%xmm11,-0x58(%r9)
-	movaps		%xmm12,-0x48(%r9)
-	movaps		%xmm13,-0x38(%r9)
-	movaps		%xmm14,-0x28(%r9)
-	movaps		%xmm15,-0x18(%r9)
-.L16x_body:
-___
-$code.=<<___;
-	vzeroupper
-
-	lea		.Lsigma(%rip),%r10
-	vbroadcasti32x4	(%r10),$xa3		# key[0]
-	vbroadcasti32x4	($key),$xb3		# key[1]
-	vbroadcasti32x4	16($key),$xc3		# key[2]
-	vbroadcasti32x4	($counter),$xd3		# key[3]
-
-	vpshufd		\$0x00,$xa3,$xa0	# smash key by lanes...
-	vpshufd		\$0x55,$xa3,$xa1
-	vpshufd		\$0xaa,$xa3,$xa2
-	vpshufd		\$0xff,$xa3,$xa3
-	vmovdqa64	$xa0,@key[0]
-	vmovdqa64	$xa1,@key[1]
-	vmovdqa64	$xa2,@key[2]
-	vmovdqa64	$xa3,@key[3]
-
-	vpshufd		\$0x00,$xb3,$xb0
-	vpshufd		\$0x55,$xb3,$xb1
-	vpshufd		\$0xaa,$xb3,$xb2
-	vpshufd		\$0xff,$xb3,$xb3
-	vmovdqa64	$xb0,@key[4]
-	vmovdqa64	$xb1,@key[5]
-	vmovdqa64	$xb2,@key[6]
-	vmovdqa64	$xb3,@key[7]
-
-	vpshufd		\$0x00,$xc3,$xc0
-	vpshufd		\$0x55,$xc3,$xc1
-	vpshufd		\$0xaa,$xc3,$xc2
-	vpshufd		\$0xff,$xc3,$xc3
-	vmovdqa64	$xc0,@key[8]
-	vmovdqa64	$xc1,@key[9]
-	vmovdqa64	$xc2,@key[10]
-	vmovdqa64	$xc3,@key[11]
-
-	vpshufd		\$0x00,$xd3,$xd0
-	vpshufd		\$0x55,$xd3,$xd1
-	vpshufd		\$0xaa,$xd3,$xd2
-	vpshufd		\$0xff,$xd3,$xd3
-	vpaddd		.Lincz(%rip),$xd0,$xd0	# don't save counters yet
-	vmovdqa64	$xd0,@key[12]
-	vmovdqa64	$xd1,@key[13]
-	vmovdqa64	$xd2,@key[14]
-	vmovdqa64	$xd3,@key[15]
-
-	mov		\$10,%eax
-	jmp		.Loop16x
-
-.align	32
-.Loop_outer16x:
-	vpbroadcastd	0(%r10),$xa0		# reload key
-	vpbroadcastd	4(%r10),$xa1
-	vpbroadcastd	8(%r10),$xa2
-	vpbroadcastd	12(%r10),$xa3
-	vpaddd		.Lsixteen(%rip),@key[12],@key[12]	# next SIMD counters
-	vmovdqa64	@key[4],$xb0
-	vmovdqa64	@key[5],$xb1
-	vmovdqa64	@key[6],$xb2
-	vmovdqa64	@key[7],$xb3
-	vmovdqa64	@key[8],$xc0
-	vmovdqa64	@key[9],$xc1
-	vmovdqa64	@key[10],$xc2
-	vmovdqa64	@key[11],$xc3
-	vmovdqa64	@key[12],$xd0
-	vmovdqa64	@key[13],$xd1
-	vmovdqa64	@key[14],$xd2
-	vmovdqa64	@key[15],$xd3
-
-	vmovdqa64	$xa0,@key[0]
-	vmovdqa64	$xa1,@key[1]
-	vmovdqa64	$xa2,@key[2]
-	vmovdqa64	$xa3,@key[3]
-
-	mov		\$10,%eax
-	jmp		.Loop16x
-
-.align	32
-.Loop16x:
-___
-	foreach (&AVX512_lane_ROUND(0, 4, 8,12)) { eval; }
-	foreach (&AVX512_lane_ROUND(0, 5,10,15)) { eval; }
-$code.=<<___;
-	dec		%eax
-	jnz		.Loop16x
-
-	vpaddd		@key[0],$xa0,$xa0	# accumulate key
-	vpaddd		@key[1],$xa1,$xa1
-	vpaddd		@key[2],$xa2,$xa2
-	vpaddd		@key[3],$xa3,$xa3
-
-	vpunpckldq	$xa1,$xa0,$xt2		# "de-interlace" data
-	vpunpckldq	$xa3,$xa2,$xt3
-	vpunpckhdq	$xa1,$xa0,$xa0
-	vpunpckhdq	$xa3,$xa2,$xa2
-	vpunpcklqdq	$xt3,$xt2,$xa1		# "a0"
-	vpunpckhqdq	$xt3,$xt2,$xt2		# "a1"
-	vpunpcklqdq	$xa2,$xa0,$xa3		# "a2"
-	vpunpckhqdq	$xa2,$xa0,$xa0		# "a3"
-___
-	($xa0,$xa1,$xa2,$xa3,$xt2)=($xa1,$xt2,$xa3,$xa0,$xa2);
-$code.=<<___;
-	vpaddd		@key[4],$xb0,$xb0
-	vpaddd		@key[5],$xb1,$xb1
-	vpaddd		@key[6],$xb2,$xb2
-	vpaddd		@key[7],$xb3,$xb3
-
-	vpunpckldq	$xb1,$xb0,$xt2
-	vpunpckldq	$xb3,$xb2,$xt3
-	vpunpckhdq	$xb1,$xb0,$xb0
-	vpunpckhdq	$xb3,$xb2,$xb2
-	vpunpcklqdq	$xt3,$xt2,$xb1		# "b0"
-	vpunpckhqdq	$xt3,$xt2,$xt2		# "b1"
-	vpunpcklqdq	$xb2,$xb0,$xb3		# "b2"
-	vpunpckhqdq	$xb2,$xb0,$xb0		# "b3"
-___
-	($xb0,$xb1,$xb2,$xb3,$xt2)=($xb1,$xt2,$xb3,$xb0,$xb2);
-$code.=<<___;
-	vshufi32x4	\$0x44,$xb0,$xa0,$xt3	# "de-interlace" further
-	vshufi32x4	\$0xee,$xb0,$xa0,$xb0
-	vshufi32x4	\$0x44,$xb1,$xa1,$xa0
-	vshufi32x4	\$0xee,$xb1,$xa1,$xb1
-	vshufi32x4	\$0x44,$xb2,$xa2,$xa1
-	vshufi32x4	\$0xee,$xb2,$xa2,$xb2
-	vshufi32x4	\$0x44,$xb3,$xa3,$xa2
-	vshufi32x4	\$0xee,$xb3,$xa3,$xb3
-___
-	($xa0,$xa1,$xa2,$xa3,$xt3)=($xt3,$xa0,$xa1,$xa2,$xa3);
-$code.=<<___;
-	vpaddd		@key[8],$xc0,$xc0
-	vpaddd		@key[9],$xc1,$xc1
-	vpaddd		@key[10],$xc2,$xc2
-	vpaddd		@key[11],$xc3,$xc3
-
-	vpunpckldq	$xc1,$xc0,$xt2
-	vpunpckldq	$xc3,$xc2,$xt3
-	vpunpckhdq	$xc1,$xc0,$xc0
-	vpunpckhdq	$xc3,$xc2,$xc2
-	vpunpcklqdq	$xt3,$xt2,$xc1		# "c0"
-	vpunpckhqdq	$xt3,$xt2,$xt2		# "c1"
-	vpunpcklqdq	$xc2,$xc0,$xc3		# "c2"
-	vpunpckhqdq	$xc2,$xc0,$xc0		# "c3"
-___
-	($xc0,$xc1,$xc2,$xc3,$xt2)=($xc1,$xt2,$xc3,$xc0,$xc2);
-$code.=<<___;
-	vpaddd		@key[12],$xd0,$xd0
-	vpaddd		@key[13],$xd1,$xd1
-	vpaddd		@key[14],$xd2,$xd2
-	vpaddd		@key[15],$xd3,$xd3
-
-	vpunpckldq	$xd1,$xd0,$xt2
-	vpunpckldq	$xd3,$xd2,$xt3
-	vpunpckhdq	$xd1,$xd0,$xd0
-	vpunpckhdq	$xd3,$xd2,$xd2
-	vpunpcklqdq	$xt3,$xt2,$xd1		# "d0"
-	vpunpckhqdq	$xt3,$xt2,$xt2		# "d1"
-	vpunpcklqdq	$xd2,$xd0,$xd3		# "d2"
-	vpunpckhqdq	$xd2,$xd0,$xd0		# "d3"
-___
-	($xd0,$xd1,$xd2,$xd3,$xt2)=($xd1,$xt2,$xd3,$xd0,$xd2);
-$code.=<<___;
-	vshufi32x4	\$0x44,$xd0,$xc0,$xt3	# "de-interlace" further
-	vshufi32x4	\$0xee,$xd0,$xc0,$xd0
-	vshufi32x4	\$0x44,$xd1,$xc1,$xc0
-	vshufi32x4	\$0xee,$xd1,$xc1,$xd1
-	vshufi32x4	\$0x44,$xd2,$xc2,$xc1
-	vshufi32x4	\$0xee,$xd2,$xc2,$xd2
-	vshufi32x4	\$0x44,$xd3,$xc3,$xc2
-	vshufi32x4	\$0xee,$xd3,$xc3,$xd3
-___
-	($xc0,$xc1,$xc2,$xc3,$xt3)=($xt3,$xc0,$xc1,$xc2,$xc3);
-$code.=<<___;
-	vshufi32x4	\$0x88,$xc0,$xa0,$xt0	# "de-interlace" further
-	vshufi32x4	\$0xdd,$xc0,$xa0,$xa0
-	 vshufi32x4	\$0x88,$xd0,$xb0,$xc0
-	 vshufi32x4	\$0xdd,$xd0,$xb0,$xd0
-	vshufi32x4	\$0x88,$xc1,$xa1,$xt1
-	vshufi32x4	\$0xdd,$xc1,$xa1,$xa1
-	 vshufi32x4	\$0x88,$xd1,$xb1,$xc1
-	 vshufi32x4	\$0xdd,$xd1,$xb1,$xd1
-	vshufi32x4	\$0x88,$xc2,$xa2,$xt2
-	vshufi32x4	\$0xdd,$xc2,$xa2,$xa2
-	 vshufi32x4	\$0x88,$xd2,$xb2,$xc2
-	 vshufi32x4	\$0xdd,$xd2,$xb2,$xd2
-	vshufi32x4	\$0x88,$xc3,$xa3,$xt3
-	vshufi32x4	\$0xdd,$xc3,$xa3,$xa3
-	 vshufi32x4	\$0x88,$xd3,$xb3,$xc3
-	 vshufi32x4	\$0xdd,$xd3,$xb3,$xd3
-___
-	($xa0,$xa1,$xa2,$xa3,$xb0,$xb1,$xb2,$xb3)=
-	($xt0,$xt1,$xt2,$xt3,$xa0,$xa1,$xa2,$xa3);
-
-	($xa0,$xb0,$xc0,$xd0, $xa1,$xb1,$xc1,$xd1,
-	 $xa2,$xb2,$xc2,$xd2, $xa3,$xb3,$xc3,$xd3) =
-	($xa0,$xa1,$xa2,$xa3, $xb0,$xb1,$xb2,$xb3,
-	 $xc0,$xc1,$xc2,$xc3, $xd0,$xd1,$xd2,$xd3);
-$code.=<<___;
-	cmp		\$64*16,$len
-	jb		.Ltail16x
-
-	vpxord		0x00($inp),$xa0,$xa0	# xor with input
-	vpxord		0x40($inp),$xb0,$xb0
-	vpxord		0x80($inp),$xc0,$xc0
-	vpxord		0xc0($inp),$xd0,$xd0
-	vmovdqu32	$xa0,0x00($out)
-	vmovdqu32	$xb0,0x40($out)
-	vmovdqu32	$xc0,0x80($out)
-	vmovdqu32	$xd0,0xc0($out)
-
-	vpxord		0x100($inp),$xa1,$xa1
-	vpxord		0x140($inp),$xb1,$xb1
-	vpxord		0x180($inp),$xc1,$xc1
-	vpxord		0x1c0($inp),$xd1,$xd1
-	vmovdqu32	$xa1,0x100($out)
-	vmovdqu32	$xb1,0x140($out)
-	vmovdqu32	$xc1,0x180($out)
-	vmovdqu32	$xd1,0x1c0($out)
-
-	vpxord		0x200($inp),$xa2,$xa2
-	vpxord		0x240($inp),$xb2,$xb2
-	vpxord		0x280($inp),$xc2,$xc2
-	vpxord		0x2c0($inp),$xd2,$xd2
-	vmovdqu32	$xa2,0x200($out)
-	vmovdqu32	$xb2,0x240($out)
-	vmovdqu32	$xc2,0x280($out)
-	vmovdqu32	$xd2,0x2c0($out)
-
-	vpxord		0x300($inp),$xa3,$xa3
-	vpxord		0x340($inp),$xb3,$xb3
-	vpxord		0x380($inp),$xc3,$xc3
-	vpxord		0x3c0($inp),$xd3,$xd3
-	lea		0x400($inp),$inp
-	vmovdqu32	$xa3,0x300($out)
-	vmovdqu32	$xb3,0x340($out)
-	vmovdqu32	$xc3,0x380($out)
-	vmovdqu32	$xd3,0x3c0($out)
-	lea		0x400($out),$out
-
-	sub		\$64*16,$len
-	jnz		.Loop_outer16x
-
-	jmp		.Ldone16x
-
-.align	32
-.Ltail16x:
-	xor		%r10,%r10
-	sub		$inp,$out
-	cmp		\$64*1,$len
-	jb		.Less_than_64_16x
-	vpxord		($inp),$xa0,$xa0	# xor with input
-	vmovdqu32	$xa0,($out,$inp)
-	je		.Ldone16x
-	vmovdqa32	$xb0,$xa0
-	lea		64($inp),$inp
-
-	cmp		\$64*2,$len
-	jb		.Less_than_64_16x
-	vpxord		($inp),$xb0,$xb0
-	vmovdqu32	$xb0,($out,$inp)
-	je		.Ldone16x
-	vmovdqa32	$xc0,$xa0
-	lea		64($inp),$inp
-
-	cmp		\$64*3,$len
-	jb		.Less_than_64_16x
-	vpxord		($inp),$xc0,$xc0
-	vmovdqu32	$xc0,($out,$inp)
-	je		.Ldone16x
-	vmovdqa32	$xd0,$xa0
-	lea		64($inp),$inp
-
-	cmp		\$64*4,$len
-	jb		.Less_than_64_16x
-	vpxord		($inp),$xd0,$xd0
-	vmovdqu32	$xd0,($out,$inp)
-	je		.Ldone16x
-	vmovdqa32	$xa1,$xa0
-	lea		64($inp),$inp
-
-	cmp		\$64*5,$len
-	jb		.Less_than_64_16x
-	vpxord		($inp),$xa1,$xa1
-	vmovdqu32	$xa1,($out,$inp)
-	je		.Ldone16x
-	vmovdqa32	$xb1,$xa0
-	lea		64($inp),$inp
-
-	cmp		\$64*6,$len
-	jb		.Less_than_64_16x
-	vpxord		($inp),$xb1,$xb1
-	vmovdqu32	$xb1,($out,$inp)
-	je		.Ldone16x
-	vmovdqa32	$xc1,$xa0
-	lea		64($inp),$inp
-
-	cmp		\$64*7,$len
-	jb		.Less_than_64_16x
-	vpxord		($inp),$xc1,$xc1
-	vmovdqu32	$xc1,($out,$inp)
-	je		.Ldone16x
-	vmovdqa32	$xd1,$xa0
-	lea		64($inp),$inp
-
-	cmp		\$64*8,$len
-	jb		.Less_than_64_16x
-	vpxord		($inp),$xd1,$xd1
-	vmovdqu32	$xd1,($out,$inp)
-	je		.Ldone16x
-	vmovdqa32	$xa2,$xa0
-	lea		64($inp),$inp
-
-	cmp		\$64*9,$len
-	jb		.Less_than_64_16x
-	vpxord		($inp),$xa2,$xa2
-	vmovdqu32	$xa2,($out,$inp)
-	je		.Ldone16x
-	vmovdqa32	$xb2,$xa0
-	lea		64($inp),$inp
-
-	cmp		\$64*10,$len
-	jb		.Less_than_64_16x
-	vpxord		($inp),$xb2,$xb2
-	vmovdqu32	$xb2,($out,$inp)
-	je		.Ldone16x
-	vmovdqa32	$xc2,$xa0
-	lea		64($inp),$inp
-
-	cmp		\$64*11,$len
-	jb		.Less_than_64_16x
-	vpxord		($inp),$xc2,$xc2
-	vmovdqu32	$xc2,($out,$inp)
-	je		.Ldone16x
-	vmovdqa32	$xd2,$xa0
-	lea		64($inp),$inp
-
-	cmp		\$64*12,$len
-	jb		.Less_than_64_16x
-	vpxord		($inp),$xd2,$xd2
-	vmovdqu32	$xd2,($out,$inp)
-	je		.Ldone16x
-	vmovdqa32	$xa3,$xa0
-	lea		64($inp),$inp
-
-	cmp		\$64*13,$len
-	jb		.Less_than_64_16x
-	vpxord		($inp),$xa3,$xa3
-	vmovdqu32	$xa3,($out,$inp)
-	je		.Ldone16x
-	vmovdqa32	$xb3,$xa0
-	lea		64($inp),$inp
-
-	cmp		\$64*14,$len
-	jb		.Less_than_64_16x
-	vpxord		($inp),$xb3,$xb3
-	vmovdqu32	$xb3,($out,$inp)
-	je		.Ldone16x
-	vmovdqa32	$xc3,$xa0
-	lea		64($inp),$inp
-
-	cmp		\$64*15,$len
-	jb		.Less_than_64_16x
-	vpxord		($inp),$xc3,$xc3
-	vmovdqu32	$xc3,($out,$inp)
-	je		.Ldone16x
-	vmovdqa32	$xd3,$xa0
-	lea		64($inp),$inp
-
-.Less_than_64_16x:
-	vmovdqa32	$xa0,0x00(%rsp)
-	lea		($out,$inp),$out
-	and		\$63,$len
-
-.Loop_tail16x:
-	movzb		($inp,%r10),%eax
-	movzb		(%rsp,%r10),%ecx
-	lea		1(%r10),%r10
-	xor		%ecx,%eax
-	mov		%al,-1($out,%r10)
-	dec		$len
-	jnz		.Loop_tail16x
-
-	vpxord		$xa0,$xa0,$xa0
-	vmovdqa32	$xa0,0(%rsp)
-
-.Ldone16x:
-	vzeroall
-___
-$code.=<<___	if ($win64);
-	movaps		-0xa8(%r9),%xmm6
-	movaps		-0x98(%r9),%xmm7
-	movaps		-0x88(%r9),%xmm8
-	movaps		-0x78(%r9),%xmm9
-	movaps		-0x68(%r9),%xmm10
-	movaps		-0x58(%r9),%xmm11
-	movaps		-0x48(%r9),%xmm12
-	movaps		-0x38(%r9),%xmm13
-	movaps		-0x28(%r9),%xmm14
-	movaps		-0x18(%r9),%xmm15
-___
-$code.=<<___;
-	lea		(%r9),%rsp
-.cfi_def_cfa_register	rsp
-.L16x_epilogue:
-	ret
-.cfi_endproc
-.size	ChaCha20_16x,.-ChaCha20_16x
-___
-}
-
-# EXCEPTION_DISPOSITION handler (EXCEPTION_RECORD *rec,ULONG64 frame,
-#		CONTEXT *context,DISPATCHER_CONTEXT *disp)
-if ($win64) {
-$rec="%rcx";
-$frame="%rdx";
-$context="%r8";
-$disp="%r9";
-
-$code.=<<___;
-.extern	__imp_RtlVirtualUnwind
-.type	se_handler,\@abi-omnipotent
-.align	16
-se_handler:
-	push	%rsi
-	push	%rdi
-	push	%rbx
-	push	%rbp
-	push	%r12
-	push	%r13
-	push	%r14
-	push	%r15
-	pushfq
-	sub	\$64,%rsp
-
-	mov	120($context),%rax	# pull context->Rax
-	mov	248($context),%rbx	# pull context->Rip
-
-	mov	8($disp),%rsi		# disp->ImageBase
-	mov	56($disp),%r11		# disp->HandlerData
-
-	lea	.Lctr32_body(%rip),%r10
-	cmp	%r10,%rbx		# context->Rip<.Lprologue
-	jb	.Lcommon_seh_tail
-
-	mov	152($context),%rax	# pull context->Rsp
-
-	lea	.Lno_data(%rip),%r10	# epilogue label
-	cmp	%r10,%rbx		# context->Rip>=.Lepilogue
-	jae	.Lcommon_seh_tail
-
-	lea	64+24+48(%rax),%rax
-
-	mov	-8(%rax),%rbx
-	mov	-16(%rax),%rbp
-	mov	-24(%rax),%r12
-	mov	-32(%rax),%r13
-	mov	-40(%rax),%r14
-	mov	-48(%rax),%r15
-	mov	%rbx,144($context)	# restore context->Rbx
-	mov	%rbp,160($context)	# restore context->Rbp
-	mov	%r12,216($context)	# restore context->R12
-	mov	%r13,224($context)	# restore context->R13
-	mov	%r14,232($context)	# restore context->R14
-	mov	%r15,240($context)	# restore context->R14
-
-.Lcommon_seh_tail:
-	mov	8(%rax),%rdi
-	mov	16(%rax),%rsi
-	mov	%rax,152($context)	# restore context->Rsp
-	mov	%rsi,168($context)	# restore context->Rsi
-	mov	%rdi,176($context)	# restore context->Rdi
-
-	mov	40($disp),%rdi		# disp->ContextRecord
-	mov	$context,%rsi		# context
-	mov	\$154,%ecx		# sizeof(CONTEXT)
-	.long	0xa548f3fc		# cld; rep movsq
-
-	mov	$disp,%rsi
-	xor	%rcx,%rcx		# arg1, UNW_FLAG_NHANDLER
-	mov	8(%rsi),%rdx		# arg2, disp->ImageBase
-	mov	0(%rsi),%r8		# arg3, disp->ControlPc
-	mov	16(%rsi),%r9		# arg4, disp->FunctionEntry
-	mov	40(%rsi),%r10		# disp->ContextRecord
-	lea	56(%rsi),%r11		# &disp->HandlerData
-	lea	24(%rsi),%r12		# &disp->EstablisherFrame
-	mov	%r10,32(%rsp)		# arg5
-	mov	%r11,40(%rsp)		# arg6
-	mov	%r12,48(%rsp)		# arg7
-	mov	%rcx,56(%rsp)		# arg8, (NULL)
-	call	*__imp_RtlVirtualUnwind(%rip)
-
-	mov	\$1,%eax		# ExceptionContinueSearch
-	add	\$64,%rsp
-	popfq
-	pop	%r15
-	pop	%r14
-	pop	%r13
-	pop	%r12
-	pop	%rbp
-	pop	%rbx
-	pop	%rdi
-	pop	%rsi
-	ret
-.size	se_handler,.-se_handler
-
-.type	ssse3_handler,\@abi-omnipotent
-.align	16
-ssse3_handler:
-	push	%rsi
-	push	%rdi
-	push	%rbx
-	push	%rbp
-	push	%r12
-	push	%r13
-	push	%r14
-	push	%r15
-	pushfq
-	sub	\$64,%rsp
-
-	mov	120($context),%rax	# pull context->Rax
-	mov	248($context),%rbx	# pull context->Rip
-
-	mov	8($disp),%rsi		# disp->ImageBase
-	mov	56($disp),%r11		# disp->HandlerData
-
-	mov	0(%r11),%r10d		# HandlerData[0]
-	lea	(%rsi,%r10),%r10	# prologue label
-	cmp	%r10,%rbx		# context->Rip<prologue label
-	jb	.Lcommon_seh_tail
-
-	mov	192($context),%rax	# pull context->R9
-
-	mov	4(%r11),%r10d		# HandlerData[1]
-	lea	(%rsi,%r10),%r10	# epilogue label
-	cmp	%r10,%rbx		# context->Rip>=epilogue label
-	jae	.Lcommon_seh_tail
-
-	lea	-0x28(%rax),%rsi
-	lea	512($context),%rdi	# &context.Xmm6
-	mov	\$4,%ecx
-	.long	0xa548f3fc		# cld; rep movsq
-
-	jmp	.Lcommon_seh_tail
-.size	ssse3_handler,.-ssse3_handler
-
-.type	full_handler,\@abi-omnipotent
-.align	16
-full_handler:
-	push	%rsi
-	push	%rdi
-	push	%rbx
-	push	%rbp
-	push	%r12
-	push	%r13
-	push	%r14
-	push	%r15
-	pushfq
-	sub	\$64,%rsp
-
-	mov	120($context),%rax	# pull context->Rax
-	mov	248($context),%rbx	# pull context->Rip
-
-	mov	8($disp),%rsi		# disp->ImageBase
-	mov	56($disp),%r11		# disp->HandlerData
-
-	mov	0(%r11),%r10d		# HandlerData[0]
-	lea	(%rsi,%r10),%r10	# prologue label
-	cmp	%r10,%rbx		# context->Rip<prologue label
-	jb	.Lcommon_seh_tail
-
-	mov	192($context),%rax	# pull context->R9
-
-	mov	4(%r11),%r10d		# HandlerData[1]
-	lea	(%rsi,%r10),%r10	# epilogue label
-	cmp	%r10,%rbx		# context->Rip>=epilogue label
-	jae	.Lcommon_seh_tail
-
-	lea	-0xa8(%rax),%rsi
-	lea	512($context),%rdi	# &context.Xmm6
-	mov	\$20,%ecx
-	.long	0xa548f3fc		# cld; rep movsq
-
-	jmp	.Lcommon_seh_tail
-.size	full_handler,.-full_handler
-
-.section	.pdata
-.align	4
-	.rva	.LSEH_begin_ChaCha20_ctr32_nohw
-	.rva	.LSEH_end_ChaCha20_ctr32_nohw
-	.rva	.LSEH_info_ChaCha20_ctr32_nohw
-
-	.rva	.LSEH_begin_ChaCha20_ctr32_ssse3
-	.rva	.LSEH_end_ChaCha20_ctr32_ssse3
-	.rva	.LSEH_info_ChaCha20_ctr32_ssse3
-
-	.rva	.LSEH_begin_ChaCha20_ctr32_ssse3_4x
-	.rva	.LSEH_end_ChaCha20_ctr32_ssse3_4x
-	.rva	.LSEH_info_ChaCha20_ctr32_ssse3_4x
-___
-$code.=<<___ if ($avx>1);
-	.rva	.LSEH_begin_ChaCha20_ctr32_avx2
-	.rva	.LSEH_end_ChaCha20_ctr32_avx2
-	.rva	.LSEH_info_ChaCha20_ctr32_avx2
-___
-$code.=<<___ if ($avx>2);
-	.rva	.LSEH_begin_ChaCha20_avx512
-	.rva	.LSEH_end_ChaCha20_avx512
-	.rva	.LSEH_info_ChaCha20_avx512
-
-	.rva	.LSEH_begin_ChaCha20_16x
-	.rva	.LSEH_end_ChaCha20_16x
-	.rva	.LSEH_info_ChaCha20_16x
-___
-$code.=<<___;
-.section	.xdata
-.align	8
-.LSEH_info_ChaCha20_ctr32_nohw:
-	.byte	9,0,0,0
-	.rva	se_handler
-
-.LSEH_info_ChaCha20_ctr32_ssse3:
-	.byte	9,0,0,0
-	.rva	ssse3_handler
-	.rva	.Lssse3_body,.Lssse3_epilogue
-
-.LSEH_info_ChaCha20_ctr32_ssse3_4x:
-	.byte	9,0,0,0
-	.rva	full_handler
-	.rva	.L4x_body,.L4x_epilogue
-___
-$code.=<<___ if ($avx>1);
-.LSEH_info_ChaCha20_ctr32_avx2:
-	.byte	9,0,0,0
-	.rva	full_handler
-	.rva	.L8x_body,.L8x_epilogue			# HandlerData[]
-___
-$code.=<<___ if ($avx>2);
-.LSEH_info_ChaCha20_avx512:
-	.byte	9,0,0,0
-	.rva	ssse3_handler
-	.rva	.Lavx512_body,.Lavx512_epilogue		# HandlerData[]
-
-.LSEH_info_ChaCha20_16x:
-	.byte	9,0,0,0
-	.rva	full_handler
-	.rva	.L16x_body,.L16x_epilogue		# HandlerData[]
-___
-}
-
-foreach (split("\n",$code)) {
-	s/\`([^\`]*)\`/eval $1/ge;
-
-	s/%x#%[yz]/%x/g;	# "down-shift"
-
-	print $_,"\n";
-}
-
-close STDOUT or die "error closing STDOUT: $!";
diff --git a/src/crypto/chacha/chacha.cc b/src/crypto/chacha/chacha.cc
deleted file mode 100644
index ee78a7d..0000000
--- a/src/crypto/chacha/chacha.cc
+++ /dev/null
@@ -1,224 +0,0 @@
-// Copyright 2014 The BoringSSL Authors
-//
-// 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
-//
-//     https://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.
-
-// Adapted from the public domain, estream code by D. Bernstein.
-
-#include <openssl/chacha.h>
-
-#include <assert.h>
-#include <string.h>
-
-#include "../internal.h"
-#include "internal.h"
-
-
-// sigma contains the ChaCha constants, which happen to be an ASCII string.
-static const uint8_t sigma[16] = { 'e', 'x', 'p', 'a', 'n', 'd', ' ', '3',
-                                   '2', '-', 'b', 'y', 't', 'e', ' ', 'k' };
-
-// QUARTERROUND updates a, b, c, d with a ChaCha "quarter" round.
-#define QUARTERROUND(a, b, c, d)           \
-  x[a] += x[b];                            \
-  x[d] = CRYPTO_rotl_u32(x[d] ^ x[a], 16); \
-  x[c] += x[d];                            \
-  x[b] = CRYPTO_rotl_u32(x[b] ^ x[c], 12); \
-  x[a] += x[b];                            \
-  x[d] = CRYPTO_rotl_u32(x[d] ^ x[a], 8);  \
-  x[c] += x[d];                            \
-  x[b] = CRYPTO_rotl_u32(x[b] ^ x[c], 7);
-
-void CRYPTO_hchacha20(uint8_t out[32], const uint8_t key[32],
-                      const uint8_t nonce[16]) {
-  uint32_t x[16];
-  OPENSSL_memcpy(x, sigma, sizeof(sigma));
-  OPENSSL_memcpy(&x[4], key, 32);
-  OPENSSL_memcpy(&x[12], nonce, 16);
-
-  for (size_t i = 0; i < 20; i += 2) {
-    QUARTERROUND(0, 4, 8, 12)
-    QUARTERROUND(1, 5, 9, 13)
-    QUARTERROUND(2, 6, 10, 14)
-    QUARTERROUND(3, 7, 11, 15)
-    QUARTERROUND(0, 5, 10, 15)
-    QUARTERROUND(1, 6, 11, 12)
-    QUARTERROUND(2, 7, 8, 13)
-    QUARTERROUND(3, 4, 9, 14)
-  }
-
-  OPENSSL_memcpy(out, &x[0], sizeof(uint32_t) * 4);
-  OPENSSL_memcpy(&out[16], &x[12], sizeof(uint32_t) * 4);
-}
-
-#if defined(CHACHA20_ASM_NOHW)
-static void ChaCha20_ctr32(uint8_t *out, const uint8_t *in, size_t in_len,
-                           const uint32_t key[8], const uint32_t counter[4]) {
-#if defined(CHACHA20_ASM_NEON)
-  if (ChaCha20_ctr32_neon_capable(in_len)) {
-    ChaCha20_ctr32_neon(out, in, in_len, key, counter);
-    return;
-  }
-#endif
-#if defined(CHACHA20_ASM_AVX2)
-  if (ChaCha20_ctr32_avx2_capable(in_len)) {
-    ChaCha20_ctr32_avx2(out, in, in_len, key, counter);
-    return;
-  }
-#endif
-#if defined(CHACHA20_ASM_SSSE3_4X)
-  if (ChaCha20_ctr32_ssse3_4x_capable(in_len)) {
-    ChaCha20_ctr32_ssse3_4x(out, in, in_len, key, counter);
-    return;
-  }
-#endif
-#if defined(CHACHA20_ASM_SSSE3)
-  if (ChaCha20_ctr32_ssse3_capable(in_len)) {
-    ChaCha20_ctr32_ssse3(out, in, in_len, key, counter);
-    return;
-  }
-#endif
-  if (in_len > 0) {
-    ChaCha20_ctr32_nohw(out, in, in_len, key, counter);
-  }
-}
-#endif
-
-#if defined(CHACHA20_ASM_NOHW)
-
-void CRYPTO_chacha_20(uint8_t *out, const uint8_t *in, size_t in_len,
-                      const uint8_t key[32], const uint8_t nonce[12],
-                      uint32_t counter) {
-  assert(!buffers_alias(out, in_len, in, in_len) || in == out);
-
-  uint32_t counter_nonce[4];
-  counter_nonce[0] = counter;
-  counter_nonce[1] = CRYPTO_load_u32_le(nonce + 0);
-  counter_nonce[2] = CRYPTO_load_u32_le(nonce + 4);
-  counter_nonce[3] = CRYPTO_load_u32_le(nonce + 8);
-
-  const uint32_t *key_ptr = (const uint32_t *)key;
-#if !defined(OPENSSL_X86) && !defined(OPENSSL_X86_64)
-  // The assembly expects the key to be four-byte aligned.
-  uint32_t key_u32[8];
-  if ((((uintptr_t)key) & 3) != 0) {
-    key_u32[0] = CRYPTO_load_u32_le(key + 0);
-    key_u32[1] = CRYPTO_load_u32_le(key + 4);
-    key_u32[2] = CRYPTO_load_u32_le(key + 8);
-    key_u32[3] = CRYPTO_load_u32_le(key + 12);
-    key_u32[4] = CRYPTO_load_u32_le(key + 16);
-    key_u32[5] = CRYPTO_load_u32_le(key + 20);
-    key_u32[6] = CRYPTO_load_u32_le(key + 24);
-    key_u32[7] = CRYPTO_load_u32_le(key + 28);
-
-    key_ptr = key_u32;
-  }
-#endif
-
-  while (in_len > 0) {
-    // The assembly functions do not have defined overflow behavior. While
-    // overflow is almost always a bug in the caller, we prefer our functions to
-    // behave the same across platforms, so divide into multiple calls to avoid
-    // this case.
-    uint64_t todo = 64 * ((UINT64_C(1) << 32) - counter_nonce[0]);
-    if (todo > in_len) {
-      todo = in_len;
-    }
-
-    ChaCha20_ctr32(out, in, (size_t)todo, key_ptr, counter_nonce);
-    in += todo;
-    out += todo;
-    in_len -= todo;
-
-    // We're either done and will next break out of the loop, or we stopped at
-    // the wraparound point and the counter should continue at zero.
-    counter_nonce[0] = 0;
-  }
-}
-
-#else
-
-// chacha_core performs 20 rounds of ChaCha on the input words in
-// |input| and writes the 64 output bytes to |output|.
-static void chacha_core(uint8_t output[64], const uint32_t input[16]) {
-  uint32_t x[16];
-  int i;
-
-  OPENSSL_memcpy(x, input, sizeof(uint32_t) * 16);
-  for (i = 20; i > 0; i -= 2) {
-    QUARTERROUND(0, 4, 8, 12)
-    QUARTERROUND(1, 5, 9, 13)
-    QUARTERROUND(2, 6, 10, 14)
-    QUARTERROUND(3, 7, 11, 15)
-    QUARTERROUND(0, 5, 10, 15)
-    QUARTERROUND(1, 6, 11, 12)
-    QUARTERROUND(2, 7, 8, 13)
-    QUARTERROUND(3, 4, 9, 14)
-  }
-
-  for (i = 0; i < 16; ++i) {
-    x[i] += input[i];
-  }
-  for (i = 0; i < 16; ++i) {
-    CRYPTO_store_u32_le(output + 4 * i, x[i]);
-  }
-}
-
-void CRYPTO_chacha_20(uint8_t *out, const uint8_t *in, size_t in_len,
-                      const uint8_t key[32], const uint8_t nonce[12],
-                      uint32_t counter) {
-  assert(!buffers_alias(out, in_len, in, in_len) || in == out);
-
-  uint32_t input[16];
-  uint8_t buf[64];
-  size_t todo, i;
-
-  input[0] = CRYPTO_load_u32_le(sigma + 0);
-  input[1] = CRYPTO_load_u32_le(sigma + 4);
-  input[2] = CRYPTO_load_u32_le(sigma + 8);
-  input[3] = CRYPTO_load_u32_le(sigma + 12);
-
-  input[4] = CRYPTO_load_u32_le(key + 0);
-  input[5] = CRYPTO_load_u32_le(key + 4);
-  input[6] = CRYPTO_load_u32_le(key + 8);
-  input[7] = CRYPTO_load_u32_le(key + 12);
-
-  input[8] = CRYPTO_load_u32_le(key + 16);
-  input[9] = CRYPTO_load_u32_le(key + 20);
-  input[10] = CRYPTO_load_u32_le(key + 24);
-  input[11] = CRYPTO_load_u32_le(key + 28);
-
-  input[12] = counter;
-  input[13] = CRYPTO_load_u32_le(nonce + 0);
-  input[14] = CRYPTO_load_u32_le(nonce + 4);
-  input[15] = CRYPTO_load_u32_le(nonce + 8);
-
-  while (in_len > 0) {
-    todo = sizeof(buf);
-    if (in_len < todo) {
-      todo = in_len;
-    }
-
-    chacha_core(buf, input);
-    for (i = 0; i < todo; i++) {
-      out[i] = in[i] ^ buf[i];
-    }
-
-    out += todo;
-    in += todo;
-    in_len -= todo;
-
-    input[12]++;
-  }
-}
-
-#endif
diff --git a/src/crypto/chacha/chacha_test.cc b/src/crypto/chacha/chacha_test.cc
deleted file mode 100644
index d00926d..0000000
--- a/src/crypto/chacha/chacha_test.cc
+++ /dev/null
@@ -1,401 +0,0 @@
-// Copyright 2016 The BoringSSL Authors
-//
-// 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
-//
-//     https://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 <stdio.h>
-#include <stdint.h>
-#include <string.h>
-
-#include <memory>
-
-#include <gtest/gtest.h>
-
-#include <openssl/crypto.h>
-#include <openssl/chacha.h>
-
-#include "internal.h"
-#include "../internal.h"
-#include "../test/abi_test.h"
-#include "../test/test_util.h"
-
-
-static const uint8_t kKey[32] = {
-    0x98, 0xbe, 0xf1, 0x46, 0x9b, 0xe7, 0x26, 0x98, 0x37, 0xa4, 0x5b,
-    0xfb, 0xc9, 0x2a, 0x5a, 0x6a, 0xc7, 0x62, 0x50, 0x7c, 0xf9, 0x64,
-    0x43, 0xbf, 0x33, 0xb9, 0x6b, 0x1b, 0xd4, 0xc6, 0xf8, 0xf6,
-};
-
-static const uint8_t kNonce[12] = {
-    0x44, 0xe7, 0x92, 0xd6, 0x33, 0x35, 0xab, 0xb1, 0x58, 0x2e, 0x92, 0x53,
-};
-
-static uint32_t kCounter = 42;
-
-static const uint8_t kInput[] = {
-    0x58, 0x28, 0xd5, 0x30, 0x36, 0x2c, 0x60, 0x55, 0x29, 0xf8, 0xe1, 0x8c,
-    0xae, 0x15, 0x15, 0x26, 0xf2, 0x3a, 0x73, 0xa0, 0xf3, 0x12, 0xa3, 0x88,
-    0x5f, 0x2b, 0x74, 0x23, 0x3d, 0xc9, 0x05, 0x23, 0xc6, 0x54, 0x49, 0x1e,
-    0x44, 0x88, 0x14, 0xd9, 0xda, 0x37, 0x15, 0xdc, 0xb7, 0xe4, 0x23, 0xb3,
-    0x9d, 0x7e, 0x16, 0x68, 0x35, 0xfc, 0x02, 0x6d, 0xcc, 0x8a, 0xe5, 0xdd,
-    0x5f, 0xe4, 0xd2, 0x56, 0x6f, 0x12, 0x9c, 0x9c, 0x7d, 0x6a, 0x38, 0x48,
-    0xbd, 0xdf, 0xd9, 0xac, 0x1b, 0xa2, 0x4d, 0xc5, 0x43, 0x04, 0x3c, 0xd7,
-    0x99, 0xe1, 0xa7, 0x13, 0x9c, 0x51, 0xc2, 0x6d, 0xf9, 0xcf, 0x07, 0x3b,
-    0xe4, 0xbf, 0x93, 0xa3, 0xa9, 0xb4, 0xc5, 0xf0, 0x1a, 0xe4, 0x8d, 0x5f,
-    0xc6, 0xc4, 0x7c, 0x69, 0x7a, 0xde, 0x1a, 0xc1, 0xc9, 0xcf, 0xc2, 0x4e,
-    0x7a, 0x25, 0x2c, 0x32, 0xe9, 0x17, 0xba, 0x68, 0xf1, 0x37, 0x5d, 0x62,
-    0x84, 0x46, 0xf5, 0x80, 0x7f, 0x1a, 0x71, 0xf7, 0xbe, 0x72, 0x4b, 0xb8,
-    0x1c, 0xfe, 0x3e, 0xbd, 0xae, 0x0d, 0x73, 0x0d, 0x87, 0x4a, 0x31, 0xc3,
-    0x3d, 0x46, 0x6f, 0xb3, 0xd7, 0x6b, 0xe3, 0xb8, 0x70, 0x17, 0x8e, 0x7a,
-    0x6a, 0x0e, 0xbf, 0xa8, 0xbc, 0x2b, 0xdb, 0xfa, 0x4f, 0xb6, 0x26, 0x20,
-    0xee, 0x63, 0xf0, 0x6d, 0x26, 0xac, 0x6a, 0x18, 0x37, 0x6e, 0x59, 0x81,
-    0xd1, 0x60, 0xe6, 0x40, 0xd5, 0x6d, 0x68, 0xba, 0x8b, 0x65, 0x4a, 0xf9,
-    0xf1, 0xae, 0x56, 0x24, 0x8f, 0xe3, 0x8e, 0xe7, 0x7e, 0x6f, 0xcf, 0x92,
-    0xdf, 0xa9, 0x75, 0x3a, 0xd6, 0x2e, 0x1c, 0xaf, 0xf2, 0xd6, 0x8b, 0x39,
-    0xad, 0xd2, 0x5d, 0xfb, 0xd7, 0xdf, 0x05, 0x57, 0x0d, 0xf7, 0xf6, 0x8f,
-    0x2d, 0x14, 0xb0, 0x4e, 0x1a, 0x3c, 0x77, 0x04, 0xcd, 0x3c, 0x5c, 0x58,
-    0x52, 0x10, 0x6f, 0xcf, 0x5c, 0x03, 0xc8, 0x5f, 0x85, 0x2b, 0x05, 0x82,
-    0x60, 0xda, 0xcc, 0xcd, 0xd6, 0x88, 0xbf, 0xc0, 0x10, 0xb3, 0x6f, 0x54,
-    0x54, 0x42, 0xbc, 0x4b, 0x77, 0x21, 0x4d, 0xee, 0x87, 0x45, 0x06, 0x4c,
-    0x60, 0x38, 0xd2, 0x7e, 0x1d, 0x30, 0x6c, 0x55, 0xf0, 0x38, 0x80, 0x1c,
-    0xde, 0x3d, 0xea, 0x68, 0x3e, 0xf6, 0x3e, 0x59, 0xcf, 0x0d, 0x08, 0xae,
-    0x8c, 0x02, 0x0b, 0xc1, 0x72, 0x6a, 0xb4, 0x6d, 0xf3, 0xf7, 0xb3, 0xef,
-    0x3a, 0xb1, 0x06, 0xf2, 0xf4, 0xd6, 0x69, 0x7b, 0x3e, 0xa2, 0x16, 0x31,
-    0x31, 0x79, 0xb6, 0x33, 0xa9, 0xca, 0x8a, 0xa8, 0xbe, 0xf3, 0xe9, 0x38,
-    0x28, 0xd1, 0xe1, 0x3b, 0x4e, 0x2e, 0x47, 0x35, 0xa4, 0x61, 0x14, 0x1e,
-    0x42, 0x2c, 0x49, 0x55, 0xea, 0xe3, 0xb3, 0xce, 0x39, 0xd3, 0xb3, 0xef,
-    0x4a, 0x4d, 0x78, 0x49, 0xbd, 0xf6, 0x7c, 0x0a, 0x2c, 0xd3, 0x26, 0xcb,
-    0xd9, 0x6a, 0xad, 0x63, 0x93, 0xa7, 0x29, 0x92, 0xdc, 0x1f, 0xaf, 0x61,
-    0x82, 0x80, 0x74, 0xb2, 0x9c, 0x4a, 0x86, 0x73, 0x50, 0xd8, 0xd1, 0xff,
-    0xee, 0x1a, 0xe2, 0xdd, 0xa2, 0x61, 0xbd, 0x10, 0xc3, 0x5f, 0x67, 0x9f,
-    0x29, 0xe4, 0xd3, 0x70, 0xe5, 0x67, 0x3a, 0xd2, 0x20, 0x00, 0xcc, 0x25,
-    0x15, 0x96, 0x54, 0x45, 0x85, 0xed, 0x82, 0x88, 0x3b, 0x9f, 0x3b, 0xc3,
-    0x04, 0xd4, 0x23, 0xb1, 0x0d, 0xdc, 0xc8, 0x26, 0x9d, 0x28, 0xb3, 0x25,
-    0x4d, 0x52, 0xe5, 0x33, 0xf3, 0xed, 0x2c, 0xb8, 0x1a, 0xcf, 0xc3, 0x52,
-    0xb4, 0x2f, 0xc7, 0x79, 0x96, 0x14, 0x7d, 0x72, 0x27, 0x72, 0x85, 0xea,
-    0x6d, 0x41, 0xa0, 0x22, 0x13, 0x6d, 0x06, 0x83, 0xa4, 0xdd, 0x0f, 0x69,
-    0xd2, 0x01, 0xcd, 0xc6, 0xb8, 0x64, 0x5c, 0x2c, 0x79, 0xd1, 0xc7, 0xd3,
-    0x31, 0xdb, 0x2c, 0xff, 0xda, 0xd0, 0x69, 0x31, 0xad, 0x83, 0x5f, 0xed,
-    0x6a, 0x97, 0xe4, 0x00, 0x43, 0xb0, 0x2e, 0x97, 0xae, 0x00, 0x5f, 0x5c,
-    0xb9, 0xe8, 0x39, 0x80, 0x10, 0xca, 0x0c, 0xfa, 0xf0, 0xb5, 0xcd, 0xaa,
-    0x27, 0x11, 0x60, 0xd9, 0x21, 0x86, 0x93, 0x91, 0x9f, 0x2d, 0x1a, 0x8e,
-    0xde, 0x0b, 0xb5, 0xcb, 0x05, 0x24, 0x30, 0x45, 0x4d, 0x11, 0x75, 0xfd,
-    0xe5, 0xa0, 0xa9, 0x4e, 0x3a, 0x8c, 0x3b, 0x52, 0x5a, 0x37, 0x18, 0x05,
-    0x4a, 0x7a, 0x09, 0x6a, 0xe6, 0xd5, 0xa9, 0xa6, 0x71, 0x47, 0x4c, 0x50,
-    0xe1, 0x3e, 0x8a, 0x21, 0x2b, 0x4f, 0x0e, 0xe3, 0xcb, 0x72, 0xc5, 0x28,
-    0x3e, 0x5a, 0x33, 0xec, 0x48, 0x92, 0x2e, 0xa1, 0x24, 0x57, 0x09, 0x0f,
-    0x01, 0x85, 0x3b, 0x34, 0x39, 0x7e, 0xc7, 0x90, 0x62, 0xe2, 0xdc, 0x5d,
-    0x0a, 0x2c, 0x51, 0x26, 0x95, 0x3a, 0x95, 0x92, 0xa5, 0x39, 0x8f, 0x0c,
-    0x83, 0x0b, 0x9d, 0x38, 0xab, 0x98, 0x2a, 0xc4, 0x01, 0xc4, 0x0d, 0x77,
-    0x13, 0xcb, 0xca, 0xf1, 0x28, 0x31, 0x52, 0x75, 0x27, 0x2c, 0xf0, 0x04,
-    0x86, 0xc8, 0xf3, 0x3d, 0xf2, 0x9d, 0x8f, 0x55, 0x52, 0x40, 0x3f, 0xaa,
-    0x22, 0x7f, 0xe7, 0x69, 0x3b, 0xee, 0x44, 0x09, 0xde, 0xff, 0xb0, 0x69,
-    0x3a, 0xae, 0x74, 0xe9, 0x9d, 0x33, 0xae, 0x8b, 0x6d, 0x60, 0x04, 0xff,
-    0x53, 0x3f, 0x88, 0xe9, 0x63, 0x9b, 0xb1, 0x6d, 0x2c, 0x22, 0x15, 0x5a,
-    0x15, 0xd9, 0xe5, 0xcb, 0x03, 0x78, 0x3c, 0xca, 0x59, 0x8c, 0xc8, 0xc2,
-    0x86, 0xff, 0xd2, 0x79, 0xd6, 0xc6, 0xec, 0x5b, 0xbb, 0xa0, 0xae, 0x01,
-    0x20, 0x09, 0x2e, 0x38, 0x5d, 0xda, 0x5d, 0xe0, 0x59, 0x4e, 0xe5, 0x8b,
-    0x84, 0x8f, 0xb6, 0xe0, 0x56, 0x9f, 0x21, 0xa1, 0xcf, 0xb2, 0x0f, 0x2c,
-    0x93, 0xf8, 0xcf, 0x37, 0xc1, 0x9f, 0x32, 0x98, 0x21, 0x65, 0x52, 0x66,
-    0x6e, 0xd3, 0x71, 0x98, 0x55, 0xb9, 0x46, 0x9f, 0x1a, 0x35, 0xc4, 0x47,
-    0x69, 0x62, 0x70, 0x4b, 0x77, 0x9e, 0xe4, 0x21, 0xe6, 0x32, 0x5a, 0x26,
-    0x05, 0xba, 0x57, 0x53, 0xd7, 0x9b, 0x55, 0x3c, 0xbb, 0x53, 0x79, 0x60,
-    0x9c, 0xc8, 0x4d, 0xf7, 0xf5, 0x1d, 0x54, 0x02, 0x91, 0x68, 0x0e, 0xaa,
-    0xca, 0x5a, 0x78, 0x0c, 0x28, 0x9a, 0xc3, 0xac, 0x49, 0xc0, 0xf4, 0x85,
-    0xee, 0x59, 0x76, 0x7e, 0x28, 0x4e, 0xf1, 0x5c, 0x63, 0xf7, 0xce, 0x0e,
-    0x2c, 0x21, 0xa0, 0x58, 0xe9, 0x01, 0xfd, 0xeb, 0xd1, 0xaf, 0xe6, 0xef,
-    0x93, 0xb3, 0x95, 0x51, 0x60, 0xa2, 0x74, 0x40, 0x15, 0xe5, 0xf4, 0x0a,
-    0xca, 0x6d, 0x9a, 0x37, 0x42, 0x4d, 0x5a, 0x58, 0x49, 0x0f, 0xe9, 0x02,
-    0xfc, 0x77, 0xd8, 0x59, 0xde, 0xdd, 0xad, 0x4b, 0x99, 0x2e, 0x64, 0x73,
-    0xad, 0x42, 0x2f, 0xf3, 0x2c, 0x0d, 0x49, 0xe4, 0x2e, 0x6c, 0xa4, 0x73,
-    0x75, 0x18, 0x14, 0x85, 0xbb, 0x64, 0xb4, 0xa1, 0xb0, 0x6e, 0x01, 0xc0,
-    0xcf, 0x17, 0x9c, 0xc5, 0x28, 0xc3, 0x2d, 0x6c, 0x17, 0x2a, 0x3d, 0x06,
-    0x5c, 0xf3, 0xb4, 0x49, 0x75, 0xad, 0x17, 0x69, 0xd4, 0xca, 0x65, 0xae,
-    0x44, 0x71, 0xa5, 0xf6, 0x0d, 0x0f, 0x8e, 0x37, 0xc7, 0x43, 0xce, 0x6b,
-    0x08, 0xe9, 0xd1, 0x34, 0x48, 0x8f, 0xc9, 0xfc, 0xf3, 0x5d, 0x2d, 0xec,
-    0x62, 0xd3, 0xf0, 0xb3, 0xfe, 0x2e, 0x40, 0x55, 0x76, 0x54, 0xc7, 0xb4,
-    0x61, 0x16, 0xcc, 0x7c, 0x1c, 0x19, 0x24, 0xe6, 0x4d, 0xd4, 0xc3, 0x77,
-    0x67, 0x1f, 0x3c, 0x74, 0x79, 0xa1, 0xf8, 0x85, 0x88, 0x1d, 0x6f, 0xa4,
-    0x7e, 0x2c, 0x21, 0x9f, 0x49, 0xf5, 0xaa, 0x4e, 0xf3, 0x4a, 0xfa, 0x9d,
-    0xbe, 0xf6, 0xce, 0xda, 0xb5, 0xab, 0x39, 0xbd, 0x16, 0x41, 0xa9, 0x4a,
-    0xac, 0x09, 0x01, 0xca,
-};
-static const uint8_t kOutput[] = {
-    0x54, 0x30, 0x6a, 0x13, 0xda, 0x59, 0x6b, 0x6d, 0x59, 0x49, 0xc8, 0xc5,
-    0xab, 0x26, 0xd4, 0x8a, 0xad, 0xc0, 0x3d, 0xaf, 0x14, 0xb9, 0x15, 0xb8,
-    0xca, 0xdf, 0x17, 0xa7, 0x03, 0xd3, 0xc5, 0x06, 0x01, 0xef, 0x21, 0xdd,
-    0xa3, 0x0b, 0x9e, 0x48, 0xb8, 0x5e, 0x0b, 0x87, 0x9f, 0x95, 0x23, 0x68,
-    0x85, 0x69, 0xd2, 0x5d, 0xaf, 0x57, 0xe9, 0x27, 0x11, 0x3d, 0x49, 0xfa,
-    0xf1, 0x08, 0xcc, 0x15, 0xec, 0x1d, 0x19, 0x16, 0x12, 0x9b, 0xc8, 0x66,
-    0x1f, 0xfa, 0x2c, 0x93, 0xf4, 0x99, 0x11, 0x27, 0x31, 0x0e, 0xd8, 0x46,
-    0x47, 0x40, 0x11, 0x70, 0x01, 0xca, 0xe8, 0x5b, 0xc5, 0x91, 0xc8, 0x3a,
-    0xdc, 0xaa, 0xf3, 0x4b, 0x80, 0xe5, 0xbc, 0x03, 0xd0, 0x89, 0x72, 0xbc,
-    0xce, 0x2a, 0x76, 0x0c, 0xf5, 0xda, 0x4c, 0x10, 0x06, 0x35, 0x41, 0xb1,
-    0xe6, 0xb4, 0xaa, 0x7a, 0xef, 0xf0, 0x62, 0x4a, 0xc5, 0x9f, 0x2c, 0xaf,
-    0xb8, 0x2f, 0xd9, 0xd1, 0x01, 0x7a, 0x36, 0x2f, 0x3e, 0x83, 0xa5, 0xeb,
-    0x81, 0x70, 0xa0, 0x57, 0x17, 0x46, 0xea, 0x9e, 0xcb, 0x0e, 0x74, 0xd3,
-    0x44, 0x57, 0x1d, 0x40, 0x06, 0xf8, 0xb7, 0xcb, 0x5f, 0xf4, 0x79, 0xbd,
-    0x11, 0x19, 0xd6, 0xee, 0xf8, 0xb0, 0xaa, 0xdd, 0x00, 0x62, 0xad, 0x3b,
-    0x88, 0x9a, 0x88, 0x5b, 0x1b, 0x07, 0xc9, 0xae, 0x9e, 0xa6, 0x94, 0xe5,
-    0x55, 0xdb, 0x45, 0x23, 0xb9, 0x2c, 0xcd, 0x29, 0xd3, 0x54, 0xc3, 0x88,
-    0x1e, 0x5f, 0x52, 0xf2, 0x09, 0x00, 0x26, 0x26, 0x1a, 0xed, 0xf5, 0xc2,
-    0xa9, 0x7d, 0xf9, 0x21, 0x5a, 0xaf, 0x6d, 0xab, 0x8e, 0x16, 0x84, 0x96,
-    0xb5, 0x4f, 0xcf, 0x1e, 0xa3, 0xaf, 0x08, 0x9f, 0x79, 0x86, 0xc3, 0xbe,
-    0x0c, 0x70, 0xcb, 0x8f, 0xf3, 0xc5, 0xf8, 0xe8, 0x4b, 0x21, 0x7d, 0x18,
-    0xa9, 0xed, 0x8b, 0xfb, 0x6b, 0x5a, 0x6f, 0x26, 0x0b, 0x56, 0x04, 0x7c,
-    0xfe, 0x0e, 0x1e, 0xc1, 0x3f, 0x82, 0xc5, 0x73, 0xbd, 0x53, 0x0c, 0xf0,
-    0xe2, 0xc9, 0xf3, 0x3d, 0x1b, 0x6d, 0xba, 0x70, 0xc1, 0x6d, 0xb6, 0x00,
-    0x28, 0xe1, 0xc4, 0x78, 0x62, 0x04, 0xda, 0x23, 0x86, 0xc3, 0xda, 0x74,
-    0x3d, 0x7c, 0xd6, 0x76, 0x29, 0xb2, 0x27, 0x2e, 0xb2, 0x35, 0x42, 0x60,
-    0x82, 0xcf, 0x30, 0x2c, 0x59, 0xe4, 0xe3, 0xd0, 0x74, 0x1f, 0x58, 0xe8,
-    0xda, 0x47, 0x45, 0x73, 0x1c, 0x05, 0x93, 0xae, 0x75, 0xbe, 0x1f, 0x81,
-    0xd8, 0xb7, 0xb3, 0xff, 0xfc, 0x8b, 0x52, 0x9e, 0xed, 0x8b, 0x37, 0x9f,
-    0xe0, 0xb8, 0xa2, 0x66, 0xe1, 0x6a, 0xc5, 0x1f, 0x1d, 0xf0, 0xde, 0x3f,
-    0x3d, 0xb0, 0x28, 0xf3, 0xaa, 0x4e, 0x4d, 0x31, 0xb0, 0x26, 0x79, 0x2b,
-    0x08, 0x0f, 0xe9, 0x2f, 0x79, 0xb3, 0xc8, 0xdd, 0xa7, 0x89, 0xa8, 0xa8,
-    0x1d, 0x59, 0x0e, 0x4f, 0x1e, 0x93, 0x1f, 0x70, 0x7f, 0x4e, 0x7e, 0xfe,
-    0xb8, 0xca, 0x63, 0xe0, 0xa6, 0x05, 0xcc, 0xd7, 0xde, 0x2a, 0x49, 0x31,
-    0x78, 0x5c, 0x5f, 0x44, 0xb2, 0x9b, 0x91, 0x99, 0x14, 0x29, 0x63, 0x09,
-    0x12, 0xdd, 0x02, 0xd9, 0x7b, 0xe9, 0xf5, 0x12, 0x07, 0xd0, 0xe7, 0xe6,
-    0xe8, 0xdd, 0xda, 0xa4, 0x73, 0xc4, 0x8e, 0xbd, 0x7b, 0xb7, 0xbb, 0xcb,
-    0x83, 0x2f, 0x43, 0xf6, 0x1c, 0x50, 0xae, 0x9b, 0x2e, 0x52, 0x80, 0x18,
-    0x85, 0xa8, 0x23, 0x52, 0x7a, 0x6a, 0xf7, 0x42, 0x36, 0xca, 0x91, 0x5a,
-    0x3d, 0x2a, 0xa0, 0x35, 0x7d, 0x70, 0xfc, 0x4c, 0x18, 0x7c, 0x57, 0x72,
-    0xcf, 0x9b, 0x29, 0xd6, 0xd0, 0xb4, 0xd7, 0xe6, 0x89, 0x70, 0x69, 0x22,
-    0x5e, 0x45, 0x09, 0x4d, 0x49, 0x87, 0x84, 0x5f, 0x8a, 0x5f, 0xe4, 0x15,
-    0xd3, 0xe3, 0x72, 0xaf, 0xb2, 0x30, 0x9c, 0xc1, 0xff, 0x8e, 0x6d, 0x2a,
-    0x76, 0x9e, 0x08, 0x03, 0x7e, 0xe0, 0xc3, 0xc2, 0x97, 0x06, 0x6b, 0x33,
-    0x2b, 0x08, 0xe3, 0xd5, 0x0b, 0xd8, 0x32, 0x67, 0x61, 0x10, 0xed, 0x6b,
-    0xed, 0x50, 0xef, 0xd7, 0x1c, 0x1b, 0xe0, 0x6d, 0xa1, 0x64, 0x19, 0x34,
-    0x2f, 0xe4, 0xe8, 0x54, 0xbf, 0x84, 0x0e, 0xdf, 0x0e, 0x8b, 0xd8, 0xdd,
-    0x77, 0x96, 0xb8, 0x54, 0xab, 0xf2, 0x95, 0x59, 0x0d, 0x0d, 0x0a, 0x15,
-    0x6e, 0x01, 0xf2, 0x24, 0xab, 0xa0, 0xd8, 0xdf, 0x38, 0xea, 0x97, 0x58,
-    0x76, 0x88, 0xbe, 0xaf, 0x45, 0xe3, 0x56, 0x4f, 0x68, 0xe8, 0x4b, 0xe7,
-    0x2b, 0x22, 0x18, 0x96, 0x82, 0x89, 0x25, 0x34, 0xd1, 0xdd, 0x08, 0xea,
-    0x7e, 0x21, 0xef, 0x57, 0x55, 0x43, 0xf7, 0xfa, 0xca, 0x1c, 0xde, 0x99,
-    0x2e, 0x8b, 0xd8, 0xc3, 0xcf, 0x89, 0x4d, 0xfc, 0x3b, 0x7d, 0x4a, 0xc9,
-    0x99, 0xc4, 0x31, 0xb6, 0x7a, 0xae, 0xf8, 0x49, 0xb2, 0x46, 0xc1, 0x60,
-    0x05, 0x75, 0xf3, 0x3d, 0xf2, 0xc9, 0x84, 0xa4, 0xb9, 0x8a, 0x87, 0x2a,
-    0x87, 0x5c, 0x0a, 0xbc, 0x51, 0x7d, 0x9a, 0xf5, 0xc9, 0x24, 0x2d, 0x5e,
-    0xe6, 0xc6, 0xe3, 0xcd, 0x7e, 0xe4, 0xaf, 0x8a, 0x6c, 0x00, 0x04, 0xc8,
-    0xd7, 0xa5, 0xad, 0xfa, 0xb2, 0x08, 0x4a, 0x26, 0x9b, 0x7c, 0xd0, 0xc6,
-    0x13, 0xb1, 0xb9, 0x65, 0x3f, 0x70, 0x30, 0xf9, 0x98, 0x9d, 0x87, 0x99,
-    0x57, 0x71, 0x3e, 0xb1, 0xc3, 0x24, 0xf0, 0xa6, 0xa2, 0x60, 0x9d, 0x66,
-    0xd2, 0x5f, 0xae, 0xe3, 0x94, 0x87, 0xea, 0xd1, 0xea, 0x0d, 0x2a, 0x77,
-    0xef, 0x31, 0xcc, 0xeb, 0xf9, 0x0c, 0xdc, 0x9c, 0x12, 0x80, 0xbb, 0xb0,
-    0x8e, 0xab, 0x9a, 0x04, 0xcd, 0x4b, 0x95, 0x4f, 0x7a, 0x0b, 0x53, 0x7c,
-    0x16, 0xcc, 0x0e, 0xb1, 0x73, 0x10, 0xdd, 0xaa, 0x76, 0x94, 0x90, 0xd9,
-    0x8b, 0x66, 0x41, 0x31, 0xed, 0x8c, 0x7d, 0x74, 0xc4, 0x33, 0xfa, 0xc3,
-    0x43, 0x8d, 0x10, 0xbc, 0x84, 0x4d, 0x0e, 0x95, 0x32, 0xdf, 0x17, 0x43,
-    0x6d, 0xd2, 0x5e, 0x12, 0xb9, 0xed, 0x33, 0xd9, 0x97, 0x6f, 0x4a, 0xcd,
-    0xc3, 0xcd, 0x81, 0x34, 0xbe, 0x7e, 0xa2, 0xd0, 0xa7, 0x91, 0x5d, 0x90,
-    0xf6, 0x5e, 0x4a, 0x25, 0x0f, 0xcc, 0x24, 0xeb, 0xe1, 0xe4, 0x62, 0x6c,
-    0x8f, 0x45, 0x36, 0x97, 0x5d, 0xda, 0x20, 0x2b, 0x86, 0x00, 0x8c, 0x94,
-    0xa9, 0x6a, 0x69, 0xb2, 0xe9, 0xbb, 0x82, 0x8e, 0x41, 0x95, 0xb4, 0xb7,
-    0xf1, 0x55, 0x52, 0x30, 0x39, 0x48, 0xb3, 0x25, 0x82, 0xa9, 0x10, 0x27,
-    0x89, 0xb5, 0xe5, 0x1f, 0xab, 0x72, 0x3c, 0x70, 0x08, 0xce, 0xe6, 0x61,
-    0xbf, 0x19, 0xc8, 0x90, 0x2b, 0x29, 0x30, 0x3e, 0xb8, 0x4c, 0x33, 0xf0,
-    0xf0, 0x15, 0x2e, 0xb7, 0x25, 0xca, 0x99, 0x4b, 0x6f, 0x4b, 0x41, 0x50,
-    0xee, 0x56, 0x99, 0xcf, 0x2b, 0xa4, 0xc4, 0x7c, 0x5c, 0xa6, 0xd4, 0x67,
-    0x04, 0x5c, 0x5d, 0x5f, 0x26, 0x9e, 0x0f, 0xe2, 0x58, 0x68, 0x4c, 0x30,
-    0xcd, 0xef, 0x46, 0xdb, 0x37, 0x6f, 0xbb, 0xc4, 0x80, 0xca, 0x8a, 0x54,
-    0x5d, 0x71, 0x9d, 0x0c, 0xe8, 0xb8, 0x2c, 0x10, 0x90, 0x44, 0xa4, 0x88,
-    0x3f, 0xbc, 0x15, 0x3c, 0xd2, 0xca, 0x0e, 0xc3, 0xe4, 0x6e, 0xef, 0xb0,
-    0xcb, 0xfd, 0x61, 0x7c, 0x27, 0xf2, 0x25, 0xea, 0x71, 0x6d, 0xf7, 0x49,
-    0x9c, 0x81, 0x27, 0xf0, 0x61, 0x33, 0xcf, 0x55, 0x68, 0xd3, 0x73, 0xa4,
-    0xed, 0x35, 0x65, 0x2a, 0xf2, 0x3e, 0xcf, 0x90, 0x98, 0x54, 0x6d, 0x95,
-    0x6a, 0x0c, 0x9c, 0x24, 0x0e, 0xb4, 0xb7, 0x9b, 0x8d, 0x6e, 0x1c, 0xbc,
-    0xeb, 0x17, 0x10, 0x86, 0xda, 0x91, 0x6d, 0x89, 0x4c, 0xeb, 0xf5, 0x50,
-    0x8f, 0x40, 0xcf, 0x4a,
-};
-
-static uint32_t kOverflowCounter = 0xffffffff;
-
-static const uint8_t kOverflowOutput[] = {
-    0x37, 0x64, 0x38, 0xcb, 0x25, 0x69, 0x2c, 0xf5, 0x88, 0x8a, 0xfe, 0x6d,
-    0x3b, 0x10, 0x07, 0x3c, 0x77, 0xac, 0xcd, 0x1c, 0x0c, 0xa7, 0x17, 0x31,
-    0x1d, 0xc3, 0x81, 0xd1, 0xa5, 0x20, 0x55, 0xea, 0xd3, 0x00, 0xc9, 0x84,
-    0xde, 0xe2, 0xe5, 0x5e, 0x7b, 0x28, 0x28, 0x59, 0x73, 0x3a, 0x8e, 0x57,
-    0x62, 0x18, 0x50, 0x55, 0x97, 0xca, 0x50, 0x3e, 0x8a, 0x84, 0x61, 0x28,
-    0x4c, 0x22, 0x93, 0x50, 0x48, 0x7e, 0x65, 0x78, 0x06, 0x5a, 0xcd, 0x2b,
-    0x11, 0xf7, 0x10, 0xfd, 0x6f, 0x41, 0x92, 0x82, 0x7c, 0x3a, 0x71, 0x07,
-    0x67, 0xd0, 0x7e, 0xb7, 0xdf, 0xdc, 0xfc, 0xee, 0xe6, 0x55, 0xdd, 0x6f,
-    0x79, 0x23, 0xf3, 0xae, 0xb1, 0x21, 0x96, 0xbe, 0xea, 0x0e, 0x1b, 0x58,
-    0x0b, 0x3f, 0x63, 0x51, 0xd4, 0xce, 0x98, 0xfe, 0x1a, 0xc7, 0xa7, 0x43,
-    0x7f, 0x0c, 0xe8, 0x62, 0xcf, 0x78, 0x3f, 0x4e, 0x31, 0xbf, 0x2b, 0x76,
-    0x91, 0xcd, 0x19, 0x80, 0x0d, 0x7f, 0x11, 0x8b, 0x76, 0xef, 0x43, 0x3c,
-    0x4f, 0x61, 0x86, 0xc5, 0x64, 0xa8, 0xc2, 0x73, 0xc2, 0x64, 0x39, 0xa0,
-    0x8b, 0xe6, 0x7f, 0xf6, 0x26, 0xd4, 0x47, 0x4f, 0xe4, 0x46, 0xe2, 0xf5,
-    0x9e, 0xe6, 0xc7, 0x76, 0x6c, 0xa9, 0x0f, 0x1d, 0x1b, 0x22, 0xa5, 0x62,
-    0x0a, 0x88, 0x3e, 0x8c, 0xf0, 0xbc, 0x4c, 0x11, 0x3f, 0x0d, 0xf7, 0x85,
-    0x67, 0x0b, 0x4c, 0xa3, 0x3f, 0xa8, 0xf1, 0x2a, 0x65, 0x2e, 0x00, 0x03,
-    0xc9, 0x49, 0x91, 0x48, 0xb7, 0xc8, 0x29, 0x28, 0x2f, 0x46, 0x8e, 0x8b,
-    0xd6, 0x73, 0x19, 0x06, 0x3e, 0x6f, 0x92, 0xc8, 0x3d, 0x3f, 0x4d, 0x68,
-    0xbc, 0x02, 0xc0, 0x8f, 0x71, 0x46, 0x0d, 0x28, 0x63, 0xfe, 0xad, 0x14,
-    0x81, 0x04, 0xb7, 0x23, 0xfd, 0x21, 0x0a, 0xf0, 0x6f, 0xcd, 0x47, 0x0b,
-    0x0e, 0x93, 0xa3, 0xa8, 0x44, 0x15, 0xd6, 0xae, 0x06, 0x44, 0x6b, 0xbc,
-    0xff, 0x8a, 0x56, 0x60, 0x3c, 0x38, 0xd6, 0xed, 0x03, 0x2d, 0x79, 0x2a,
-    0xe9, 0x15, 0xef, 0xfc, 0x92, 0x1f, 0x83, 0xa4, 0x60, 0x8f, 0xc9, 0x29,
-    0xb2, 0xb4, 0x9e, 0x3f, 0xa9, 0xe8, 0xfb, 0xa2, 0x62, 0x20, 0x2e, 0xc9,
-    0x43, 0xb2, 0xd1, 0x36, 0x85, 0x1e, 0xa4, 0xb3, 0x4f, 0x8c, 0x9e, 0x81,
-    0x75, 0x68, 0xbc, 0xf1, 0x52, 0xd5, 0x03, 0x22, 0xcf, 0xdf, 0x64, 0xb0,
-    0x28, 0xd2, 0x45, 0x18, 0x38, 0x8c, 0xd0, 0xf6, 0x30, 0x3c, 0x04, 0xd9,
-    0x8d, 0xb6, 0xb2, 0x57, 0x2a, 0xee, 0x28, 0xeb, 0x5f, 0x1a, 0x10, 0x6e,
-    0x88, 0x79, 0x08, 0x23, 0x19, 0x84, 0xf8, 0x80, 0x1a, 0x7d, 0x6f, 0x8b,
-    0xc1, 0x8e, 0x5f, 0x5f, 0x54, 0x14, 0x2a, 0xdc, 0x41, 0x5d, 0xeb, 0x00,
-    0xf2, 0x50, 0xae, 0xd3, 0x55, 0x32, 0xf6, 0xd9, 0x34, 0xf4, 0xb2, 0xf2,
-    0xf5, 0x90, 0x05, 0x8a, 0x9c, 0xc7, 0x94, 0x5d, 0x2d, 0x5a, 0x0f, 0xdd,
-    0x03, 0xde, 0xbe, 0x18, 0xb3, 0xe3, 0x07, 0x6b, 0x57, 0xfa, 0x1b, 0x7b,
-    0x75, 0xcb, 0xc2, 0x4d, 0xf7, 0x88, 0xfe, 0xf9, 0xc0, 0x6c, 0xdb, 0x5f,
-    0xf6, 0x48, 0x00, 0x4a, 0x5d, 0x75, 0xfa, 0x6b, 0x45, 0x43, 0xc4, 0x7f,
-    0x97, 0x31, 0x22, 0xb4, 0x9c, 0xa3, 0xee, 0x2f, 0x27, 0xa9, 0x9f, 0x0e,
-    0xdc, 0x40, 0x67, 0x17, 0x2e, 0xcb, 0xfd, 0x9e, 0xe7, 0xb2, 0x85, 0xcd,
-    0x49, 0x24, 0xc8, 0x8a, 0x59, 0x6b, 0x1f, 0xec, 0x72, 0x89, 0xf8, 0x30,
-    0xdf, 0x82, 0x61, 0x3b, 0x8b, 0xc9, 0x80, 0xe4, 0x27, 0x0d, 0xfe, 0x42,
-    0x27, 0x6c, 0xaf, 0x62, 0x3e, 0x2f, 0x1d, 0x38, 0xb6, 0x88, 0x8f, 0x71,
-    0x5a, 0x54, 0x6c, 0x68, 0x57, 0x40, 0x49, 0x7a, 0xb2, 0xe8, 0xb6, 0x97,
-    0xab, 0xd6, 0x3c, 0x35, 0xf3, 0x95, 0x12, 0xde, 0xa2, 0x39, 0x54, 0x52,
-    0x8c, 0x38, 0x2a, 0x2b, 0xe7, 0x21, 0x38, 0x63, 0xb0, 0xd6, 0xad, 0x94,
-    0x44, 0xaf, 0x49, 0x5d, 0xfc, 0x49, 0x6b, 0x30, 0xdf, 0xe9, 0x19, 0x1e,
-    0xed, 0x98, 0x0d, 0x4a, 0x3d, 0x56, 0x5e, 0x74, 0xad, 0x13, 0x8b, 0x68,
-    0x45, 0x08, 0xbe, 0x0e, 0x6c, 0xb4, 0x62, 0x93, 0x27, 0x8b, 0x4f, 0xab,
-    0x3e, 0xba, 0xe1, 0xe5, 0xff, 0xa8, 0x5d, 0x33, 0x32, 0xff, 0x34, 0xf9,
-    0x8d, 0x67, 0x24, 0x4a, 0xbb, 0x2c, 0x60, 0xb5, 0x88, 0x96, 0x1b, 0xcc,
-    0x53, 0xfb, 0x2e, 0x05, 0x1d, 0x8b, 0xc2, 0xa0, 0xde, 0x21, 0x41, 0x5e,
-    0x11, 0x1b, 0x96, 0xd9, 0xa6, 0xae, 0xbd, 0xf0, 0x91, 0xad, 0x69, 0x2b,
-    0xd2, 0x3f, 0xe4, 0x3d, 0x16, 0x69, 0xa6, 0xb2, 0x9c, 0xbe, 0x59, 0x7b,
-    0x87, 0x79, 0xf5, 0xc2, 0x5a, 0xcc, 0xdf, 0xfe, 0x7f, 0xf9, 0xa6, 0x52,
-    0xde, 0x5f, 0x46, 0x91, 0x21, 0x2c, 0x2c, 0x49, 0x25, 0x00, 0xd5, 0xe4,
-    0x81, 0x6b, 0x85, 0xad, 0x98, 0xaf, 0x06, 0x4a, 0x83, 0xb2, 0xe3, 0x42,
-    0x39, 0x31, 0x50, 0xe1, 0x2d, 0x22, 0xe6, 0x07, 0x24, 0x65, 0x29, 0x3f,
-    0x4c, 0xbd, 0x14, 0x8d, 0xfa, 0x31, 0xfa, 0xa4, 0xb5, 0x99, 0x04, 0xa2,
-    0xa5, 0xcc, 0x3b, 0x12, 0xb1, 0xaa, 0x6a, 0x17, 0x78, 0x8b, 0xb3, 0xe4,
-    0x3c, 0x4c, 0xc5, 0xaa, 0x79, 0x12, 0x17, 0xe0, 0x22, 0x4d, 0xf4, 0xa9,
-    0xd5, 0xd0, 0xed, 0xf8, 0xfe, 0x0a, 0x45, 0x80, 0x9f, 0x3b, 0x74, 0xa0,
-    0xb1, 0xda, 0x18, 0xfa, 0xc2, 0x7d, 0xf6, 0x18, 0x2e, 0xa9, 0x2b, 0x7e,
-    0x69, 0x06, 0x43, 0x2d, 0x62, 0x09, 0x42, 0x10, 0x9f, 0x83, 0xad, 0xd9,
-    0xdd, 0xcd, 0xcb, 0x1b, 0x33, 0x32, 0x3e, 0x1f, 0xf6, 0xac, 0x3b, 0xa3,
-    0x29, 0xd7, 0xc0, 0x88, 0xf9, 0xb7, 0x4c, 0xcd, 0x0a, 0x1f, 0xb8, 0x0f,
-    0xe6, 0xf7, 0xd7, 0x4d, 0x5f, 0x06, 0x12, 0x8a, 0x12, 0xa6, 0x2d, 0xbe,
-    0x5c, 0x57, 0xf8, 0x7f, 0x54, 0x3f, 0x90, 0x83, 0x2c, 0x0a, 0xc5, 0x3d,
-    0x03, 0x78, 0x8a, 0x68, 0xf0, 0xbd, 0xa5, 0x3e, 0xe7, 0x07, 0xab, 0xc8,
-    0x58, 0x2f, 0x5c, 0xfd, 0xb5, 0x39, 0xe3, 0xc6, 0x1c, 0x27, 0xf9, 0x0b,
-    0xc7, 0x4c, 0xcc, 0x67, 0x62, 0xe6, 0x79, 0xe8, 0xc1, 0x0a, 0x86, 0x8a,
-    0xb2, 0x32, 0x7b, 0x90, 0x36, 0x50, 0x92, 0x1f, 0x3e, 0x68, 0x39, 0x1c,
-    0x4d, 0x5d, 0xf8, 0x2b, 0xe8, 0x7d, 0xe2, 0x34, 0x61, 0x9e, 0xc3, 0x77,
-    0xb9, 0x4c, 0x34, 0x08, 0xda, 0x31, 0xc9, 0x1d, 0xbd, 0x3b, 0x7b, 0xf1,
-    0x14, 0xba, 0x3a, 0x34, 0x13, 0xaa, 0x5e, 0xa8, 0x36, 0xf6, 0xfe, 0xed,
-    0x5b, 0xef, 0xaf, 0x24, 0x42, 0xba, 0xfc, 0xc9, 0x30, 0x84, 0xec, 0x49,
-    0x14, 0xab, 0x58, 0x71, 0xfe, 0x4b, 0x6d, 0x7b, 0x9f, 0xbb, 0x3c, 0x83,
-    0xdf, 0x3a, 0xfb, 0x54, 0xff, 0x36, 0xaa, 0x6c, 0x47, 0x94, 0xc0, 0xde,
-    0x89, 0x2e, 0xac, 0x68, 0xee, 0xe8, 0xf4, 0xae, 0xa3, 0xe0, 0x91, 0x55,
-    0x0b, 0x0c, 0xd7, 0xf4, 0x33, 0xb5, 0xf9, 0xf2, 0x9e, 0xda, 0x78, 0xe5,
-    0x75, 0xec, 0xdb, 0xf6, 0xed, 0x27, 0x9f, 0x44, 0x19, 0x9f, 0xb7, 0xf0,
-    0xac, 0x1b, 0x3a, 0xf5, 0x77, 0xc7, 0x76, 0x1e, 0x3f, 0x78, 0x12, 0x48,
-    0x1d, 0xb8, 0xe0, 0x30, 0x29, 0x9a, 0x8c, 0x8f, 0x21, 0x44, 0x9c, 0x89,
-    0xec, 0x8e, 0xd0, 0x81, 0xf5, 0x6a, 0xd0, 0xac, 0x5e, 0xf0, 0x0f, 0x88,
-    0x86, 0x31, 0x2e, 0x15, 0x1e, 0x0d, 0x2d, 0xeb, 0x56, 0x30, 0x27, 0x02,
-    0x93, 0xf4, 0x07, 0x07, 0xba, 0xf7, 0xbd, 0xe8, 0x27, 0x4f, 0xc6, 0xd9,
-    0x57, 0x10, 0x3b, 0xf0, 0xff, 0x2f, 0x2d, 0x6b, 0xd0, 0x17, 0xb3, 0x49,
-    0xeb, 0xc2, 0x49, 0xdb,
-};
-
-
-static_assert(sizeof(kInput) == sizeof(kOutput),
-              "Input and output lengths don't match.");
-static_assert(sizeof(kInput) == sizeof(kOverflowOutput),
-              "Input and output lengths don't match.");
-
-TEST(ChaChaTest, TestVector) {
-  // Run the test with the test vector at all lengths.
-  for (size_t len = 0; len <= sizeof(kInput); len++) {
-    SCOPED_TRACE(len);
-
-    auto buf = std::make_unique<uint8_t[]>(len);
-    CRYPTO_chacha_20(buf.get(), kInput, len, kKey, kNonce, kCounter);
-    EXPECT_EQ(Bytes(kOutput, len), Bytes(buf.get(), len));
-
-    // Test the in-place version.
-    OPENSSL_memcpy(buf.get(), kInput, len);
-    CRYPTO_chacha_20(buf.get(), buf.get(), len, kKey, kNonce, kCounter);
-    EXPECT_EQ(Bytes(kOutput, len), Bytes(buf.get(), len));
-  }
-}
-
-TEST(ChaChaTest, CounterOverflow) {
-  // Run the test with the test vector at all lengths.
-  for (size_t len = 0; len <= sizeof(kInput); len++) {
-    SCOPED_TRACE(len);
-
-    auto buf = std::make_unique<uint8_t[]>(len);
-    CRYPTO_chacha_20(buf.get(), kInput, len, kKey, kNonce, kOverflowCounter);
-    EXPECT_EQ(Bytes(kOverflowOutput, len), Bytes(buf.get(), len));
-
-    // Test the in-place version.
-    OPENSSL_memcpy(buf.get(), kInput, len);
-    CRYPTO_chacha_20(buf.get(), buf.get(), len, kKey, kNonce, kOverflowCounter);
-    EXPECT_EQ(Bytes(kOverflowOutput, len), Bytes(buf.get(), len));
-  }
-}
-
-#if defined(SUPPORTS_ABI_TEST)
-
-static void check_abi(uint8_t *out, const uint8_t *in, size_t in_len,
-                      const uint32_t key[8], const uint32_t counter[4]) {
-#if defined(CHACHA20_ASM_NEON)
-  if (ChaCha20_ctr32_neon_capable(in_len)) {
-    CHECK_ABI(ChaCha20_ctr32_neon, out, in, in_len, key, counter);
-  }
-#endif
-#if defined(CHACHA20_ASM_AVX2)
-  if (ChaCha20_ctr32_avx2_capable(in_len)) {
-    CHECK_ABI(ChaCha20_ctr32_avx2, out, in, in_len, key, counter);
-  }
-#endif
-#if defined(CHACHA20_ASM_SSSE3_4X)
-  if (ChaCha20_ctr32_ssse3_4x_capable(in_len)) {
-    CHECK_ABI(ChaCha20_ctr32_ssse3_4x, out, in, in_len, key, counter);
-  }
-#endif
-#if defined(CHACHA20_ASM_SSSE3)
-  if (ChaCha20_ctr32_ssse3_capable(in_len)) {
-    CHECK_ABI(ChaCha20_ctr32_ssse3, out, in, in_len, key, counter);
-  }
-#endif
-#if defined(CHACHA20_ASM_NOHW)
-  if (in_len > 0) {
-    CHECK_ABI(ChaCha20_ctr32_nohw, out, in, in_len, key, counter);
-  }
-#endif
-}
-
-TEST(ChaChaTest, ABI) {
-  uint32_t key[8];
-  OPENSSL_memcpy(key, kKey, sizeof(key));
-
-  static const uint32_t kCounterNonce[4] = {0};
-
-  auto buf = std::make_unique<uint8_t[]>(sizeof(kInput));
-  for (size_t len = 0; len <= 32; len++) {
-    SCOPED_TRACE(len);
-    check_abi(buf.get(), kInput, len, key, kCounterNonce);
-  }
-
-  for (size_t len : {32 * 2, 32 * 4, 32 * 8, 32 * 16, 32 * 24}) {
-    SCOPED_TRACE(len);
-    check_abi(buf.get(), kInput, len, key, kCounterNonce);
-    // Cover the partial block paths.
-    check_abi(buf.get(), kInput, len + 15, key, kCounterNonce);
-  }
-}
-
-#endif  // SUPPORTS_ABI_TEST
diff --git a/src/crypto/chacha/internal.h b/src/crypto/chacha/internal.h
deleted file mode 100644
index ec0c79f..0000000
--- a/src/crypto/chacha/internal.h
+++ /dev/null
@@ -1,102 +0,0 @@
-// Copyright 2018 The BoringSSL Authors
-//
-// 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
-//
-//     https://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 OPENSSL_HEADER_CRYPTO_CHACHA_INTERNAL_H
-#define OPENSSL_HEADER_CRYPTO_CHACHA_INTERNAL_H
-
-#include <openssl/base.h>
-
-#include "../internal.h"
-
-#if defined(__cplusplus)
-extern "C" {
-#endif
-
-
-// CRYPTO_hchacha20 computes the HChaCha20 function, which should only be used
-// as part of XChaCha20.
-void CRYPTO_hchacha20(uint8_t out[32], const uint8_t key[32],
-                      const uint8_t nonce[16]);
-
-#if !defined(OPENSSL_NO_ASM) && defined(OPENSSL_X86)
-
-#define CHACHA20_ASM_NOHW
-
-#define CHACHA20_ASM_SSSE3
-inline int ChaCha20_ctr32_ssse3_capable(size_t len) {
-  // Unlike the x86_64 version, the x86 SSSE3 routine runs for all non-zero
-  // lengths.
-  return len > 0 && CRYPTO_is_SSSE3_capable();
-}
-void ChaCha20_ctr32_ssse3(uint8_t *out, const uint8_t *in, size_t in_len,
-                          const uint32_t key[8], const uint32_t counter[4]);
-
-#elif !defined(OPENSSL_NO_ASM) && \
-    (defined(OPENSSL_ARM) || defined(OPENSSL_AARCH64))
-
-#define CHACHA20_ASM_NOHW
-
-#define CHACHA20_ASM_NEON
-inline int ChaCha20_ctr32_neon_capable(size_t len) {
-  return len >= 192 && CRYPTO_is_NEON_capable();
-}
-void ChaCha20_ctr32_neon(uint8_t *out, const uint8_t *in, size_t in_len,
-                         const uint32_t key[8], const uint32_t counter[4]);
-#elif !defined(OPENSSL_NO_ASM) && defined(OPENSSL_X86_64)
-#define CHACHA20_ASM_NOHW
-
-#define CHACHA20_ASM_AVX2
-inline int ChaCha20_ctr32_avx2_capable(size_t len) {
-  return len > 128 && CRYPTO_is_AVX2_capable();
-}
-void ChaCha20_ctr32_avx2(uint8_t *out, const uint8_t *in, size_t in_len,
-                         const uint32_t key[8], const uint32_t counter[4]);
-
-#define CHACHA20_ASM_SSSE3_4X
-inline int ChaCha20_ctr32_ssse3_4x_capable(size_t len) {
-  int capable = len > 128 && CRYPTO_is_SSSE3_capable();
-  int faster = len > 192 || !CRYPTO_cpu_perf_is_like_silvermont();
-  return capable && faster;
-}
-void ChaCha20_ctr32_ssse3_4x(uint8_t *out, const uint8_t *in, size_t in_len,
-                             const uint32_t key[8], const uint32_t counter[4]);
-
-#define CHACHA20_ASM_SSSE3
-inline int ChaCha20_ctr32_ssse3_capable(size_t len) {
-  return len > 128 && CRYPTO_is_SSSE3_capable();
-}
-void ChaCha20_ctr32_ssse3(uint8_t *out, const uint8_t *in, size_t in_len,
-                          const uint32_t key[8], const uint32_t counter[4]);
-#endif
-
-#if defined(CHACHA20_ASM_NOHW)
-// ChaCha20_ctr32_nohw encrypts |in_len| bytes from |in| and writes the result
-// to |out|. If |in| and |out| alias, they must be equal. |in_len| may not be
-// zero.
-//
-// |counter[0]| is the initial 32-bit block counter, and the remainder is the
-// 96-bit nonce. If the counter overflows, the output is undefined. The function
-// will produce output, but the output may vary by machine and may not be
-// self-consistent. (On some architectures, the assembly implements a mix of
-// 64-bit and 32-bit counters.)
-void ChaCha20_ctr32_nohw(uint8_t *out, const uint8_t *in, size_t in_len,
-                         const uint32_t key[8], const uint32_t counter[4]);
-#endif
-
-
-#if defined(__cplusplus)
-}  // extern C
-#endif
-
-#endif  // OPENSSL_HEADER_CRYPTO_CHACHA_INTERNAL_H
diff --git a/src/crypto/cipher/aead_test.cc b/src/crypto/cipher/aead_test.cc
deleted file mode 100644
index 5eb0c39..0000000
--- a/src/crypto/cipher/aead_test.cc
+++ /dev/null
@@ -1,1066 +0,0 @@
-// Copyright 2014 The BoringSSL Authors
-//
-// 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
-//
-//     https://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 <assert.h>
-#include <stdint.h>
-#include <string.h>
-
-#include <vector>
-
-#include <gtest/gtest.h>
-
-#include <openssl/aead.h>
-#include <openssl/cipher.h>
-#include <openssl/err.h>
-
-#include "../fipsmodule/cipher/internal.h"
-#include "../internal.h"
-#include "../test/abi_test.h"
-#include "../test/file_test.h"
-#include "../test/test_util.h"
-#include "../test/wycheproof_util.h"
-#include "internal.h"
-
-namespace {
-
-// kLimitedImplementation indicates that tests that assume a generic AEAD
-// interface should not be performed. For example, the key-wrap AEADs only
-// handle inputs that are a multiple of eight bytes in length and the TLS CBC
-// AEADs have the concept of “direction”.
-constexpr uint32_t kLimitedImplementation = 1 << 0;
-// kCanTruncateTags indicates that the AEAD supports truncatating tags to
-// arbitrary lengths.
-constexpr uint32_t kCanTruncateTags = 1 << 1;
-// kVariableNonce indicates that the AEAD supports a variable-length nonce.
-constexpr uint32_t kVariableNonce = 1 << 2;
-// kNondeterministic indicates that the AEAD performs randomised encryption thus
-// one cannot assume that encrypting the same data will result in the same
-// ciphertext.
-constexpr uint32_t kNondeterministic = 1 << 7;
-
-// RequiresADLength encodes an AD length requirement into flags.
-constexpr uint32_t RequiresADLength(size_t length) {
-  assert(length < 16);
-  return static_cast<uint32_t>((length & 0xf) << 3);
-}
-
-// RequiredADLength returns the AD length requirement encoded in |flags|, or
-// zero if there isn't one.
-constexpr size_t RequiredADLength(uint32_t flags) { return (flags >> 3) & 0xf; }
-
-constexpr uint32_t RequiresMinimumTagLength(size_t length) {
-  assert(length < 16);
-  return static_cast<uint32_t>((length & 0xf) << 8);
-}
-
-constexpr size_t MinimumTagLength(uint32_t flags) {
-  return ((flags >> 8) & 0xf) == 0 ? 1 : ((flags >> 8) & 0xf);
-}
-
-struct KnownAEAD {
-  const char name[40];
-  const EVP_AEAD *(*func)(void);
-  const char *test_vectors;
-  uint32_t flags;
-};
-
-static const struct KnownAEAD kAEADs[] = {
-    {"AES_128_GCM", EVP_aead_aes_128_gcm, "aes_128_gcm_tests.txt",
-     kCanTruncateTags | kVariableNonce},
-
-    {"AES_128_GCM_NIST", EVP_aead_aes_128_gcm, "nist_cavp/aes_128_gcm.txt",
-     kCanTruncateTags | kVariableNonce},
-
-    {"AES_192_GCM", EVP_aead_aes_192_gcm, "aes_192_gcm_tests.txt",
-     kCanTruncateTags | kVariableNonce},
-
-    {"AES_256_GCM", EVP_aead_aes_256_gcm, "aes_256_gcm_tests.txt",
-     kCanTruncateTags | kVariableNonce},
-
-    {"AES_256_GCM_NIST", EVP_aead_aes_256_gcm, "nist_cavp/aes_256_gcm.txt",
-     kCanTruncateTags | kVariableNonce},
-
-    {"AES_128_GCM_SIV", EVP_aead_aes_128_gcm_siv, "aes_128_gcm_siv_tests.txt",
-     0},
-
-    {"AES_256_GCM_SIV", EVP_aead_aes_256_gcm_siv, "aes_256_gcm_siv_tests.txt",
-     0},
-
-    {"AES_128_GCM_RandomNonce", EVP_aead_aes_128_gcm_randnonce,
-     "aes_128_gcm_randnonce_tests.txt",
-     kNondeterministic | kCanTruncateTags | RequiresMinimumTagLength(13)},
-
-    {"AES_256_GCM_RandomNonce", EVP_aead_aes_256_gcm_randnonce,
-     "aes_256_gcm_randnonce_tests.txt",
-     kNondeterministic | kCanTruncateTags | RequiresMinimumTagLength(13)},
-
-    {"ChaCha20Poly1305", EVP_aead_chacha20_poly1305,
-     "chacha20_poly1305_tests.txt", kCanTruncateTags},
-
-    {"XChaCha20Poly1305", EVP_aead_xchacha20_poly1305,
-     "xchacha20_poly1305_tests.txt", kCanTruncateTags},
-
-    {"AES_128_CBC_SHA1_TLS", EVP_aead_aes_128_cbc_sha1_tls,
-     "aes_128_cbc_sha1_tls_tests.txt",
-     kLimitedImplementation | RequiresADLength(11)},
-
-    {"AES_128_CBC_SHA1_TLSImplicitIV",
-     EVP_aead_aes_128_cbc_sha1_tls_implicit_iv,
-     "aes_128_cbc_sha1_tls_implicit_iv_tests.txt",
-     kLimitedImplementation | RequiresADLength(11)},
-
-    {"AES_256_CBC_SHA1_TLS", EVP_aead_aes_256_cbc_sha1_tls,
-     "aes_256_cbc_sha1_tls_tests.txt",
-     kLimitedImplementation | RequiresADLength(11)},
-
-    {"AES_256_CBC_SHA1_TLSImplicitIV",
-     EVP_aead_aes_256_cbc_sha1_tls_implicit_iv,
-     "aes_256_cbc_sha1_tls_implicit_iv_tests.txt",
-     kLimitedImplementation | RequiresADLength(11)},
-
-    {"DES_EDE3_CBC_SHA1_TLS", EVP_aead_des_ede3_cbc_sha1_tls,
-     "des_ede3_cbc_sha1_tls_tests.txt",
-     kLimitedImplementation | RequiresADLength(11)},
-
-    {"DES_EDE3_CBC_SHA1_TLSImplicitIV",
-     EVP_aead_des_ede3_cbc_sha1_tls_implicit_iv,
-     "des_ede3_cbc_sha1_tls_implicit_iv_tests.txt",
-     kLimitedImplementation | RequiresADLength(11)},
-
-    {"AES_128_CTR_HMAC_SHA256", EVP_aead_aes_128_ctr_hmac_sha256,
-     "aes_128_ctr_hmac_sha256.txt", kCanTruncateTags},
-
-    {"AES_256_CTR_HMAC_SHA256", EVP_aead_aes_256_ctr_hmac_sha256,
-     "aes_256_ctr_hmac_sha256.txt", kCanTruncateTags},
-
-    {"AES_128_CCM_BLUETOOTH", EVP_aead_aes_128_ccm_bluetooth,
-     "aes_128_ccm_bluetooth_tests.txt", 0},
-
-    {"AES_128_CCM_BLUETOOTH_8", EVP_aead_aes_128_ccm_bluetooth_8,
-     "aes_128_ccm_bluetooth_8_tests.txt", 0},
-
-    {"AES_128_CCM_Matter", EVP_aead_aes_128_ccm_matter,
-     "aes_128_ccm_matter_tests.txt", 0},
-
-    {"AES_128_EAX", EVP_aead_aes_128_eax, "aes_128_eax_test.txt",
-     kVariableNonce},
-
-    {"AES_256_EAX", EVP_aead_aes_256_eax, "aes_256_eax_test.txt",
-     kVariableNonce},
-};
-
-class PerAEADTest : public testing::TestWithParam<KnownAEAD> {
- public:
-  const EVP_AEAD *aead() { return GetParam().func(); }
-};
-
-INSTANTIATE_TEST_SUITE_P(All, PerAEADTest, testing::ValuesIn(kAEADs),
-                         [](const testing::TestParamInfo<KnownAEAD> &params)
-                             -> std::string { return params.param.name; });
-
-// Tests an AEAD against a series of test vectors from a file, using the
-// FileTest format. As an example, here's a valid test case:
-//
-//   KEY: 5a19f3173586b4c42f8412f4d5a786531b3231753e9e00998aec12fda8df10e4
-//   NONCE: 978105dfce667bf4
-//   IN: 6a4583908d
-//   AD: b654574932
-//   CT: 5294265a60
-//   TAG: 1d45758621762e061368e68868e2f929
-TEST_P(PerAEADTest, TestVector) {
-  std::string test_vectors = "crypto/cipher/test/";
-  test_vectors += GetParam().test_vectors;
-  FileTestGTest(test_vectors.c_str(), [&](FileTest *t) {
-    std::vector<uint8_t> key, nonce, in, ad, ct, tag;
-    ASSERT_TRUE(t->GetBytes(&key, "KEY"));
-    ASSERT_TRUE(t->GetBytes(&nonce, "NONCE"));
-    ASSERT_TRUE(t->GetBytes(&in, "IN"));
-    ASSERT_TRUE(t->GetBytes(&ad, "AD"));
-    ASSERT_TRUE(t->GetBytes(&ct, "CT"));
-    ASSERT_TRUE(t->GetBytes(&tag, "TAG"));
-    size_t tag_len = tag.size();
-    if (t->HasAttribute("TAG_LEN")) {
-      // Legacy AEADs are MAC-then-encrypt and may include padding in the TAG
-      // field. TAG_LEN contains the actual size of the digest in that case.
-      std::string tag_len_str;
-      ASSERT_TRUE(t->GetAttribute(&tag_len_str, "TAG_LEN"));
-      tag_len = strtoul(tag_len_str.c_str(), nullptr, 10);
-      ASSERT_TRUE(tag_len);
-    }
-
-    bssl::ScopedEVP_AEAD_CTX ctx;
-    ASSERT_TRUE(EVP_AEAD_CTX_init_with_direction(
-        ctx.get(), aead(), key.data(), key.size(), tag_len, evp_aead_seal));
-
-    std::vector<uint8_t> out(in.size() + EVP_AEAD_max_overhead(aead()));
-    if (!t->HasAttribute("NO_SEAL") &&
-        !(GetParam().flags & kNondeterministic)) {
-      size_t out_len;
-      ASSERT_TRUE(EVP_AEAD_CTX_seal(ctx.get(), out.data(), &out_len, out.size(),
-                                    nonce.data(), nonce.size(), in.data(),
-                                    in.size(), ad.data(), ad.size()));
-      out.resize(out_len);
-
-      ASSERT_EQ(out.size(), ct.size() + tag.size());
-      EXPECT_EQ(Bytes(ct), Bytes(out.data(), ct.size()));
-      EXPECT_EQ(Bytes(tag), Bytes(out.data() + ct.size(), tag.size()));
-    } else {
-      out.resize(ct.size() + tag.size());
-      OPENSSL_memcpy(out.data(), ct.data(), ct.size());
-      OPENSSL_memcpy(out.data() + ct.size(), tag.data(), tag.size());
-    }
-
-    // The "stateful" AEADs for implementing pre-AEAD cipher suites need to be
-    // reset after each operation.
-    ctx.Reset();
-    ASSERT_TRUE(EVP_AEAD_CTX_init_with_direction(
-        ctx.get(), aead(), key.data(), key.size(), tag_len, evp_aead_open));
-
-    std::vector<uint8_t> out2(out.size());
-    size_t out2_len;
-    int ret = EVP_AEAD_CTX_open(ctx.get(), out2.data(), &out2_len, out2.size(),
-                                nonce.data(), nonce.size(), out.data(),
-                                out.size(), ad.data(), ad.size());
-    if (t->HasAttribute("FAILS")) {
-      ASSERT_FALSE(ret) << "Decrypted bad data.";
-      ERR_clear_error();
-      return;
-    }
-
-    ASSERT_TRUE(ret) << "Failed to decrypt.";
-    out2.resize(out2_len);
-    EXPECT_EQ(Bytes(in), Bytes(out2));
-
-    // The "stateful" AEADs for implementing pre-AEAD cipher suites need to be
-    // reset after each operation.
-    ctx.Reset();
-    ASSERT_TRUE(EVP_AEAD_CTX_init_with_direction(
-        ctx.get(), aead(), key.data(), key.size(), tag_len, evp_aead_open));
-
-    // Garbage at the end isn't ignored.
-    out.push_back(0);
-    out2.resize(out.size());
-    EXPECT_FALSE(EVP_AEAD_CTX_open(
-        ctx.get(), out2.data(), &out2_len, out2.size(), nonce.data(),
-        nonce.size(), out.data(), out.size(), ad.data(), ad.size()))
-        << "Decrypted bad data with trailing garbage.";
-    ERR_clear_error();
-
-    // The "stateful" AEADs for implementing pre-AEAD cipher suites need to be
-    // reset after each operation.
-    ctx.Reset();
-    ASSERT_TRUE(EVP_AEAD_CTX_init_with_direction(
-        ctx.get(), aead(), key.data(), key.size(), tag_len, evp_aead_open));
-
-    // Verify integrity is checked.
-    out[0] ^= 0x80;
-    out.resize(out.size() - 1);
-    out2.resize(out.size());
-    EXPECT_FALSE(EVP_AEAD_CTX_open(
-        ctx.get(), out2.data(), &out2_len, out2.size(), nonce.data(),
-        nonce.size(), out.data(), out.size(), ad.data(), ad.size()))
-        << "Decrypted bad data with corrupted byte.";
-    ERR_clear_error();
-  });
-}
-
-TEST_P(PerAEADTest, TestExtraInput) {
-  const KnownAEAD &aead_config = GetParam();
-  if (!aead()->seal_scatter_supports_extra_in) {
-    return;
-  }
-
-  const std::string test_vectors =
-      "crypto/cipher/test/" + std::string(aead_config.test_vectors);
-  FileTestGTest(test_vectors.c_str(), [&](FileTest *t) {
-    if (t->HasAttribute("NO_SEAL") ||  //
-        t->HasAttribute("FAILS") ||    //
-        (aead_config.flags & kNondeterministic)) {
-      t->SkipCurrent();
-      return;
-    }
-
-    std::vector<uint8_t> key, nonce, in, ad, ct, tag;
-    ASSERT_TRUE(t->GetBytes(&key, "KEY"));
-    ASSERT_TRUE(t->GetBytes(&nonce, "NONCE"));
-    ASSERT_TRUE(t->GetBytes(&in, "IN"));
-    ASSERT_TRUE(t->GetBytes(&ad, "AD"));
-    ASSERT_TRUE(t->GetBytes(&ct, "CT"));
-    ASSERT_TRUE(t->GetBytes(&tag, "TAG"));
-
-    bssl::ScopedEVP_AEAD_CTX ctx;
-    ASSERT_TRUE(EVP_AEAD_CTX_init(ctx.get(), aead(), key.data(), key.size(),
-                                  tag.size(), nullptr));
-    std::vector<uint8_t> out_tag(EVP_AEAD_max_overhead(aead()) + in.size());
-    std::vector<uint8_t> out(in.size());
-
-    for (size_t extra_in_size = 0; extra_in_size < in.size(); extra_in_size++) {
-      size_t tag_bytes_written;
-      SCOPED_TRACE(extra_in_size);
-      ASSERT_TRUE(EVP_AEAD_CTX_seal_scatter(
-          ctx.get(), out.data(), out_tag.data(), &tag_bytes_written,
-          out_tag.size(), nonce.data(), nonce.size(), in.data(),
-          in.size() - extra_in_size, in.data() + in.size() - extra_in_size,
-          extra_in_size, ad.data(), ad.size()));
-
-      ASSERT_EQ(tag_bytes_written, extra_in_size + tag.size());
-
-      memcpy(out.data() + in.size() - extra_in_size, out_tag.data(),
-             extra_in_size);
-
-      EXPECT_EQ(Bytes(ct), Bytes(out.data(), in.size()));
-      EXPECT_EQ(Bytes(tag), Bytes(out_tag.data() + extra_in_size,
-                                  tag_bytes_written - extra_in_size));
-    }
-  });
-}
-
-TEST_P(PerAEADTest, TestVectorScatterGather) {
-  std::string test_vectors = "crypto/cipher/test/";
-  const KnownAEAD &aead_config = GetParam();
-  test_vectors += aead_config.test_vectors;
-  FileTestGTest(test_vectors.c_str(), [&](FileTest *t) {
-    std::vector<uint8_t> key, nonce, in, ad, ct, tag;
-    ASSERT_TRUE(t->GetBytes(&key, "KEY"));
-    ASSERT_TRUE(t->GetBytes(&nonce, "NONCE"));
-    ASSERT_TRUE(t->GetBytes(&in, "IN"));
-    ASSERT_TRUE(t->GetBytes(&ad, "AD"));
-    ASSERT_TRUE(t->GetBytes(&ct, "CT"));
-    ASSERT_TRUE(t->GetBytes(&tag, "TAG"));
-    size_t tag_len = tag.size();
-    if (t->HasAttribute("TAG_LEN")) {
-      // Legacy AEADs are MAC-then-encrypt and may include padding in the TAG
-      // field. TAG_LEN contains the actual size of the digest in that case.
-      std::string tag_len_str;
-      ASSERT_TRUE(t->GetAttribute(&tag_len_str, "TAG_LEN"));
-      tag_len = strtoul(tag_len_str.c_str(), nullptr, 10);
-      ASSERT_TRUE(tag_len);
-    }
-
-    bssl::ScopedEVP_AEAD_CTX ctx;
-    ASSERT_TRUE(EVP_AEAD_CTX_init_with_direction(
-        ctx.get(), aead(), key.data(), key.size(), tag_len, evp_aead_seal));
-
-    std::vector<uint8_t> out(in.size());
-    std::vector<uint8_t> out_tag(EVP_AEAD_max_overhead(aead()));
-    if (!t->HasAttribute("NO_SEAL") &&
-        !(aead_config.flags & kNondeterministic)) {
-      size_t out_tag_len;
-      ASSERT_TRUE(EVP_AEAD_CTX_seal_scatter(
-          ctx.get(), out.data(), out_tag.data(), &out_tag_len, out_tag.size(),
-          nonce.data(), nonce.size(), in.data(), in.size(), nullptr, 0,
-          ad.data(), ad.size()));
-      out_tag.resize(out_tag_len);
-
-      ASSERT_EQ(out.size(), ct.size());
-      ASSERT_EQ(out_tag.size(), tag.size());
-      EXPECT_EQ(Bytes(ct), Bytes(out.data(), ct.size()));
-      EXPECT_EQ(Bytes(tag), Bytes(out_tag.data(), tag.size()));
-    } else {
-      out.resize(ct.size());
-      out_tag.resize(tag.size());
-      OPENSSL_memcpy(out.data(), ct.data(), ct.size());
-      OPENSSL_memcpy(out_tag.data(), tag.data(), tag.size());
-    }
-
-    // The "stateful" AEADs for implementing pre-AEAD cipher suites need to be
-    // reset after each operation.
-    ctx.Reset();
-    ASSERT_TRUE(EVP_AEAD_CTX_init_with_direction(
-        ctx.get(), aead(), key.data(), key.size(), tag_len, evp_aead_open));
-
-    std::vector<uint8_t> out2(out.size());
-    int ret = EVP_AEAD_CTX_open_gather(
-        ctx.get(), out2.data(), nonce.data(), nonce.size(), out.data(),
-        out.size(), out_tag.data(), out_tag.size(), ad.data(), ad.size());
-
-    // Skip decryption for AEADs that don't implement open_gather().
-    if (!ret) {
-      uint32_t err = ERR_peek_error();
-      if (ERR_GET_LIB(err) == ERR_LIB_CIPHER &&
-          ERR_GET_REASON(err) == CIPHER_R_CTRL_NOT_IMPLEMENTED) {
-        t->SkipCurrent();
-        return;
-      }
-    }
-
-    if (t->HasAttribute("FAILS")) {
-      ASSERT_FALSE(ret) << "Decrypted bad data";
-      ERR_clear_error();
-      return;
-    }
-
-    ASSERT_TRUE(ret) << "Failed to decrypt: "
-                     << ERR_reason_error_string(ERR_get_error());
-    EXPECT_EQ(Bytes(in), Bytes(out2));
-
-    // The "stateful" AEADs for implementing pre-AEAD cipher suites need to be
-    // reset after each operation.
-    ctx.Reset();
-    ASSERT_TRUE(EVP_AEAD_CTX_init_with_direction(
-        ctx.get(), aead(), key.data(), key.size(), tag_len, evp_aead_open));
-
-    // Garbage at the end isn't ignored.
-    out_tag.push_back(0);
-    ASSERT_EQ(out2.size(), out.size());
-    EXPECT_FALSE(EVP_AEAD_CTX_open_gather(
-        ctx.get(), out2.data(), nonce.data(), nonce.size(), out.data(),
-        out.size(), out_tag.data(), out_tag.size(), ad.data(), ad.size()))
-        << "Decrypted bad data with trailing garbage.";
-    ERR_clear_error();
-
-    // The "stateful" AEADs for implementing pre-AEAD cipher suites need to be
-    // reset after each operation.
-    ctx.Reset();
-    ASSERT_TRUE(EVP_AEAD_CTX_init_with_direction(
-        ctx.get(), aead(), key.data(), key.size(), tag_len, evp_aead_open));
-
-    // Verify integrity is checked.
-    out_tag[0] ^= 0x80;
-    out_tag.resize(out_tag.size() - 1);
-    ASSERT_EQ(out2.size(), out.size());
-    EXPECT_FALSE(EVP_AEAD_CTX_open_gather(
-        ctx.get(), out2.data(), nonce.data(), nonce.size(), out.data(),
-        out.size(), out_tag.data(), out_tag.size(), ad.data(), ad.size()))
-        << "Decrypted bad data with corrupted byte.";
-    ERR_clear_error();
-
-    ctx.Reset();
-    ASSERT_TRUE(EVP_AEAD_CTX_init_with_direction(
-        ctx.get(), aead(), key.data(), key.size(), tag_len, evp_aead_open));
-
-    // Check edge case for tag length.
-    EXPECT_FALSE(EVP_AEAD_CTX_open_gather(
-        ctx.get(), out2.data(), nonce.data(), nonce.size(), out.data(),
-        out.size(), out_tag.data(), 0, ad.data(), ad.size()))
-        << "Decrypted bad data with corrupted byte.";
-    ERR_clear_error();
-  });
-}
-
-TEST_P(PerAEADTest, CleanupAfterInitFailure) {
-  uint8_t key[EVP_AEAD_MAX_KEY_LENGTH];
-  OPENSSL_memset(key, 0, sizeof(key));
-  const size_t key_len = EVP_AEAD_key_length(aead());
-  ASSERT_GE(sizeof(key), key_len);
-
-  EVP_AEAD_CTX ctx;
-  ASSERT_FALSE(EVP_AEAD_CTX_init(
-      &ctx, aead(), key, key_len,
-      9999 /* a silly tag length to trigger an error */, NULL /* ENGINE */));
-  ERR_clear_error();
-
-  // Running a second, failed _init should not cause a memory leak.
-  ASSERT_FALSE(EVP_AEAD_CTX_init(
-      &ctx, aead(), key, key_len,
-      9999 /* a silly tag length to trigger an error */, NULL /* ENGINE */));
-  ERR_clear_error();
-
-  // Calling _cleanup on an |EVP_AEAD_CTX| after a failed _init should be a
-  // no-op.
-  EVP_AEAD_CTX_cleanup(&ctx);
-}
-
-TEST_P(PerAEADTest, TruncatedTags) {
-  if (!(GetParam().flags & kCanTruncateTags)) {
-    return;
-  }
-
-  uint8_t key[EVP_AEAD_MAX_KEY_LENGTH];
-  OPENSSL_memset(key, 0, sizeof(key));
-  const size_t key_len = EVP_AEAD_key_length(aead());
-  ASSERT_GE(sizeof(key), key_len);
-
-  uint8_t nonce[EVP_AEAD_MAX_NONCE_LENGTH];
-  OPENSSL_memset(nonce, 0, sizeof(nonce));
-  const size_t nonce_len = EVP_AEAD_nonce_length(aead());
-  ASSERT_GE(sizeof(nonce), nonce_len);
-
-  const size_t tag_len = MinimumTagLength(GetParam().flags);
-  bssl::ScopedEVP_AEAD_CTX ctx;
-  ASSERT_TRUE(EVP_AEAD_CTX_init(ctx.get(), aead(), key, key_len, tag_len,
-                                NULL /* ENGINE */));
-
-  const uint8_t plaintext[1] = {'A'};
-
-  uint8_t ciphertext[128];
-  size_t ciphertext_len;
-  constexpr uint8_t kSentinel = 42;
-  OPENSSL_memset(ciphertext, kSentinel, sizeof(ciphertext));
-
-  ASSERT_TRUE(EVP_AEAD_CTX_seal(ctx.get(), ciphertext, &ciphertext_len,
-                                sizeof(ciphertext), nonce, nonce_len, plaintext,
-                                sizeof(plaintext), nullptr /* ad */, 0));
-
-  for (size_t i = ciphertext_len; i < sizeof(ciphertext); i++) {
-    // Sealing must not write past where it said it did.
-    EXPECT_EQ(kSentinel, ciphertext[i])
-        << "Sealing wrote off the end of the buffer.";
-  }
-
-  const size_t overhead_used = ciphertext_len - sizeof(plaintext);
-  const size_t expected_overhead =
-      tag_len + EVP_AEAD_max_overhead(aead()) - EVP_AEAD_max_tag_len(aead());
-  EXPECT_EQ(overhead_used, expected_overhead)
-      << "AEAD is probably ignoring request to truncate tags.";
-
-  uint8_t plaintext2[sizeof(plaintext) + 16];
-  OPENSSL_memset(plaintext2, kSentinel, sizeof(plaintext2));
-
-  size_t plaintext2_len;
-  ASSERT_TRUE(EVP_AEAD_CTX_open(
-      ctx.get(), plaintext2, &plaintext2_len, sizeof(plaintext2), nonce,
-      nonce_len, ciphertext, ciphertext_len, nullptr /* ad */, 0))
-      << "Opening with truncated tag didn't work.";
-
-  for (size_t i = plaintext2_len; i < sizeof(plaintext2); i++) {
-    // Likewise, opening should also stay within bounds.
-    EXPECT_EQ(kSentinel, plaintext2[i])
-        << "Opening wrote off the end of the buffer.";
-  }
-
-  EXPECT_EQ(Bytes(plaintext), Bytes(plaintext2, plaintext2_len));
-}
-
-TEST_P(PerAEADTest, AliasedBuffers) {
-  if (GetParam().flags & kLimitedImplementation) {
-    return;
-  }
-
-  const size_t key_len = EVP_AEAD_key_length(aead());
-  const size_t nonce_len = EVP_AEAD_nonce_length(aead());
-  const size_t max_overhead = EVP_AEAD_max_overhead(aead());
-
-  std::vector<uint8_t> key(key_len, 'a');
-  bssl::ScopedEVP_AEAD_CTX ctx;
-  ASSERT_TRUE(EVP_AEAD_CTX_init(ctx.get(), aead(), key.data(), key_len,
-                                EVP_AEAD_DEFAULT_TAG_LENGTH, nullptr));
-
-  static const uint8_t kPlaintext[260] =
-      "testing123456testing123456testing123456testing123456testing123456testing"
-      "123456testing123456testing123456testing123456testing123456testing123456t"
-      "esting123456testing123456testing123456testing123456testing123456testing1"
-      "23456testing123456testing123456testing12345";
-  const std::vector<size_t> offsets = {
-      0,  1,  2,  8,  15, 16,  17,  31,  32,  33,  63,
-      64, 65, 95, 96, 97, 127, 128, 129, 255, 256, 257,
-  };
-
-  std::vector<uint8_t> nonce(nonce_len, 'b');
-  std::vector<uint8_t> valid_encryption(sizeof(kPlaintext) + max_overhead);
-  size_t valid_encryption_len;
-  ASSERT_TRUE(EVP_AEAD_CTX_seal(
-      ctx.get(), valid_encryption.data(), &valid_encryption_len,
-      sizeof(kPlaintext) + max_overhead, nonce.data(), nonce_len, kPlaintext,
-      sizeof(kPlaintext), nullptr, 0))
-      << "EVP_AEAD_CTX_seal failed with disjoint buffers.";
-
-  // Test with out != in which we expect to fail.
-  std::vector<uint8_t> buffer(2 + valid_encryption_len);
-  uint8_t *in = buffer.data() + 1;
-  uint8_t *out1 = buffer.data();
-  uint8_t *out2 = buffer.data() + 2;
-
-  OPENSSL_memcpy(in, kPlaintext, sizeof(kPlaintext));
-  size_t out_len;
-  EXPECT_FALSE(EVP_AEAD_CTX_seal(
-      ctx.get(), out1 /* in - 1 */, &out_len, sizeof(kPlaintext) + max_overhead,
-      nonce.data(), nonce_len, in, sizeof(kPlaintext), nullptr, 0));
-  EXPECT_FALSE(EVP_AEAD_CTX_seal(
-      ctx.get(), out2 /* in + 1 */, &out_len, sizeof(kPlaintext) + max_overhead,
-      nonce.data(), nonce_len, in, sizeof(kPlaintext), nullptr, 0));
-  ERR_clear_error();
-
-  OPENSSL_memcpy(in, valid_encryption.data(), valid_encryption_len);
-  EXPECT_FALSE(EVP_AEAD_CTX_open(ctx.get(), out1 /* in - 1 */, &out_len,
-                                 valid_encryption_len, nonce.data(), nonce_len,
-                                 in, valid_encryption_len, nullptr, 0));
-  EXPECT_FALSE(EVP_AEAD_CTX_open(ctx.get(), out2 /* in + 1 */, &out_len,
-                                 valid_encryption_len, nonce.data(), nonce_len,
-                                 in, valid_encryption_len, nullptr, 0));
-  ERR_clear_error();
-
-  // Test with out == in, which we expect to work.
-  OPENSSL_memcpy(in, kPlaintext, sizeof(kPlaintext));
-
-  ASSERT_TRUE(EVP_AEAD_CTX_seal(ctx.get(), in, &out_len,
-                                sizeof(kPlaintext) + max_overhead, nonce.data(),
-                                nonce_len, in, sizeof(kPlaintext), nullptr, 0));
-
-  if (!(GetParam().flags & kNondeterministic)) {
-    EXPECT_EQ(Bytes(valid_encryption.data(), valid_encryption_len),
-              Bytes(in, out_len));
-  }
-
-  OPENSSL_memcpy(in, valid_encryption.data(), valid_encryption_len);
-  ASSERT_TRUE(EVP_AEAD_CTX_open(ctx.get(), in, &out_len, valid_encryption_len,
-                                nonce.data(), nonce_len, in,
-                                valid_encryption_len, nullptr, 0));
-  EXPECT_EQ(Bytes(kPlaintext), Bytes(in, out_len));
-}
-
-TEST_P(PerAEADTest, UnalignedInput) {
-  alignas(16) uint8_t key[EVP_AEAD_MAX_KEY_LENGTH + 1];
-  alignas(16) uint8_t nonce[EVP_AEAD_MAX_NONCE_LENGTH + 1];
-  alignas(16) uint8_t plaintext[32 + 1];
-  alignas(16) uint8_t ad[32 + 1];
-  OPENSSL_memset(key, 'K', sizeof(key));
-  OPENSSL_memset(nonce, 'N', sizeof(nonce));
-  OPENSSL_memset(plaintext, 'P', sizeof(plaintext));
-  OPENSSL_memset(ad, 'A', sizeof(ad));
-  const size_t key_len = EVP_AEAD_key_length(aead());
-  ASSERT_GE(sizeof(key) - 1, key_len);
-  const size_t nonce_len = EVP_AEAD_nonce_length(aead());
-  ASSERT_GE(sizeof(nonce) - 1, nonce_len);
-  const size_t ad_len = RequiredADLength(GetParam().flags) != 0
-                            ? RequiredADLength(GetParam().flags)
-                            : sizeof(ad) - 1;
-  ASSERT_GE(sizeof(ad) - 1, ad_len);
-
-  // Encrypt some input.
-  bssl::ScopedEVP_AEAD_CTX ctx;
-  ASSERT_TRUE(EVP_AEAD_CTX_init_with_direction(
-      ctx.get(), aead(), key + 1, key_len, EVP_AEAD_DEFAULT_TAG_LENGTH,
-      evp_aead_seal));
-  alignas(16) uint8_t ciphertext[sizeof(plaintext) + EVP_AEAD_MAX_OVERHEAD];
-  size_t ciphertext_len;
-  ASSERT_TRUE(EVP_AEAD_CTX_seal(ctx.get(), ciphertext + 1, &ciphertext_len,
-                                sizeof(ciphertext) - 1, nonce + 1, nonce_len,
-                                plaintext + 1, sizeof(plaintext) - 1, ad + 1,
-                                ad_len));
-
-  // It must successfully decrypt.
-  alignas(16) uint8_t out[sizeof(ciphertext)];
-  ctx.Reset();
-  ASSERT_TRUE(EVP_AEAD_CTX_init_with_direction(
-      ctx.get(), aead(), key + 1, key_len, EVP_AEAD_DEFAULT_TAG_LENGTH,
-      evp_aead_open));
-  size_t out_len;
-  ASSERT_TRUE(EVP_AEAD_CTX_open(ctx.get(), out + 1, &out_len, sizeof(out) - 1,
-                                nonce + 1, nonce_len, ciphertext + 1,
-                                ciphertext_len, ad + 1, ad_len));
-  EXPECT_EQ(Bytes(plaintext + 1, sizeof(plaintext) - 1),
-            Bytes(out + 1, out_len));
-}
-
-TEST_P(PerAEADTest, Overflow) {
-  uint8_t key[EVP_AEAD_MAX_KEY_LENGTH];
-  OPENSSL_memset(key, 'K', sizeof(key));
-
-  bssl::ScopedEVP_AEAD_CTX ctx;
-  const size_t max_tag_len = EVP_AEAD_max_tag_len(aead());
-  ASSERT_TRUE(EVP_AEAD_CTX_init_with_direction(ctx.get(), aead(), key,
-                                               EVP_AEAD_key_length(aead()),
-                                               max_tag_len, evp_aead_seal));
-
-  uint8_t plaintext[1] = {0};
-  uint8_t ciphertext[1024] = {0};
-  size_t ciphertext_len;
-  // The AEAD must not overflow when calculating the ciphertext length.
-  ASSERT_FALSE(EVP_AEAD_CTX_seal(
-      ctx.get(), ciphertext, &ciphertext_len, sizeof(ciphertext), nullptr, 0,
-      plaintext, std::numeric_limits<size_t>::max() - max_tag_len + 1, nullptr,
-      0));
-  ERR_clear_error();
-
-  // (Can't test the scatter interface because it'll attempt to zero the output
-  // buffer on error and the primary output buffer is implicitly the same size
-  // as the input.)
-}
-
-TEST_P(PerAEADTest, InvalidNonceLength) {
-  size_t valid_nonce_len = EVP_AEAD_nonce_length(aead());
-  std::vector<size_t> nonce_lens;
-  if (valid_nonce_len != 0) {
-    // Other than the implicit IV TLS "AEAD"s, none of our AEADs allow empty
-    // nonces. In particular, although AES-GCM was incorrectly specified with
-    // variable-length nonces, it does not allow the empty nonce.
-    nonce_lens.push_back(0);
-  }
-  if (!(GetParam().flags & kVariableNonce)) {
-    nonce_lens.push_back(valid_nonce_len + 1);
-    if (valid_nonce_len != 0) {
-      nonce_lens.push_back(valid_nonce_len - 1);
-    }
-  }
-
-  static const uint8_t kZeros[EVP_AEAD_MAX_KEY_LENGTH] = {0};
-  const size_t ad_len = RequiredADLength(GetParam().flags) != 0
-                            ? RequiredADLength(GetParam().flags)
-                            : 16;
-  ASSERT_LE(ad_len, sizeof(kZeros));
-
-  for (size_t nonce_len : nonce_lens) {
-    SCOPED_TRACE(nonce_len);
-    uint8_t buf[256];
-    size_t len;
-    std::vector<uint8_t> nonce(nonce_len);
-    bssl::ScopedEVP_AEAD_CTX ctx;
-    ASSERT_TRUE(EVP_AEAD_CTX_init_with_direction(
-        ctx.get(), aead(), kZeros, EVP_AEAD_key_length(aead()),
-        EVP_AEAD_DEFAULT_TAG_LENGTH, evp_aead_seal));
-
-    EXPECT_FALSE(EVP_AEAD_CTX_seal(ctx.get(), buf, &len, sizeof(buf),
-                                   nonce.data(), nonce.size(), nullptr /* in */,
-                                   0, kZeros /* ad */, ad_len));
-    uint32_t err = ERR_get_error();
-    // TODO(davidben): Merge these errors. https://crbug.com/boringssl/129.
-    if (!ErrorEquals(err, ERR_LIB_CIPHER, CIPHER_R_UNSUPPORTED_NONCE_SIZE)) {
-      EXPECT_TRUE(
-          ErrorEquals(err, ERR_LIB_CIPHER, CIPHER_R_INVALID_NONCE_SIZE));
-    }
-
-    ctx.Reset();
-    ASSERT_TRUE(EVP_AEAD_CTX_init_with_direction(
-        ctx.get(), aead(), kZeros, EVP_AEAD_key_length(aead()),
-        EVP_AEAD_DEFAULT_TAG_LENGTH, evp_aead_open));
-    EXPECT_FALSE(EVP_AEAD_CTX_open(ctx.get(), buf, &len, sizeof(buf),
-                                   nonce.data(), nonce.size(), kZeros /* in */,
-                                   sizeof(kZeros), kZeros /* ad */, ad_len));
-    err = ERR_get_error();
-    if (!ErrorEquals(err, ERR_LIB_CIPHER, CIPHER_R_UNSUPPORTED_NONCE_SIZE)) {
-      EXPECT_TRUE(
-          ErrorEquals(err, ERR_LIB_CIPHER, CIPHER_R_INVALID_NONCE_SIZE));
-    }
-  }
-}
-
-#if defined(SUPPORTS_ABI_TEST)
-// CHECK_ABI can't pass enums, i.e. |evp_aead_seal| and |evp_aead_open|. Thus
-// these two wrappers.
-static int aead_ctx_init_for_seal(EVP_AEAD_CTX *ctx, const EVP_AEAD *aead,
-                                  const uint8_t *key, size_t key_len) {
-  return EVP_AEAD_CTX_init_with_direction(ctx, aead, key, key_len, 0,
-                                          evp_aead_seal);
-}
-
-static int aead_ctx_init_for_open(EVP_AEAD_CTX *ctx, const EVP_AEAD *aead,
-                                  const uint8_t *key, size_t key_len) {
-  return EVP_AEAD_CTX_init_with_direction(ctx, aead, key, key_len, 0,
-                                          evp_aead_open);
-}
-
-// CHECK_ABI can pass, at most, eight arguments. Thus these wrappers that
-// figure out the output length from the input length, and take the nonce length
-// from the configuration of the AEAD.
-static int aead_ctx_seal(EVP_AEAD_CTX *ctx, uint8_t *out_ciphertext,
-                         size_t *out_ciphertext_len, const uint8_t *nonce,
-                         const uint8_t *plaintext, size_t plaintext_len,
-                         const uint8_t *ad, size_t ad_len) {
-  const size_t nonce_len = EVP_AEAD_nonce_length(EVP_AEAD_CTX_aead(ctx));
-  return EVP_AEAD_CTX_seal(ctx, out_ciphertext, out_ciphertext_len,
-                           plaintext_len + EVP_AEAD_MAX_OVERHEAD, nonce,
-                           nonce_len, plaintext, plaintext_len, ad, ad_len);
-}
-
-static int aead_ctx_open(EVP_AEAD_CTX *ctx, uint8_t *out_plaintext,
-                         size_t *out_plaintext_len, const uint8_t *nonce,
-                         const uint8_t *ciphertext, size_t ciphertext_len,
-                         const uint8_t *ad, size_t ad_len) {
-  const size_t nonce_len = EVP_AEAD_nonce_length(EVP_AEAD_CTX_aead(ctx));
-  return EVP_AEAD_CTX_open(ctx, out_plaintext, out_plaintext_len,
-                           ciphertext_len, nonce, nonce_len, ciphertext,
-                           ciphertext_len, ad, ad_len);
-}
-
-TEST_P(PerAEADTest, ABI) {
-  uint8_t key[EVP_AEAD_MAX_KEY_LENGTH];
-  OPENSSL_memset(key, 'K', sizeof(key));
-  const size_t key_len = EVP_AEAD_key_length(aead());
-  ASSERT_LE(key_len, sizeof(key));
-
-  bssl::ScopedEVP_AEAD_CTX ctx_seal;
-  ASSERT_TRUE(
-      CHECK_ABI(aead_ctx_init_for_seal, ctx_seal.get(), aead(), key, key_len));
-
-  bssl::ScopedEVP_AEAD_CTX ctx_open;
-  ASSERT_TRUE(
-      CHECK_ABI(aead_ctx_init_for_open, ctx_open.get(), aead(), key, key_len));
-
-  alignas(2) uint8_t plaintext[512];
-  OPENSSL_memset(plaintext, 'P', sizeof(plaintext));
-
-  alignas(2) uint8_t ad_buf[512];
-  OPENSSL_memset(ad_buf, 'A', sizeof(ad_buf));
-  const uint8_t *const ad = ad_buf + 1;
-  ASSERT_LE(RequiredADLength(GetParam().flags), sizeof(ad_buf) - 1);
-  const size_t ad_len = RequiredADLength(GetParam().flags) != 0
-                            ? RequiredADLength(GetParam().flags)
-                            : sizeof(ad_buf) - 1;
-
-  uint8_t nonce[EVP_AEAD_MAX_NONCE_LENGTH];
-  OPENSSL_memset(nonce, 'N', sizeof(nonce));
-  const size_t nonce_len = EVP_AEAD_nonce_length(aead());
-  ASSERT_LE(nonce_len, sizeof(nonce));
-
-  alignas(2) uint8_t ciphertext[sizeof(plaintext) + EVP_AEAD_MAX_OVERHEAD + 1];
-  size_t ciphertext_len;
-  // Knock plaintext, ciphertext, and AD off alignment and give odd lengths for
-  // plaintext and AD. This hopefully triggers any edge-cases in the assembly.
-  ASSERT_TRUE(CHECK_ABI(aead_ctx_seal, ctx_seal.get(), ciphertext + 1,
-                        &ciphertext_len, nonce, plaintext + 1,
-                        sizeof(plaintext) - 1, ad, ad_len));
-
-  alignas(2) uint8_t plaintext2[sizeof(ciphertext) + 1];
-  size_t plaintext2_len;
-  ASSERT_TRUE(CHECK_ABI(aead_ctx_open, ctx_open.get(), plaintext2 + 1,
-                        &plaintext2_len, nonce, ciphertext + 1, ciphertext_len,
-                        ad, ad_len));
-
-  EXPECT_EQ(Bytes(plaintext + 1, sizeof(plaintext) - 1),
-            Bytes(plaintext2 + 1, plaintext2_len));
-}
-
-TEST(ChaChaPoly1305Test, ABI) {
-  if (!chacha20_poly1305_asm_capable()) {
-    return;
-  }
-
-  auto buf = std::make_unique<uint8_t[]>(1024);
-  for (size_t len = 0; len <= 1024; len += 5) {
-    SCOPED_TRACE(len);
-    union chacha20_poly1305_open_data open_ctx = {};
-#if defined(OPENSSL_X86_64)
-    CHECK_ABI(chacha20_poly1305_open_sse41, buf.get(), buf.get(), len,
-              buf.get(), len % 128, &open_ctx);
-    if (CRYPTO_is_AVX2_capable() && CRYPTO_is_BMI2_capable()) {
-      CHECK_ABI(chacha20_poly1305_open_avx2, buf.get(), buf.get(), len,
-                buf.get(), len % 128, &open_ctx);
-    }
-#else
-    CHECK_ABI(chacha20_poly1305_open, buf.get(), buf.get(), len, buf.get(),
-              len % 128, &open_ctx);
-#endif
-  }
-
-  for (size_t len = 0; len <= 1024; len += 5) {
-    SCOPED_TRACE(len);
-    union chacha20_poly1305_seal_data seal_ctx = {};
-#if defined(OPENSSL_X86_64)
-    CHECK_ABI(chacha20_poly1305_seal_sse41, buf.get(), buf.get(), len,
-              buf.get(), len % 128, &seal_ctx);
-    if (CRYPTO_is_AVX2_capable() && CRYPTO_is_BMI2_capable()) {
-      CHECK_ABI(chacha20_poly1305_seal_avx2, buf.get(), buf.get(), len,
-                buf.get(), len % 128, &seal_ctx);
-    }
-#else
-    CHECK_ABI(chacha20_poly1305_seal, buf.get(), buf.get(), len, buf.get(),
-              len % 128, &seal_ctx);
-#endif
-  }
-}
-#endif  // SUPPORTS_ABI_TEST
-
-TEST(AEADTest, AESCCMLargeAD) {
-  static const std::vector<uint8_t> kKey(16, 'A');
-  static const std::vector<uint8_t> kNonce(13, 'N');
-  static const std::vector<uint8_t> kAD(65536, 'D');
-  static const std::vector<uint8_t> kPlaintext = {
-      0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
-      0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f};
-  static const std::vector<uint8_t> kCiphertext = {
-      0xa2, 0x12, 0x3f, 0x0b, 0x07, 0xd5, 0x02, 0xff,
-      0xa9, 0xcd, 0xa0, 0xf3, 0x69, 0x1c, 0x49, 0x0c};
-  static const std::vector<uint8_t> kTag = {0x4a, 0x31, 0x82, 0x96};
-
-  // Test AES-128-CCM-Bluetooth.
-  bssl::ScopedEVP_AEAD_CTX ctx;
-  ASSERT_TRUE(EVP_AEAD_CTX_init(ctx.get(), EVP_aead_aes_128_ccm_bluetooth(),
-                                kKey.data(), kKey.size(),
-                                EVP_AEAD_DEFAULT_TAG_LENGTH, nullptr));
-
-  std::vector<uint8_t> out(kCiphertext.size() + kTag.size());
-  size_t out_len;
-  EXPECT_TRUE(EVP_AEAD_CTX_seal(ctx.get(), out.data(), &out_len, out.size(),
-                                kNonce.data(), kNonce.size(), kPlaintext.data(),
-                                kPlaintext.size(), kAD.data(), kAD.size()));
-
-  ASSERT_EQ(out_len, kCiphertext.size() + kTag.size());
-  EXPECT_EQ(Bytes(kCiphertext), Bytes(out.data(), kCiphertext.size()));
-  EXPECT_EQ(Bytes(kTag), Bytes(out.data() + kCiphertext.size(), kTag.size()));
-
-  EXPECT_TRUE(EVP_AEAD_CTX_open(ctx.get(), out.data(), &out_len, out.size(),
-                                kNonce.data(), kNonce.size(), out.data(),
-                                out.size(), kAD.data(), kAD.size()));
-
-  ASSERT_EQ(out_len, kPlaintext.size());
-  EXPECT_EQ(Bytes(kPlaintext), Bytes(out.data(), kPlaintext.size()));
-}
-
-static void RunWycheproofTestCase(FileTest *t, const EVP_AEAD *aead) {
-  t->IgnoreInstruction("ivSize");
-
-  std::vector<uint8_t> aad, ct, iv, key, msg, tag;
-  ASSERT_TRUE(t->GetBytes(&aad, "aad"));
-  ASSERT_TRUE(t->GetBytes(&ct, "ct"));
-  ASSERT_TRUE(t->GetBytes(&iv, "iv"));
-  ASSERT_TRUE(t->GetBytes(&key, "key"));
-  ASSERT_TRUE(t->GetBytes(&msg, "msg"));
-  ASSERT_TRUE(t->GetBytes(&tag, "tag"));
-  std::string tag_size_str;
-  ASSERT_TRUE(t->GetInstruction(&tag_size_str, "tagSize"));
-  size_t tag_size = static_cast<size_t>(atoi(tag_size_str.c_str()));
-  ASSERT_EQ(0u, tag_size % 8);
-  tag_size /= 8;
-  WycheproofResult result;
-  ASSERT_TRUE(GetWycheproofResult(t, &result));
-
-  std::vector<uint8_t> ct_and_tag = ct;
-  ct_and_tag.insert(ct_and_tag.end(), tag.begin(), tag.end());
-
-  bssl::ScopedEVP_AEAD_CTX ctx;
-  ASSERT_TRUE(EVP_AEAD_CTX_init(ctx.get(), aead, key.data(), key.size(),
-                                tag_size, nullptr));
-  std::vector<uint8_t> out(msg.size());
-  size_t out_len;
-  // Wycheproof tags small AES-GCM IVs as "acceptable" and otherwise does not
-  // use it in AEADs. Any AES-GCM IV that isn't 96 bits is absurd, but our API
-  // supports those, so we treat SmallIv tests as valid.
-  if (result.IsValid({"SmallIv"})) {
-    // Decryption should succeed.
-    ASSERT_TRUE(EVP_AEAD_CTX_open(ctx.get(), out.data(), &out_len, out.size(),
-                                  iv.data(), iv.size(), ct_and_tag.data(),
-                                  ct_and_tag.size(), aad.data(), aad.size()));
-    EXPECT_EQ(Bytes(msg), Bytes(out.data(), out_len));
-
-    // Decryption in-place should succeed.
-    out = ct_and_tag;
-    ASSERT_TRUE(EVP_AEAD_CTX_open(ctx.get(), out.data(), &out_len, out.size(),
-                                  iv.data(), iv.size(), out.data(), out.size(),
-                                  aad.data(), aad.size()));
-    EXPECT_EQ(Bytes(msg), Bytes(out.data(), out_len));
-
-    // AEADs are deterministic, so encryption should produce the same result.
-    out.resize(ct_and_tag.size());
-    ASSERT_TRUE(EVP_AEAD_CTX_seal(ctx.get(), out.data(), &out_len, out.size(),
-                                  iv.data(), iv.size(), msg.data(), msg.size(),
-                                  aad.data(), aad.size()));
-    EXPECT_EQ(Bytes(ct_and_tag), Bytes(out.data(), out_len));
-
-    // Encrypt in-place.
-    out = msg;
-    out.resize(ct_and_tag.size());
-    ASSERT_TRUE(EVP_AEAD_CTX_seal(ctx.get(), out.data(), &out_len, out.size(),
-                                  iv.data(), iv.size(), out.data(), msg.size(),
-                                  aad.data(), aad.size()));
-    EXPECT_EQ(Bytes(ct_and_tag), Bytes(out.data(), out_len));
-  } else {
-    // Decryption should fail.
-    EXPECT_FALSE(EVP_AEAD_CTX_open(ctx.get(), out.data(), &out_len, out.size(),
-                                   iv.data(), iv.size(), ct_and_tag.data(),
-                                   ct_and_tag.size(), aad.data(), aad.size()));
-
-    // Decryption in-place should also fail.
-    out = ct_and_tag;
-    EXPECT_FALSE(EVP_AEAD_CTX_open(ctx.get(), out.data(), &out_len, out.size(),
-                                   iv.data(), iv.size(), out.data(), out.size(),
-                                   aad.data(), aad.size()));
-  }
-}
-
-TEST(AEADTest, WycheproofAESGCMSIV) {
-  FileTestGTest("third_party/wycheproof_testvectors/aes_gcm_siv_test.txt",
-                [](FileTest *t) {
-                  std::string key_size_str;
-                  ASSERT_TRUE(t->GetInstruction(&key_size_str, "keySize"));
-                  const EVP_AEAD *aead;
-                  switch (atoi(key_size_str.c_str())) {
-                    case 128:
-                      aead = EVP_aead_aes_128_gcm_siv();
-                      break;
-                    case 256:
-                      aead = EVP_aead_aes_256_gcm_siv();
-                      break;
-                    default:
-                      FAIL() << "Unknown key size: " << key_size_str;
-                  }
-
-                  RunWycheproofTestCase(t, aead);
-                });
-}
-
-TEST(AEADTest, WycheproofAESGCM) {
-  FileTestGTest("third_party/wycheproof_testvectors/aes_gcm_test.txt",
-                [](FileTest *t) {
-                  std::string key_size_str;
-                  ASSERT_TRUE(t->GetInstruction(&key_size_str, "keySize"));
-                  const EVP_AEAD *aead;
-                  switch (atoi(key_size_str.c_str())) {
-                    case 128:
-                      aead = EVP_aead_aes_128_gcm();
-                      break;
-                    case 192:
-                      aead = EVP_aead_aes_192_gcm();
-                      break;
-                    case 256:
-                      aead = EVP_aead_aes_256_gcm();
-                      break;
-                    default:
-                      FAIL() << "Unknown key size: " << key_size_str;
-                  }
-
-                  RunWycheproofTestCase(t, aead);
-                });
-}
-
-TEST(AEADTest, WycheproofChaCha20Poly1305) {
-  FileTestGTest("third_party/wycheproof_testvectors/chacha20_poly1305_test.txt",
-                [](FileTest *t) {
-                  t->IgnoreInstruction("keySize");
-                  RunWycheproofTestCase(t, EVP_aead_chacha20_poly1305());
-                });
-}
-
-TEST(AEADTest, WycheproofXChaCha20Poly1305) {
-  FileTestGTest(
-      "third_party/wycheproof_testvectors/xchacha20_poly1305_test.txt",
-      [](FileTest *t) {
-        t->IgnoreInstruction("keySize");
-        RunWycheproofTestCase(t, EVP_aead_xchacha20_poly1305());
-      });
-}
-
-TEST(AEADTest, WycheproofAESEAX) {
-  FileTestGTest(
-      "third_party/wycheproof_testvectors/aes_eax_test.txt", [](FileTest *t) {
-        std::string key_size_str;
-        ASSERT_TRUE(t->GetInstruction(&key_size_str, "keySize"));
-        const EVP_AEAD *aead;
-        switch (atoi(key_size_str.c_str())) {
-          case 128:
-            aead = EVP_aead_aes_128_eax();
-            break;
-          case 256:
-            aead = EVP_aead_aes_256_eax();
-            break;
-          default:
-            t->SkipCurrent();
-            GTEST_SKIP() << "Unsupported key size: " << key_size_str;
-        }
-
-        std::string nonce_size_str;
-        ASSERT_TRUE(t->GetInstruction(&nonce_size_str, "ivSize"));
-        // Skip tests with invalid nonce size.
-        if (nonce_size_str != "96" && nonce_size_str != "128") {
-          t->SkipCurrent();
-          GTEST_SKIP() << "Unsupported nonce size: " << nonce_size_str;
-        }
-
-        RunWycheproofTestCase(t, aead);
-      });
-}
-
-TEST(AEADTest, FreeNull) { EVP_AEAD_CTX_free(nullptr); }
-
-}  // namespace
diff --git a/src/crypto/cipher/asm/aes128gcmsiv-x86_64.pl b/src/crypto/cipher/asm/aes128gcmsiv-x86_64.pl
deleted file mode 100644
index dec73fc..0000000
--- a/src/crypto/cipher/asm/aes128gcmsiv-x86_64.pl
+++ /dev/null
@@ -1,2274 +0,0 @@
-#!/usr/bin/env perl
-
-# Copyright (c) 2017, Shay Gueron.
-# Copyright 2017 The BoringSSL Authors
-#
-# 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
-#
-#     https://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.
-
-use warnings FATAL => 'all';
-
-$flavour = shift;
-$output  = shift;
-if ($flavour =~ /\./) { $output = $flavour; undef $flavour; }
-
-$win64=0; $win64=1 if ($flavour =~ /[nm]asm|mingw64/ || $output =~ /\.asm$/);
-
-$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
-( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or
-( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
-die "can't locate x86_64-xlate.pl";
-
-open OUT,"| \"$^X\" \"$xlate\" $flavour \"$output\"";
-*STDOUT=*OUT;
-
-$code.=<<___;
-.section .rodata
-
-.align 16
-one:
-.quad 1,0
-two:
-.quad 2,0
-three:
-.quad 3,0
-four:
-.quad 4,0
-five:
-.quad 5,0
-six:
-.quad 6,0
-seven:
-.quad 7,0
-eight:
-.quad 8,0
-
-OR_MASK:
-.long 0x00000000,0x00000000,0x00000000,0x80000000
-poly:
-.quad 0x1, 0xc200000000000000
-mask:
-.long 0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d
-con1:
-.long 1,1,1,1
-con2:
-.long 0x1b,0x1b,0x1b,0x1b
-con3:
-.byte -1,-1,-1,-1,-1,-1,-1,-1,4,5,6,7,4,5,6,7
-and_mask:
-.long 0,0xffffffff, 0xffffffff, 0xffffffff
-___
-
-$code.=<<___;
-.text
-___
-
-sub gfmul {
-  #########################
-  # a = T
-  # b = TMP0 - remains unchanged
-  # res = T
-  # uses also TMP1,TMP2,TMP3,TMP4
-  # __m128i GFMUL(__m128i A, __m128i B);
-
-  my $T = "%xmm0";
-  my $TMP0 = "%xmm1";
-  my $TMP1 = "%xmm2";
-  my $TMP2 = "%xmm3";
-  my $TMP3 = "%xmm4";
-  my $TMP4 = "%xmm5";
-
-  $code.=<<___;
-.type GFMUL,\@abi-omnipotent
-.align 16
-GFMUL:
-.cfi_startproc
-    vpclmulqdq  \$0x00, $TMP0, $T, $TMP1
-    vpclmulqdq  \$0x11, $TMP0, $T, $TMP4
-    vpclmulqdq  \$0x10, $TMP0, $T, $TMP2
-    vpclmulqdq  \$0x01, $TMP0, $T, $TMP3
-    vpxor       $TMP3, $TMP2, $TMP2
-    vpslldq     \$8, $TMP2, $TMP3
-    vpsrldq     \$8, $TMP2, $TMP2
-    vpxor       $TMP3, $TMP1, $TMP1
-    vpxor       $TMP2, $TMP4, $TMP4
-
-    vpclmulqdq  \$0x10, poly(%rip), $TMP1, $TMP2
-    vpshufd     \$78, $TMP1, $TMP3
-    vpxor       $TMP3, $TMP2, $TMP1
-
-    vpclmulqdq  \$0x10, poly(%rip), $TMP1, $TMP2
-    vpshufd     \$78, $TMP1, $TMP3
-    vpxor       $TMP3, $TMP2, $TMP1
-
-    vpxor       $TMP4, $TMP1, $T
-    ret
-.cfi_endproc
-.size GFMUL, .-GFMUL
-___
-}
-gfmul();
-
-sub aesgcmsiv_htable_init {
-  # aesgcmsiv_htable_init writes an eight-entry table of powers of |H| to
-  # |out_htable|.
-  # void aesgcmsiv_htable_init(uint8_t out_htable[16*8], uint8_t *H);
-
-  my $Htbl = "%rdi";
-  my $H = "%rsi";
-  my $T = "%xmm0";
-  my $TMP0 = "%xmm1";
-
-$code.=<<___;
-.globl aesgcmsiv_htable_init
-.type aesgcmsiv_htable_init,\@function,2
-.align 16
-aesgcmsiv_htable_init:
-.cfi_startproc
-    _CET_ENDBR
-    vmovdqa ($H), $T
-    vmovdqa $T, $TMP0
-    vmovdqa $T, ($Htbl)      # H
-    call GFMUL
-    vmovdqa $T, 16($Htbl)    # H^2
-    call GFMUL
-    vmovdqa $T, 32($Htbl)    # H^3
-    call GFMUL
-    vmovdqa $T, 48($Htbl)    # H^4
-    call GFMUL
-    vmovdqa $T, 64($Htbl)    # H^5
-    call GFMUL
-    vmovdqa $T, 80($Htbl)    # H^6
-    call GFMUL
-    vmovdqa $T, 96($Htbl)    # H^7
-    call GFMUL
-    vmovdqa $T, 112($Htbl)   # H^8
-    ret
-.cfi_endproc
-.size aesgcmsiv_htable_init, .-aesgcmsiv_htable_init
-___
-}
-aesgcmsiv_htable_init();
-
-sub aesgcmsiv_htable6_init {
-  # aesgcmsiv_htable6_init writes a six-entry table of powers of |H| to
-  # |out_htable|.
-  # void aesgcmsiv_htable6_init(uint8_t out_htable[16*6], uint8_t *H);
-  #
-  my $Htbl = "%rdi";
-  my $H = "%rsi";
-  my $T = "%xmm0";
-  my $TMP0 = "%xmm1";
-
-  $code.=<<___;
-.globl aesgcmsiv_htable6_init
-.type aesgcmsiv_htable6_init,\@function,2
-.align 16
-aesgcmsiv_htable6_init:
-.cfi_startproc
-    _CET_ENDBR
-    vmovdqa ($H), $T
-    vmovdqa $T, $TMP0
-    vmovdqa $T, ($Htbl)      # H
-    call GFMUL
-    vmovdqa $T, 16($Htbl)    # H^2
-    call GFMUL
-    vmovdqa $T, 32($Htbl)    # H^3
-    call GFMUL
-    vmovdqa $T, 48($Htbl)    # H^4
-    call GFMUL
-    vmovdqa $T, 64($Htbl)    # H^5
-    call GFMUL
-    vmovdqa $T, 80($Htbl)    # H^6
-    ret
-.cfi_endproc
-.size aesgcmsiv_htable6_init, .-aesgcmsiv_htable6_init
-___
-}
-aesgcmsiv_htable6_init();
-
-sub aesgcmsiv_htable_polyval {
-  # void aesgcmsiv_htable_polyval(uint8_t Htbl[16*8], uint8_t *MSG, uint64_t LEN, uint8_t *T);
-  # parameter 1: %rdi     Htable  - pointer to Htable
-  # parameter 2: %rsi     INp     - pointer to input
-  # parameter 3: %rdx     LEN     - length of BUFFER in bytes
-  # parameter 4: %rcx     T       - pointer to POLYVAL output
-
-  my $DATA = "%xmm0";
-  my $hlp0 = "%r11";
-  my $Htbl = "%rdi";
-  my $inp = "%rsi";
-  my $len = "%rdx";
-  my $TMP0 = "%xmm3";
-  my $TMP1 = "%xmm4";
-  my $TMP2 = "%xmm5";
-  my $TMP3 = "%xmm6";
-  my $TMP4 = "%xmm7";
-  my $Tp = "%rcx";
-  my $T = "%xmm1";
-  my $Xhi = "%xmm9";
-
-  my $SCHOOLBOOK_AAD = sub {
-    my ($i)=@_;
-    return <<___;
-    vpclmulqdq \$0x01, ${\eval(16*$i)}($Htbl), $DATA, $TMP3
-    vpxor $TMP3, $TMP2, $TMP2
-    vpclmulqdq \$0x00, ${\eval(16*$i)}($Htbl), $DATA, $TMP3
-    vpxor $TMP3, $TMP0, $TMP0
-    vpclmulqdq \$0x11, ${\eval(16*$i)}($Htbl), $DATA, $TMP3
-    vpxor $TMP3, $TMP1, $TMP1
-    vpclmulqdq \$0x10, ${\eval(16*$i)}($Htbl), $DATA, $TMP3
-    vpxor $TMP3, $TMP2, $TMP2
-___
-  };
-
-  $code.=<<___;
-.globl aesgcmsiv_htable_polyval
-.type aesgcmsiv_htable_polyval,\@function,4
-.align 16
-aesgcmsiv_htable_polyval:
-.cfi_startproc
-    _CET_ENDBR
-    test  $len, $len
-    jnz   .Lhtable_polyval_start
-    ret
-
-.Lhtable_polyval_start:
-    vzeroall
-
-    # We hash 8 blocks each iteration. If the total number of blocks is not a
-    # multiple of 8, we first hash the leading n%8 blocks.
-    movq $len, $hlp0
-    andq \$127, $hlp0
-
-    jz .Lhtable_polyval_no_prefix
-
-    vpxor $Xhi, $Xhi, $Xhi
-    vmovdqa ($Tp), $T
-    sub $hlp0, $len
-
-    sub \$16, $hlp0
-
-    # hash first prefix block
-    vmovdqu ($inp), $DATA
-    vpxor $T, $DATA, $DATA
-
-    vpclmulqdq \$0x01, ($Htbl,$hlp0), $DATA, $TMP2
-    vpclmulqdq \$0x00, ($Htbl,$hlp0), $DATA, $TMP0
-    vpclmulqdq \$0x11, ($Htbl,$hlp0), $DATA, $TMP1
-    vpclmulqdq \$0x10, ($Htbl,$hlp0), $DATA, $TMP3
-    vpxor $TMP3, $TMP2, $TMP2
-
-    lea 16($inp), $inp
-    test $hlp0, $hlp0
-    jnz .Lhtable_polyval_prefix_loop
-    jmp .Lhtable_polyval_prefix_complete
-
-    # hash remaining prefix bocks (up to 7 total prefix blocks)
-.align 64
-.Lhtable_polyval_prefix_loop:
-    sub \$16, $hlp0
-
-    vmovdqu ($inp), $DATA           # next data block
-
-    vpclmulqdq  \$0x00, ($Htbl,$hlp0), $DATA, $TMP3
-    vpxor       $TMP3, $TMP0, $TMP0
-    vpclmulqdq  \$0x11, ($Htbl,$hlp0), $DATA, $TMP3
-    vpxor       $TMP3, $TMP1, $TMP1
-    vpclmulqdq  \$0x01, ($Htbl,$hlp0), $DATA, $TMP3
-    vpxor       $TMP3, $TMP2, $TMP2
-    vpclmulqdq  \$0x10, ($Htbl,$hlp0), $DATA, $TMP3
-    vpxor       $TMP3, $TMP2, $TMP2
-
-    test $hlp0, $hlp0
-
-    lea 16($inp), $inp
-
-    jnz .Lhtable_polyval_prefix_loop
-
-.Lhtable_polyval_prefix_complete:
-    vpsrldq \$8, $TMP2, $TMP3
-    vpslldq \$8, $TMP2, $TMP2
-
-    vpxor $TMP3, $TMP1, $Xhi
-    vpxor $TMP2, $TMP0, $T
-
-    jmp .Lhtable_polyval_main_loop
-
-.Lhtable_polyval_no_prefix:
-    # At this point we know the number of blocks is a multiple of 8. However,
-    # the reduction in the main loop includes a multiplication by x^(-128). In
-    # order to counter this, the existing tag needs to be multipled by x^128.
-    # In practice, this just means that it is loaded into $Xhi, not $T.
-    vpxor $T, $T, $T
-    vmovdqa ($Tp), $Xhi
-
-.align 64
-.Lhtable_polyval_main_loop:
-    sub \$0x80, $len
-    jb .Lhtable_polyval_out
-
-    vmovdqu 16*7($inp), $DATA      # Ii
-
-    vpclmulqdq \$0x01, ($Htbl), $DATA, $TMP2
-    vpclmulqdq \$0x00, ($Htbl), $DATA, $TMP0
-    vpclmulqdq \$0x11, ($Htbl), $DATA, $TMP1
-    vpclmulqdq \$0x10, ($Htbl), $DATA, $TMP3
-    vpxor $TMP3, $TMP2, $TMP2
-
-    #########################################################
-    vmovdqu 16*6($inp), $DATA
-    ${\$SCHOOLBOOK_AAD->(1)}
-
-    #########################################################
-    vmovdqu 16*5($inp), $DATA
-
-    vpclmulqdq \$0x10, poly(%rip), $T, $TMP4         # reduction stage 1a
-    vpalignr \$8, $T, $T, $T
-
-    ${\$SCHOOLBOOK_AAD->(2)}
-
-    vpxor $TMP4, $T, $T                              # reduction stage 1b
-    #########################################################
-    vmovdqu     16*4($inp), $DATA
-
-    ${\$SCHOOLBOOK_AAD->(3)}
-    #########################################################
-    vmovdqu     16*3($inp), $DATA
-
-    vpclmulqdq \$0x10, poly(%rip), $T, $TMP4         # reduction stage 2a
-    vpalignr \$8, $T, $T, $T
-
-    ${\$SCHOOLBOOK_AAD->(4)}
-
-    vpxor $TMP4, $T, $T                              # reduction stage 2b
-    #########################################################
-    vmovdqu 16*2($inp), $DATA
-
-    ${\$SCHOOLBOOK_AAD->(5)}
-
-    vpxor $Xhi, $T, $T                               # reduction finalize
-    #########################################################
-    vmovdqu 16*1($inp), $DATA
-
-    ${\$SCHOOLBOOK_AAD->(6)}
-    #########################################################
-    vmovdqu 16*0($inp), $DATA
-    vpxor $T, $DATA, $DATA
-
-    ${\$SCHOOLBOOK_AAD->(7)}
-    #########################################################
-    vpsrldq \$8, $TMP2, $TMP3
-    vpslldq \$8, $TMP2, $TMP2
-
-    vpxor $TMP3, $TMP1, $Xhi
-    vpxor $TMP2, $TMP0, $T
-
-    lea 16*8($inp), $inp
-    jmp .Lhtable_polyval_main_loop
-
-    #########################################################
-
-.Lhtable_polyval_out:
-    vpclmulqdq  \$0x10, poly(%rip), $T, $TMP3
-    vpalignr    \$8, $T, $T, $T
-    vpxor       $TMP3, $T, $T
-
-    vpclmulqdq  \$0x10, poly(%rip), $T, $TMP3
-    vpalignr    \$8, $T, $T, $T
-    vpxor       $TMP3, $T, $T
-    vpxor       $Xhi, $T, $T
-
-    vmovdqu $T, ($Tp)
-    vzeroupper
-    ret
-.cfi_endproc
-.size aesgcmsiv_htable_polyval,.-aesgcmsiv_htable_polyval
-___
-}
-aesgcmsiv_htable_polyval();
-
-sub aesgcmsiv_polyval_horner {
-  #void aesgcmsiv_polyval_horner(unsigned char T[16],  // output
-  #      const unsigned char* H, // H
-  #      unsigned char* BUF,  // Buffer
-  #      unsigned int blocks);  // Len2
-  #
-  # parameter 1: %rdi T - pointers to POLYVAL output
-  # parameter 2: %rsi Hp - pointer to H (user key)
-  # parameter 3: %rdx INp - pointer to input
-  # parameter 4: %rcx L - total number of blocks in input BUFFER
-  #
-  my $T = "%rdi";
-  my $Hp = "%rsi";
-  my $INp = "%rdx";
-  my $L = "%rcx";
-  my $LOC = "%r10";
-  my $LEN = "%eax";
-  my $H = "%xmm1";
-  my $RES = "%xmm0";
-
-  $code.=<<___;
-.globl aesgcmsiv_polyval_horner
-.type aesgcmsiv_polyval_horner,\@function,4
-.align 16
-aesgcmsiv_polyval_horner:
-.cfi_startproc
-    _CET_ENDBR
-    test $L, $L
-    jnz .Lpolyval_horner_start
-    ret
-
-.Lpolyval_horner_start:
-    # We will start with L GFMULS for POLYVAL(BIG_BUFFER)
-    # RES = GFMUL(RES, H)
-
-    xorq $LOC, $LOC
-    shlq \$4, $L    # L contains number of bytes to process
-
-    vmovdqa ($Hp), $H
-    vmovdqa ($T), $RES
-
-.Lpolyval_horner_loop:
-    vpxor ($INp,$LOC), $RES, $RES  # RES = RES + Xi
-    call GFMUL  # RES = RES * H
-
-    add \$16, $LOC
-    cmp $LOC, $L
-    jne .Lpolyval_horner_loop
-
-    # calculation of T is complete. RES=T
-    vmovdqa $RES, ($T)
-    ret
-.cfi_endproc
-.size aesgcmsiv_polyval_horner,.-aesgcmsiv_polyval_horner
-___
-}
-aesgcmsiv_polyval_horner();
-
-# void aes128gcmsiv_aes_ks(const uint8_t *key, uint8_t *out_expanded_key);
-# parameter 1: %rdi
-# parameter 2: %rsi
-$code.=<<___;
-.globl aes128gcmsiv_aes_ks
-.type aes128gcmsiv_aes_ks,\@function,2
-.align 16
-aes128gcmsiv_aes_ks:
-.cfi_startproc
-    _CET_ENDBR
-    vmovdqu (%rdi), %xmm1           # xmm1 = user key
-    vmovdqa %xmm1, (%rsi)           # rsi points to output
-
-    vmovdqa con1(%rip), %xmm0
-    vmovdqa mask(%rip), %xmm15
-
-    movq \$8, %rax
-
-.Lks128_loop:
-    addq \$16, %rsi                 # rsi points for next key
-    subq \$1, %rax
-    vpshufb %xmm15, %xmm1, %xmm2    # xmm2 = shuffled user key
-    vaesenclast %xmm0, %xmm2, %xmm2
-    vpslld \$1, %xmm0, %xmm0
-    vpslldq \$4, %xmm1, %xmm3
-    vpxor %xmm3, %xmm1, %xmm1
-    vpslldq \$4, %xmm3, %xmm3
-    vpxor %xmm3, %xmm1, %xmm1
-    vpslldq \$4, %xmm3, %xmm3
-    vpxor %xmm3, %xmm1, %xmm1
-    vpxor %xmm2, %xmm1, %xmm1
-    vmovdqa %xmm1, (%rsi)
-    jne .Lks128_loop
-
-    vmovdqa con2(%rip), %xmm0
-    vpshufb %xmm15, %xmm1, %xmm2
-    vaesenclast %xmm0, %xmm2, %xmm2
-    vpslld \$1, %xmm0, %xmm0
-    vpslldq \$4, %xmm1, %xmm3
-    vpxor %xmm3, %xmm1, %xmm1
-    vpslldq \$4, %xmm3, %xmm3
-    vpxor %xmm3, %xmm1, %xmm1
-    vpslldq \$4, %xmm3, %xmm3
-    vpxor %xmm3, %xmm1, %xmm1
-    vpxor %xmm2, %xmm1, %xmm1
-    vmovdqa %xmm1, 16(%rsi)
-
-    vpshufb %xmm15, %xmm1, %xmm2
-    vaesenclast %xmm0, %xmm2, %xmm2
-    vpslldq \$4, %xmm1, %xmm3
-    vpxor %xmm3, %xmm1, %xmm1
-    vpslldq \$4, %xmm3, %xmm3
-    vpxor %xmm3, %xmm1, %xmm1
-    vpslldq \$4, %xmm3, %xmm3
-    vpxor %xmm3, %xmm1, %xmm1
-    vpxor %xmm2, %xmm1, %xmm1
-    vmovdqa %xmm1, 32(%rsi)
-    ret
-.cfi_endproc
-.size aes128gcmsiv_aes_ks,.-aes128gcmsiv_aes_ks
-___
-
-# void aes256gcmsiv_aes_ks(const uint8_t *key, uint8_t *out_expanded_key);
-# parameter 1: %rdi
-# parameter 2: %rsi
-$code.=<<___;
-.globl aes256gcmsiv_aes_ks
-.type aes256gcmsiv_aes_ks,\@function,2
-.align 16
-aes256gcmsiv_aes_ks:
-.cfi_startproc
-    _CET_ENDBR
-    vmovdqu (%rdi), %xmm1
-    vmovdqu 16(%rdi), %xmm3
-    vmovdqa %xmm1, (%rsi)
-    vmovdqa %xmm3, 16(%rsi)
-    vmovdqa con1(%rip), %xmm0
-    vmovdqa mask(%rip), %xmm15
-    vpxor %xmm14, %xmm14, %xmm14
-    mov \$6, %rax
-
-.Lks256_loop:
-    add \$32, %rsi
-    subq \$1, %rax
-    vpshufb %xmm15, %xmm3, %xmm2
-    vaesenclast %xmm0, %xmm2, %xmm2
-    vpslld \$1, %xmm0, %xmm0
-    vpsllq \$32, %xmm1, %xmm4
-    vpxor %xmm4, %xmm1, %xmm1
-    vpshufb con3(%rip), %xmm1,  %xmm4
-    vpxor %xmm4, %xmm1, %xmm1
-    vpxor %xmm2, %xmm1, %xmm1
-    vmovdqa %xmm1, (%rsi)
-    vpshufd \$0xff, %xmm1, %xmm2
-    vaesenclast %xmm14, %xmm2, %xmm2
-    vpsllq \$32, %xmm3, %xmm4
-    vpxor %xmm4, %xmm3, %xmm3
-    vpshufb con3(%rip), %xmm3,  %xmm4
-    vpxor %xmm4, %xmm3, %xmm3
-    vpxor %xmm2, %xmm3, %xmm3
-    vmovdqa %xmm3, 16(%rsi)
-    jne .Lks256_loop
-
-    vpshufb %xmm15, %xmm3, %xmm2
-    vaesenclast %xmm0, %xmm2, %xmm2
-    vpsllq \$32, %xmm1, %xmm4
-    vpxor %xmm4, %xmm1, %xmm1
-    vpshufb con3(%rip), %xmm1,  %xmm4
-    vpxor %xmm4, %xmm1, %xmm1
-    vpxor %xmm2, %xmm1, %xmm1
-    vmovdqa %xmm1, 32(%rsi)
-    ret
-.cfi_endproc
-___
-
-sub aes128gcmsiv_aes_ks_enc_x1 {
-  my $KS1_REGA = "%xmm1";
-  my $KS1_REGB = "%xmm2";
-  my $BLOCK1 = "%xmm4";
-  my $AUXREG = "%xmm3";
-
-  my $KS_BLOCK = sub {
-    my ($reg, $reg2, $auxReg) = @_;
-    return <<___;
-    vpsllq \$32, $reg, $auxReg         #!!saving mov instruction to xmm3
-    vpxor $auxReg, $reg, $reg
-    vpshufb con3(%rip), $reg,  $auxReg
-    vpxor $auxReg, $reg, $reg
-    vpxor $reg2, $reg, $reg
-___
-  };
-
-  my $round = sub {
-    my ($i, $j) = @_;
-    return <<___;
-    vpshufb %xmm15, %xmm1, %xmm2      #!!saving mov instruction to xmm2
-    vaesenclast %xmm0, %xmm2, %xmm2
-    vpslld \$1, %xmm0, %xmm0
-    ${\$KS_BLOCK->($KS1_REGA, $KS1_REGB, $AUXREG)}
-    vaesenc %xmm1, $BLOCK1, $BLOCK1
-    vmovdqa %xmm1, ${\eval(16*$i)}($j)
-___
-  };
-
-  my $roundlast = sub {
-    my ($i, $j) = @_;
-    return <<___;
-    vpshufb %xmm15, %xmm1, %xmm2      #!!saving mov instruction to xmm2
-    vaesenclast %xmm0, %xmm2, %xmm2
-    ${\$KS_BLOCK->($KS1_REGA, $KS1_REGB, $AUXREG)}
-    vaesenclast %xmm1, $BLOCK1, $BLOCK1
-    vmovdqa %xmm1, ${\eval(16*$i)}($j)
-___
-  };
-
-# parameter 1: %rdi                         Pointer to PT
-# parameter 2: %rsi                         Pointer to CT
-# parameter 4: %rdx                         Pointer to keys
-# parameter 5: %rcx                         Pointer to initial key
-  $code.=<<___;
-.globl aes128gcmsiv_aes_ks_enc_x1
-.type aes128gcmsiv_aes_ks_enc_x1,\@function,4
-.align 16
-aes128gcmsiv_aes_ks_enc_x1:
-.cfi_startproc
-    _CET_ENDBR
-    vmovdqa (%rcx), %xmm1                 # xmm1 = first 16 bytes of random key
-    vmovdqa 0*16(%rdi), $BLOCK1
-
-    vmovdqa %xmm1, (%rdx)                 # KEY[0] = first 16 bytes of random key
-    vpxor %xmm1, $BLOCK1, $BLOCK1
-
-    vmovdqa con1(%rip), %xmm0             # xmm0  = 1,1,1,1
-    vmovdqa mask(%rip), %xmm15            # xmm15 = mask
-
-    ${\$round->(1, "%rdx")}
-    ${\$round->(2, "%rdx")}
-    ${\$round->(3, "%rdx")}
-    ${\$round->(4, "%rdx")}
-    ${\$round->(5, "%rdx")}
-    ${\$round->(6, "%rdx")}
-    ${\$round->(7, "%rdx")}
-    ${\$round->(8, "%rdx")}
-
-    vmovdqa con2(%rip), %xmm0
-
-    ${\$round->(9, "%rdx")}
-    ${\$roundlast->(10, "%rdx")}
-
-    vmovdqa $BLOCK1, 0*16(%rsi)
-    ret
-.cfi_endproc
-.size aes128gcmsiv_aes_ks_enc_x1,.-aes128gcmsiv_aes_ks_enc_x1
-___
-}
-aes128gcmsiv_aes_ks_enc_x1();
-
-sub aes128gcmsiv_kdf {
-  my $BLOCK1 = "%xmm9";
-  my $BLOCK2 = "%xmm10";
-  my $BLOCK3 = "%xmm11";
-  my $BLOCK4 = "%xmm12";
-  my $BLOCK5 = "%xmm13";
-  my $BLOCK6 = "%xmm14";
-  my $ONE = "%xmm13";
-  my $KSp = "%rdx";
-  my $STATE_1 = "%xmm1";
-
-  my $enc_roundx4 = sub {
-    my ($i, $j) = @_;
-    return <<___;
-    vmovdqa ${\eval($i*16)}(%rdx), $j
-    vaesenc $j, $BLOCK1, $BLOCK1
-    vaesenc $j, $BLOCK2, $BLOCK2
-    vaesenc $j, $BLOCK3, $BLOCK3
-    vaesenc $j, $BLOCK4, $BLOCK4
-___
-  };
-
-  my $enc_roundlastx4 = sub {
-    my ($i, $j) = @_;
-    return <<___;
-    vmovdqa ${\eval($i*16)}(%rdx), $j
-    vaesenclast $j, $BLOCK1, $BLOCK1
-    vaesenclast $j, $BLOCK2, $BLOCK2
-    vaesenclast $j, $BLOCK3, $BLOCK3
-    vaesenclast $j, $BLOCK4, $BLOCK4
-___
-  };
-
-# void aes128gcmsiv_kdf(const uint8_t nonce[16],
-#                       uint8_t *out_key_material,
-#                       const uint8_t *key_schedule);
-  $code.=<<___;
-.globl aes128gcmsiv_kdf
-.type aes128gcmsiv_kdf,\@function,3
-.align 16
-aes128gcmsiv_kdf:
-.cfi_startproc
-    _CET_ENDBR
-# parameter 1: %rdi                         Pointer to NONCE
-# parameter 2: %rsi                         Pointer to CT
-# parameter 4: %rdx                         Pointer to keys
-
-    vmovdqa (%rdx), %xmm1                  # xmm1 = first 16 bytes of random key
-    vmovdqa 0*16(%rdi), $BLOCK1
-    vmovdqa and_mask(%rip), $BLOCK4
-    vmovdqa one(%rip), $ONE
-    vpshufd \$0x90, $BLOCK1, $BLOCK1
-    vpand $BLOCK4, $BLOCK1, $BLOCK1
-    vpaddd $ONE, $BLOCK1, $BLOCK2
-    vpaddd $ONE, $BLOCK2, $BLOCK3
-    vpaddd $ONE, $BLOCK3, $BLOCK4
-
-    vpxor %xmm1, $BLOCK1, $BLOCK1
-    vpxor %xmm1, $BLOCK2, $BLOCK2
-    vpxor %xmm1, $BLOCK3, $BLOCK3
-    vpxor %xmm1, $BLOCK4, $BLOCK4
-
-    ${\$enc_roundx4->(1, "%xmm1")}
-    ${\$enc_roundx4->(2, "%xmm2")}
-    ${\$enc_roundx4->(3, "%xmm1")}
-    ${\$enc_roundx4->(4, "%xmm2")}
-    ${\$enc_roundx4->(5, "%xmm1")}
-    ${\$enc_roundx4->(6, "%xmm2")}
-    ${\$enc_roundx4->(7, "%xmm1")}
-    ${\$enc_roundx4->(8, "%xmm2")}
-    ${\$enc_roundx4->(9, "%xmm1")}
-    ${\$enc_roundlastx4->(10, "%xmm2")}
-
-    vmovdqa $BLOCK1, 0*16(%rsi)
-    vmovdqa $BLOCK2, 1*16(%rsi)
-    vmovdqa $BLOCK3, 2*16(%rsi)
-    vmovdqa $BLOCK4, 3*16(%rsi)
-    ret
-.cfi_endproc
-.size aes128gcmsiv_kdf,.-aes128gcmsiv_kdf
-___
-}
-aes128gcmsiv_kdf();
-
-sub aes128gcmsiv_enc_msg_x4 {
-  my $CTR1 = "%xmm0";
-  my $CTR2 = "%xmm1";
-  my $CTR3 = "%xmm2";
-  my $CTR4 = "%xmm3";
-  my $ADDER = "%xmm4";
-
-  my $STATE1 = "%xmm5";
-  my $STATE2 = "%xmm6";
-  my $STATE3 = "%xmm7";
-  my $STATE4 = "%xmm8";
-
-  my $TMP = "%xmm12";
-  my $TMP2 = "%xmm13";
-  my $TMP3 = "%xmm14";
-  my $IV = "%xmm15";
-
-  my $PT = "%rdi";
-  my $CT = "%rsi";
-  my $TAG = "%rdx";
-  my $KS = "%rcx";
-  my $LEN = "%r8";
-
-  my $aes_round = sub {
-    my ($i) = @_;
-    return <<___;
-    vmovdqu ${\eval($i*16)}($KS), $TMP
-    vaesenc $TMP, $STATE1, $STATE1
-    vaesenc $TMP, $STATE2, $STATE2
-    vaesenc $TMP, $STATE3, $STATE3
-    vaesenc $TMP, $STATE4, $STATE4
-___
-  };
-
-  my $aes_lastround = sub {
-    my ($i) = @_;
-    return <<___;
-    vmovdqu ${\eval($i*16)}($KS), $TMP
-    vaesenclast $TMP, $STATE1, $STATE1
-    vaesenclast $TMP, $STATE2, $STATE2
-    vaesenclast $TMP, $STATE3, $STATE3
-    vaesenclast $TMP, $STATE4, $STATE4
-___
-  };
-
-# void aes128gcmsiv_enc_msg_x4(unsigned char* PT, unsigned char* CT,
-#                              unsigned char* TAG, unsigned char* KS,
-#                              size_t byte_len);
-# parameter 1: %rdi     #PT
-# parameter 2: %rsi     #CT
-# parameter 3: %rdx     #TAG  [127 126 ... 0]  IV=[127...32]
-# parameter 4: %rcx     #KS
-# parameter 5: %r8      #LEN MSG_length in bytes
-  $code.=<<___;
-.globl aes128gcmsiv_enc_msg_x4
-.type aes128gcmsiv_enc_msg_x4,\@function,5
-.align 16
-aes128gcmsiv_enc_msg_x4:
-.cfi_startproc
-    _CET_ENDBR
-    test $LEN, $LEN
-    jnz .L128_enc_msg_x4_start
-    ret
-
-.L128_enc_msg_x4_start:
-    pushq %r12
-.cfi_push %r12
-    pushq %r13
-.cfi_push %r13
-
-    shrq \$4, $LEN      # LEN = num of blocks
-    movq $LEN, %r10
-    shlq \$62, %r10
-    shrq \$62, %r10
-
-    # make IV from TAG
-    vmovdqa ($TAG), $IV
-    vpor OR_MASK(%rip), $IV, $IV  #IV = [1]TAG[126...32][00..00]
-
-    vmovdqu four(%rip), $ADDER     # Register to increment counters
-    vmovdqa $IV, $CTR1             # CTR1 = TAG[1][127...32][00..00]
-    vpaddd one(%rip), $IV, $CTR2   # CTR2 = TAG[1][127...32][00..01]
-    vpaddd two(%rip), $IV, $CTR3   # CTR3 = TAG[1][127...32][00..02]
-    vpaddd three(%rip), $IV, $CTR4 # CTR4 = TAG[1][127...32][00..03]
-
-    shrq \$2, $LEN
-    je .L128_enc_msg_x4_check_remainder
-
-    subq \$64, $CT
-    subq \$64, $PT
-
-.L128_enc_msg_x4_loop1:
-    addq \$64, $CT
-    addq \$64, $PT
-
-    vmovdqa $CTR1, $STATE1
-    vmovdqa $CTR2, $STATE2
-    vmovdqa $CTR3, $STATE3
-    vmovdqa $CTR4, $STATE4
-
-    vpxor ($KS), $STATE1, $STATE1
-    vpxor ($KS), $STATE2, $STATE2
-    vpxor ($KS), $STATE3, $STATE3
-    vpxor ($KS), $STATE4, $STATE4
-
-    ${\$aes_round->(1)}
-    vpaddd $ADDER, $CTR1, $CTR1
-    ${\$aes_round->(2)}
-    vpaddd $ADDER, $CTR2, $CTR2
-    ${\$aes_round->(3)}
-    vpaddd $ADDER, $CTR3, $CTR3
-    ${\$aes_round->(4)}
-    vpaddd $ADDER, $CTR4, $CTR4
-
-    ${\$aes_round->(5)}
-    ${\$aes_round->(6)}
-    ${\$aes_round->(7)}
-    ${\$aes_round->(8)}
-    ${\$aes_round->(9)}
-    ${\$aes_lastround->(10)}
-
-    # XOR with Plaintext
-    vpxor 0*16($PT), $STATE1, $STATE1
-    vpxor 1*16($PT), $STATE2, $STATE2
-    vpxor 2*16($PT), $STATE3, $STATE3
-    vpxor 3*16($PT), $STATE4, $STATE4
-
-    subq \$1, $LEN
-
-    vmovdqu $STATE1, 0*16($CT)
-    vmovdqu $STATE2, 1*16($CT)
-    vmovdqu $STATE3, 2*16($CT)
-    vmovdqu $STATE4, 3*16($CT)
-
-    jne .L128_enc_msg_x4_loop1
-
-    addq \$64,$CT
-    addq \$64,$PT
-
-.L128_enc_msg_x4_check_remainder:
-    cmpq \$0, %r10
-    je .L128_enc_msg_x4_out
-
-.L128_enc_msg_x4_loop2:
-    # enc each block separately
-    # CTR1 is the highest counter (even if no LOOP done)
-    vmovdqa $CTR1, $STATE1
-    vpaddd one(%rip), $CTR1, $CTR1  # inc counter
-
-    vpxor ($KS), $STATE1, $STATE1
-    vaesenc 16($KS), $STATE1, $STATE1
-    vaesenc 32($KS), $STATE1, $STATE1
-    vaesenc 48($KS), $STATE1, $STATE1
-    vaesenc 64($KS), $STATE1, $STATE1
-    vaesenc 80($KS), $STATE1, $STATE1
-    vaesenc 96($KS), $STATE1, $STATE1
-    vaesenc 112($KS), $STATE1, $STATE1
-    vaesenc 128($KS), $STATE1, $STATE1
-    vaesenc 144($KS), $STATE1, $STATE1
-    vaesenclast 160($KS), $STATE1, $STATE1
-
-    # XOR with plaintext
-    vpxor ($PT), $STATE1, $STATE1
-    vmovdqu $STATE1, ($CT)
-
-    addq \$16, $PT
-    addq \$16, $CT
-
-    subq \$1, %r10
-    jne .L128_enc_msg_x4_loop2
-
-.L128_enc_msg_x4_out:
-    popq %r13
-.cfi_pop %r13
-    popq %r12
-.cfi_pop %r12
-    ret
-.cfi_endproc
-.size aes128gcmsiv_enc_msg_x4,.-aes128gcmsiv_enc_msg_x4
-___
-}
-aes128gcmsiv_enc_msg_x4();
-
-sub aes128gcmsiv_enc_msg_x8 {
-  my $STATE1 = "%xmm1";
-  my $STATE2 = "%xmm2";
-  my $STATE3 = "%xmm3";
-  my $STATE4 = "%xmm4";
-  my $STATE5 = "%xmm5";
-  my $STATE6 = "%xmm6";
-  my $STATE7 = "%xmm7";
-  my $STATE8 = "%xmm8";
-
-  my $CTR1 = "%xmm0";
-  my $CTR2 = "%xmm9";
-  my $CTR3 = "%xmm10";
-  my $CTR4 = "%xmm11";
-  my $CTR5 = "%xmm12";
-  my $CTR6 = "%xmm13";
-  my $CTR7 = "%xmm14";
-  my $SCHED = "%xmm15";
-
-  my $TMP1 = "%xmm1";
-  my $TMP2 = "%xmm2";
-
-  my $PT = "%rdi";
-  my $CT = "%rsi";
-  my $TAG = "%rdx";
-  my $KS = "%rcx";
-  my $LEN = "%r8";
-
-  my $aes_round8 = sub {
-    my ($i) = @_;
-    return <<___;
-    vmovdqu ${\eval($i*16)}($KS), $SCHED
-    vaesenc $SCHED, $STATE1, $STATE1
-    vaesenc $SCHED, $STATE2, $STATE2
-    vaesenc $SCHED, $STATE3, $STATE3
-    vaesenc $SCHED, $STATE4, $STATE4
-    vaesenc $SCHED, $STATE5, $STATE5
-    vaesenc $SCHED, $STATE6, $STATE6
-    vaesenc $SCHED, $STATE7, $STATE7
-    vaesenc $SCHED, $STATE8, $STATE8
-___
-  };
-
-  my $aes_lastround8 = sub {
-    my ($i) = @_;
-    return <<___;
-    vmovdqu ${\eval($i*16)}($KS), $SCHED
-    vaesenclast $SCHED, $STATE1, $STATE1
-    vaesenclast $SCHED, $STATE2, $STATE2
-    vaesenclast $SCHED, $STATE3, $STATE3
-    vaesenclast $SCHED, $STATE4, $STATE4
-    vaesenclast $SCHED, $STATE5, $STATE5
-    vaesenclast $SCHED, $STATE6, $STATE6
-    vaesenclast $SCHED, $STATE7, $STATE7
-    vaesenclast $SCHED, $STATE8, $STATE8
-___
-  };
-
-# void ENC_MSG_x8(unsigned char* PT,
-#                 unsigned char* CT,
-#                 unsigned char* TAG,
-#                 unsigned char* KS,
-#                 size_t byte_len);
-# parameter 1: %rdi     #PT
-# parameter 2: %rsi     #CT
-# parameter 3: %rdx     #TAG        [127 126 ... 0]  IV=[127...32]
-# parameter 4: %rcx     #KS
-# parameter 5: %r8      #LEN MSG_length in bytes
-  $code.=<<___;
-.globl aes128gcmsiv_enc_msg_x8
-.type aes128gcmsiv_enc_msg_x8,\@function,5
-.align 16
-aes128gcmsiv_enc_msg_x8:
-.cfi_startproc
-    _CET_ENDBR
-    test $LEN, $LEN
-    jnz .L128_enc_msg_x8_start
-    ret
-
-.L128_enc_msg_x8_start:
-    pushq %r12
-.cfi_push %r12
-    pushq %r13
-.cfi_push %r13
-    pushq %rbp
-.cfi_push %rbp
-    movq %rsp, %rbp
-.cfi_def_cfa_register rbp
-
-    # Place in stack
-    subq \$128, %rsp
-    andq \$-64, %rsp
-
-    shrq \$4, $LEN  # LEN = num of blocks
-    movq $LEN, %r10
-    shlq \$61, %r10
-    shrq \$61, %r10
-
-    # make IV from TAG
-    vmovdqu ($TAG), $TMP1
-    vpor OR_MASK(%rip), $TMP1, $TMP1  # TMP1= IV = [1]TAG[126...32][00..00]
-
-    # store counter8 in the stack
-    vpaddd seven(%rip), $TMP1, $CTR1
-    vmovdqu $CTR1, (%rsp)             # CTR8 = TAG[127...32][00..07]
-    vpaddd one(%rip), $TMP1, $CTR2    # CTR2 = TAG[127...32][00..01]
-    vpaddd two(%rip), $TMP1, $CTR3    # CTR3 = TAG[127...32][00..02]
-    vpaddd three(%rip), $TMP1, $CTR4  # CTR4 = TAG[127...32][00..03]
-    vpaddd four(%rip), $TMP1, $CTR5   # CTR5 = TAG[127...32][00..04]
-    vpaddd five(%rip), $TMP1, $CTR6   # CTR6 = TAG[127...32][00..05]
-    vpaddd six(%rip), $TMP1, $CTR7    # CTR7 = TAG[127...32][00..06]
-    vmovdqa $TMP1, $CTR1              # CTR1 = TAG[127...32][00..00]
-
-    shrq \$3, $LEN
-    je .L128_enc_msg_x8_check_remainder
-
-    subq \$128, $CT
-    subq \$128, $PT
-
-.L128_enc_msg_x8_loop1:
-    addq \$128, $CT
-    addq \$128, $PT
-
-    vmovdqa $CTR1, $STATE1
-    vmovdqa $CTR2, $STATE2
-    vmovdqa $CTR3, $STATE3
-    vmovdqa $CTR4, $STATE4
-    vmovdqa $CTR5, $STATE5
-    vmovdqa $CTR6, $STATE6
-    vmovdqa $CTR7, $STATE7
-    # move from stack
-    vmovdqu (%rsp), $STATE8
-
-    vpxor ($KS), $STATE1, $STATE1
-    vpxor ($KS), $STATE2, $STATE2
-    vpxor ($KS), $STATE3, $STATE3
-    vpxor ($KS), $STATE4, $STATE4
-    vpxor ($KS), $STATE5, $STATE5
-    vpxor ($KS), $STATE6, $STATE6
-    vpxor ($KS), $STATE7, $STATE7
-    vpxor ($KS), $STATE8, $STATE8
-
-    ${\$aes_round8->(1)}
-    vmovdqu (%rsp), $CTR7  # deal with CTR8
-    vpaddd eight(%rip), $CTR7, $CTR7
-    vmovdqu $CTR7, (%rsp)
-    ${\$aes_round8->(2)}
-    vpsubd one(%rip), $CTR7, $CTR7
-    ${\$aes_round8->(3)}
-    vpaddd eight(%rip), $CTR1, $CTR1
-    ${\$aes_round8->(4)}
-    vpaddd eight(%rip), $CTR2, $CTR2
-    ${\$aes_round8->(5)}
-    vpaddd eight(%rip), $CTR3, $CTR3
-    ${\$aes_round8->(6)}
-    vpaddd eight(%rip), $CTR4, $CTR4
-    ${\$aes_round8->(7)}
-    vpaddd eight(%rip), $CTR5, $CTR5
-    ${\$aes_round8->(8)}
-    vpaddd eight(%rip), $CTR6, $CTR6
-    ${\$aes_round8->(9)}
-    ${\$aes_lastround8->(10)}
-
-    # XOR with Plaintext
-    vpxor 0*16($PT), $STATE1, $STATE1
-    vpxor 1*16($PT), $STATE2, $STATE2
-    vpxor 2*16($PT), $STATE3, $STATE3
-    vpxor 3*16($PT), $STATE4, $STATE4
-    vpxor 4*16($PT), $STATE5, $STATE5
-    vpxor 5*16($PT), $STATE6, $STATE6
-    vpxor 6*16($PT), $STATE7, $STATE7
-    vpxor 7*16($PT), $STATE8, $STATE8
-
-    dec $LEN
-
-    vmovdqu $STATE1, 0*16($CT)
-    vmovdqu $STATE2, 1*16($CT)
-    vmovdqu $STATE3, 2*16($CT)
-    vmovdqu $STATE4, 3*16($CT)
-    vmovdqu $STATE5, 4*16($CT)
-    vmovdqu $STATE6, 5*16($CT)
-    vmovdqu $STATE7, 6*16($CT)
-    vmovdqu $STATE8, 7*16($CT)
-
-    jne .L128_enc_msg_x8_loop1
-
-    addq \$128, $CT
-    addq \$128, $PT
-
-.L128_enc_msg_x8_check_remainder:
-    cmpq \$0, %r10
-    je .L128_enc_msg_x8_out
-
-.L128_enc_msg_x8_loop2:
-    # enc each block separately
-    # CTR1 is the highest counter (even if no LOOP done)
-    vmovdqa $CTR1, $STATE1
-    vpaddd one(%rip), $CTR1, $CTR1  # inc counter
-
-    vpxor ($KS), $STATE1, $STATE1
-    vaesenc 16($KS), $STATE1, $STATE1
-    vaesenc 32($KS), $STATE1, $STATE1
-    vaesenc 48($KS), $STATE1, $STATE1
-    vaesenc 64($KS), $STATE1, $STATE1
-    vaesenc 80($KS), $STATE1, $STATE1
-    vaesenc 96($KS), $STATE1, $STATE1
-    vaesenc 112($KS), $STATE1, $STATE1
-    vaesenc 128($KS), $STATE1, $STATE1
-    vaesenc 144($KS), $STATE1, $STATE1
-    vaesenclast 160($KS), $STATE1, $STATE1
-
-    # XOR with Plaintext
-    vpxor ($PT), $STATE1, $STATE1
-
-    vmovdqu $STATE1, ($CT)
-
-    addq \$16, $PT
-    addq \$16, $CT
-
-    decq %r10
-    jne .L128_enc_msg_x8_loop2
-
-.L128_enc_msg_x8_out:
-    movq %rbp, %rsp
-.cfi_def_cfa_register %rsp
-    popq %rbp
-.cfi_pop %rbp
-    popq %r13
-.cfi_pop %r13
-    popq %r12
-.cfi_pop %r12
-    ret
-.cfi_endproc
-.size aes128gcmsiv_enc_msg_x8,.-aes128gcmsiv_enc_msg_x8
-___
-}
-aes128gcmsiv_enc_msg_x8();
-
-sub aesgcmsiv_dec {
-  my ($aes256) = @_;
-
-  my $T = "%xmm0";
-  my $TMP0 = "%xmm1";
-  my $TMP1 = "%xmm2";
-  my $TMP2 = "%xmm3";
-  my $TMP3 = "%xmm4";
-  my $TMP4 = "%xmm5";
-  my $TMP5 = "%xmm6";
-  my $CTR1 = "%xmm7";
-  my $CTR2 = "%xmm8";
-  my $CTR3 = "%xmm9";
-  my $CTR4 = "%xmm10";
-  my $CTR5 = "%xmm11";
-  my $CTR6 = "%xmm12";
-  my $CTR = "%xmm15";
-  my $CT = "%rdi";
-  my $PT = "%rsi";
-  my $POL = "%rdx";
-  my $Htbl = "%rcx";
-  my $KS = "%r8";
-  my $LEN = "%r9";
-  my $secureBuffer = "%rax";
-  my $HTABLE_ROUNDS = "%xmm13";
-
-  my $labelPrefix = "128";
-  if ($aes256) {
-    $labelPrefix = "256";
-  }
-
-  my $aes_round_dec = sub {
-    my ($i) = @_;
-    return <<___;
-    vmovdqu ${\eval($i*16)}($KS), $TMP3
-    vaesenc $TMP3, $CTR1, $CTR1
-    vaesenc $TMP3, $CTR2, $CTR2
-    vaesenc $TMP3, $CTR3, $CTR3
-    vaesenc $TMP3, $CTR4, $CTR4
-    vaesenc $TMP3, $CTR5, $CTR5
-    vaesenc $TMP3, $CTR6, $CTR6
-___
-  };
-
-  my $aes_lastround_dec = sub {
-    my ($i) = @_;
-    return <<___;
-    vmovdqu ${\eval($i*16)}($KS), $TMP3
-    vaesenclast $TMP3, $CTR1, $CTR1
-    vaesenclast $TMP3, $CTR2, $CTR2
-    vaesenclast $TMP3, $CTR3, $CTR3
-    vaesenclast $TMP3, $CTR4, $CTR4
-    vaesenclast $TMP3, $CTR5, $CTR5
-    vaesenclast $TMP3, $CTR6, $CTR6
-___
-  };
-
-  my $schoolbook = sub {
-    my ($i) = @_;
-    return <<___;
-    vmovdqu ${\eval($i*16-32)}($secureBuffer), $TMP5
-    vmovdqu ${\eval($i*16-32)}($Htbl), $HTABLE_ROUNDS
-
-    vpclmulqdq \$0x10, $HTABLE_ROUNDS, $TMP5, $TMP3
-    vpxor $TMP3, $TMP0, $TMP0
-    vpclmulqdq \$0x11, $HTABLE_ROUNDS, $TMP5, $TMP3
-    vpxor $TMP3, $TMP1, $TMP1
-    vpclmulqdq \$0x00, $HTABLE_ROUNDS, $TMP5, $TMP3
-    vpxor $TMP3, $TMP2, $TMP2
-    vpclmulqdq \$0x01, $HTABLE_ROUNDS, $TMP5, $TMP3
-    vpxor $TMP3, $TMP0, $TMP0
-___
-  };
-
-  if ($aes256) {
-    $code.=<<___;
-.globl aes256gcmsiv_dec
-.type aes256gcmsiv_dec,\@function,6
-.align 16
-aes256gcmsiv_dec:
-___
-  } else {
-    $code.=<<___;
-.globl aes128gcmsiv_dec
-.type aes128gcmsiv_dec,\@function,6
-.align 16
-aes128gcmsiv_dec:
-___
-  }
-
-  $code.=<<___;
-.cfi_startproc
-    _CET_ENDBR
-    test \$~15, $LEN
-    jnz .L${labelPrefix}_dec_start
-    ret
-
-.L${labelPrefix}_dec_start:
-    vzeroupper
-    vmovdqa ($POL), $T
-    # The claimed tag is provided after the current calculated tag value.
-    # CTRBLKs is made from it.
-    vmovdqu 16($POL), $CTR
-    vpor OR_MASK(%rip), $CTR, $CTR      # CTR = [1]TAG[126...32][00..00]
-    movq $POL, $secureBuffer
-
-    leaq 32($secureBuffer), $secureBuffer
-    leaq 32($Htbl), $Htbl
-
-    andq \$~15, $LEN
-
-    # If less then 6 blocks, make singles
-    cmp \$96, $LEN
-    jb .L${labelPrefix}_dec_loop2
-
-    # Decrypt the first six blocks
-    sub \$96, $LEN
-    vmovdqa $CTR, $CTR1
-    vpaddd one(%rip), $CTR1, $CTR2
-    vpaddd two(%rip), $CTR1, $CTR3
-    vpaddd one(%rip), $CTR3, $CTR4
-    vpaddd two(%rip), $CTR3, $CTR5
-    vpaddd one(%rip), $CTR5, $CTR6
-    vpaddd two(%rip), $CTR5, $CTR
-
-    vpxor ($KS), $CTR1, $CTR1
-    vpxor ($KS), $CTR2, $CTR2
-    vpxor ($KS), $CTR3, $CTR3
-    vpxor ($KS), $CTR4, $CTR4
-    vpxor ($KS), $CTR5, $CTR5
-    vpxor ($KS), $CTR6, $CTR6
-
-    ${\$aes_round_dec->(1)}
-    ${\$aes_round_dec->(2)}
-    ${\$aes_round_dec->(3)}
-    ${\$aes_round_dec->(4)}
-    ${\$aes_round_dec->(5)}
-    ${\$aes_round_dec->(6)}
-    ${\$aes_round_dec->(7)}
-    ${\$aes_round_dec->(8)}
-    ${\$aes_round_dec->(9)}
-___
-
-if ($aes256) {
-$code.=<<___;
-    ${\$aes_round_dec->(10)}
-    ${\$aes_round_dec->(11)}
-    ${\$aes_round_dec->(12)}
-    ${\$aes_round_dec->(13)}
-    ${\$aes_lastround_dec->(14)}
-___
-} else {
-$code.=<<___;
-    ${\$aes_lastround_dec->(10)}
-___
-}
-
-$code.=<<___;
-    # XOR with CT
-    vpxor 0*16($CT), $CTR1, $CTR1
-    vpxor 1*16($CT), $CTR2, $CTR2
-    vpxor 2*16($CT), $CTR3, $CTR3
-    vpxor 3*16($CT), $CTR4, $CTR4
-    vpxor 4*16($CT), $CTR5, $CTR5
-    vpxor 5*16($CT), $CTR6, $CTR6
-
-    vmovdqu $CTR1, 0*16($PT)
-    vmovdqu $CTR2, 1*16($PT)
-    vmovdqu $CTR3, 2*16($PT)
-    vmovdqu $CTR4, 3*16($PT)
-    vmovdqu $CTR5, 4*16($PT)
-    vmovdqu $CTR6, 5*16($PT)
-
-    addq \$96, $CT
-    addq \$96, $PT
-    jmp .L${labelPrefix}_dec_loop1
-
-# Decrypt 6 blocks each time while hashing previous 6 blocks
-.align 64
-.L${labelPrefix}_dec_loop1:
-    cmp \$96, $LEN
-    jb .L${labelPrefix}_dec_finish_96
-    sub \$96, $LEN
-
-    vmovdqa $CTR6, $TMP5
-    vmovdqa $CTR5, 1*16-32($secureBuffer)
-    vmovdqa $CTR4, 2*16-32($secureBuffer)
-    vmovdqa $CTR3, 3*16-32($secureBuffer)
-    vmovdqa $CTR2, 4*16-32($secureBuffer)
-    vmovdqa $CTR1, 5*16-32($secureBuffer)
-
-    vmovdqa $CTR, $CTR1
-    vpaddd one(%rip), $CTR1, $CTR2
-    vpaddd two(%rip), $CTR1, $CTR3
-    vpaddd one(%rip), $CTR3, $CTR4
-    vpaddd two(%rip), $CTR3, $CTR5
-    vpaddd one(%rip), $CTR5, $CTR6
-    vpaddd two(%rip), $CTR5, $CTR
-
-    vmovdqa ($KS), $TMP3
-    vpxor $TMP3, $CTR1, $CTR1
-    vpxor $TMP3, $CTR2, $CTR2
-    vpxor $TMP3, $CTR3, $CTR3
-    vpxor $TMP3, $CTR4, $CTR4
-    vpxor $TMP3, $CTR5, $CTR5
-    vpxor $TMP3, $CTR6, $CTR6
-
-    vmovdqu 0*16-32($Htbl), $TMP3
-    vpclmulqdq \$0x11, $TMP3, $TMP5, $TMP1
-    vpclmulqdq \$0x00, $TMP3, $TMP5, $TMP2
-    vpclmulqdq \$0x01, $TMP3, $TMP5, $TMP0
-    vpclmulqdq \$0x10, $TMP3, $TMP5, $TMP3
-    vpxor $TMP3, $TMP0, $TMP0
-
-    ${\$aes_round_dec->(1)}
-    ${\$schoolbook->(1)}
-
-    ${\$aes_round_dec->(2)}
-    ${\$schoolbook->(2)}
-
-    ${\$aes_round_dec->(3)}
-    ${\$schoolbook->(3)}
-
-    ${\$aes_round_dec->(4)}
-    ${\$schoolbook->(4)}
-
-    ${\$aes_round_dec->(5)}
-    ${\$aes_round_dec->(6)}
-    ${\$aes_round_dec->(7)}
-
-    vmovdqa 5*16-32($secureBuffer), $TMP5
-    vpxor $T, $TMP5, $TMP5
-    vmovdqu 5*16-32($Htbl), $TMP4
-
-    vpclmulqdq \$0x01, $TMP4, $TMP5, $TMP3
-    vpxor $TMP3, $TMP0, $TMP0
-    vpclmulqdq \$0x11, $TMP4, $TMP5, $TMP3
-    vpxor $TMP3, $TMP1, $TMP1
-    vpclmulqdq \$0x00, $TMP4, $TMP5, $TMP3
-    vpxor $TMP3, $TMP2, $TMP2
-    vpclmulqdq \$0x10, $TMP4, $TMP5, $TMP3
-    vpxor $TMP3, $TMP0, $TMP0
-
-    ${\$aes_round_dec->(8)}
-
-    vpsrldq \$8, $TMP0, $TMP3
-    vpxor $TMP3, $TMP1, $TMP4
-    vpslldq \$8, $TMP0, $TMP3
-    vpxor $TMP3, $TMP2, $T
-
-    vmovdqa poly(%rip), $TMP2
-
-    ${\$aes_round_dec->(9)}
-___
-
-if ($aes256) {
-$code.=<<___;
-    ${\$aes_round_dec->(10)}
-    ${\$aes_round_dec->(11)}
-    ${\$aes_round_dec->(12)}
-    ${\$aes_round_dec->(13)}
-    vmovdqu 14*16($KS), $TMP5
-___
-} else {
-$code.=<<___;
-    vmovdqu 10*16($KS), $TMP5
-___
-}
-
-$code.=<<___;
-    vpalignr \$8, $T, $T, $TMP1
-    vpclmulqdq \$0x10, $TMP2, $T, $T
-    vpxor $T, $TMP1, $T
-
-    vpxor 0*16($CT), $TMP5, $TMP3
-    vaesenclast $TMP3, $CTR1, $CTR1
-    vpxor 1*16($CT), $TMP5, $TMP3
-    vaesenclast $TMP3, $CTR2, $CTR2
-    vpxor 2*16($CT), $TMP5, $TMP3
-    vaesenclast $TMP3, $CTR3, $CTR3
-    vpxor 3*16($CT), $TMP5, $TMP3
-    vaesenclast $TMP3, $CTR4, $CTR4
-    vpxor 4*16($CT), $TMP5, $TMP3
-    vaesenclast $TMP3, $CTR5, $CTR5
-    vpxor 5*16($CT), $TMP5, $TMP3
-    vaesenclast $TMP3, $CTR6, $CTR6
-
-    vpalignr \$8, $T, $T, $TMP1
-    vpclmulqdq \$0x10, $TMP2, $T, $T
-    vpxor $T, $TMP1, $T
-
-    vmovdqu $CTR1, 0*16($PT)
-    vmovdqu $CTR2, 1*16($PT)
-    vmovdqu $CTR3, 2*16($PT)
-    vmovdqu $CTR4, 3*16($PT)
-    vmovdqu $CTR5, 4*16($PT)
-    vmovdqu $CTR6, 5*16($PT)
-
-    vpxor $TMP4, $T, $T
-
-    lea 96($CT), $CT
-    lea 96($PT), $PT
-    jmp .L${labelPrefix}_dec_loop1
-
-.L${labelPrefix}_dec_finish_96:
-    vmovdqa $CTR6, $TMP5
-    vmovdqa $CTR5, 1*16-32($secureBuffer)
-    vmovdqa $CTR4, 2*16-32($secureBuffer)
-    vmovdqa $CTR3, 3*16-32($secureBuffer)
-    vmovdqa $CTR2, 4*16-32($secureBuffer)
-    vmovdqa $CTR1, 5*16-32($secureBuffer)
-
-    vmovdqu 0*16-32($Htbl), $TMP3
-    vpclmulqdq \$0x10, $TMP3, $TMP5, $TMP0
-    vpclmulqdq \$0x11, $TMP3, $TMP5, $TMP1
-    vpclmulqdq \$0x00, $TMP3, $TMP5, $TMP2
-    vpclmulqdq \$0x01, $TMP3, $TMP5, $TMP3
-    vpxor $TMP3, $TMP0, $TMP0
-
-    ${\$schoolbook->(1)}
-    ${\$schoolbook->(2)}
-    ${\$schoolbook->(3)}
-    ${\$schoolbook->(4)}
-
-    vmovdqu 5*16-32($secureBuffer), $TMP5
-    vpxor $T, $TMP5, $TMP5
-    vmovdqu 5*16-32($Htbl), $TMP4
-    vpclmulqdq \$0x11, $TMP4, $TMP5, $TMP3
-    vpxor $TMP3, $TMP1, $TMP1
-    vpclmulqdq \$0x00, $TMP4, $TMP5, $TMP3
-    vpxor $TMP3, $TMP2, $TMP2
-    vpclmulqdq \$0x10, $TMP4, $TMP5, $TMP3
-    vpxor $TMP3, $TMP0, $TMP0
-    vpclmulqdq \$0x01, $TMP4, $TMP5, $TMP3
-    vpxor $TMP3, $TMP0, $TMP0
-
-    vpsrldq \$8, $TMP0, $TMP3
-    vpxor $TMP3, $TMP1, $TMP4
-    vpslldq \$8, $TMP0, $TMP3
-    vpxor $TMP3, $TMP2, $T
-
-    vmovdqa poly(%rip), $TMP2
-
-    vpalignr \$8, $T, $T, $TMP1
-    vpclmulqdq \$0x10, $TMP2, $T, $T
-    vpxor $T, $TMP1, $T
-
-    vpalignr \$8, $T, $T, $TMP1
-    vpclmulqdq \$0x10, $TMP2, $T, $T
-    vpxor $T, $TMP1, $T
-
-    vpxor $TMP4, $T, $T
-
-.L${labelPrefix}_dec_loop2:
-    # Here we encrypt any remaining whole block
-
-    # if there are no whole blocks
-    cmp \$16, $LEN
-    jb .L${labelPrefix}_dec_out
-    sub \$16, $LEN
-
-    vmovdqa $CTR, $TMP1
-    vpaddd one(%rip), $CTR, $CTR
-
-    vpxor 0*16($KS), $TMP1, $TMP1
-    vaesenc 1*16($KS), $TMP1, $TMP1
-    vaesenc 2*16($KS), $TMP1, $TMP1
-    vaesenc 3*16($KS), $TMP1, $TMP1
-    vaesenc 4*16($KS), $TMP1, $TMP1
-    vaesenc 5*16($KS), $TMP1, $TMP1
-    vaesenc 6*16($KS), $TMP1, $TMP1
-    vaesenc 7*16($KS), $TMP1, $TMP1
-    vaesenc 8*16($KS), $TMP1, $TMP1
-    vaesenc 9*16($KS), $TMP1, $TMP1
-___
-if ($aes256) {
-$code.=<<___;
-    vaesenc 10*16($KS), $TMP1, $TMP1
-    vaesenc 11*16($KS), $TMP1, $TMP1
-    vaesenc 12*16($KS), $TMP1, $TMP1
-    vaesenc 13*16($KS), $TMP1, $TMP1
-    vaesenclast 14*16($KS), $TMP1, $TMP1
-___
-} else {
-$code.=<<___;
-    vaesenclast 10*16($KS), $TMP1, $TMP1
-___
-}
-
-$code.=<<___;
-    vpxor ($CT), $TMP1, $TMP1
-    vmovdqu $TMP1, ($PT)
-    addq \$16, $CT
-    addq \$16, $PT
-
-    vpxor $TMP1, $T, $T
-    vmovdqa -32($Htbl), $TMP0
-    call GFMUL
-
-    jmp .L${labelPrefix}_dec_loop2
-
-.L${labelPrefix}_dec_out:
-    vmovdqu $T, ($POL)
-    ret
-.cfi_endproc
-___
-
-  if ($aes256) {
-    $code.=<<___;
-.size aes256gcmsiv_dec, .-aes256gcmsiv_dec
-___
-  } else {
-    $code.=<<___;
-.size aes128gcmsiv_dec, .-aes128gcmsiv_dec
-___
-  }
-}
-
-aesgcmsiv_dec(0);  # emit 128-bit version
-
-sub aes128gcmsiv_ecb_enc_block {
-  my $STATE_1 = "%xmm1";
-  my $KSp = "%rdx";
-
-  # parameter 1: PT            %rdi    (pointer to 128 bit)
-  # parameter 2: CT            %rsi    (pointer to 128 bit)
-  # parameter 3: ks            %rdx    (pointer to ks)
-  $code.=<<___;
-.globl aes128gcmsiv_ecb_enc_block
-.type aes128gcmsiv_ecb_enc_block,\@function,3
-.align 16
-aes128gcmsiv_ecb_enc_block:
-.cfi_startproc
-    _CET_ENDBR
-    vmovdqa (%rdi), $STATE_1
-
-    vpxor       ($KSp), $STATE_1, $STATE_1
-    vaesenc 1*16($KSp), $STATE_1, $STATE_1
-    vaesenc 2*16($KSp), $STATE_1, $STATE_1
-    vaesenc 3*16($KSp), $STATE_1, $STATE_1
-    vaesenc 4*16($KSp), $STATE_1, $STATE_1
-    vaesenc 5*16($KSp), $STATE_1, $STATE_1
-    vaesenc 6*16($KSp), $STATE_1, $STATE_1
-    vaesenc 7*16($KSp), $STATE_1, $STATE_1
-    vaesenc 8*16($KSp), $STATE_1, $STATE_1
-    vaesenc 9*16($KSp), $STATE_1, $STATE_1
-    vaesenclast 10*16($KSp), $STATE_1, $STATE_1    # STATE_1 == IV
-
-    vmovdqa $STATE_1, (%rsi)
-
-    ret
-.cfi_endproc
-.size aes128gcmsiv_ecb_enc_block,.-aes128gcmsiv_ecb_enc_block
-___
-}
-aes128gcmsiv_ecb_enc_block();
-
-sub aes256gcmsiv_aes_ks_enc_x1 {
-  my $KS = "%rdx";
-  my $KEYp = "%rcx";
-  my $CON_MASK = "%xmm0";
-  my $MASK_256 = "%xmm15";
-  my $KEY_1 = "%xmm1";
-  my $KEY_2 = "%xmm3";
-  my $BLOCK1 = "%xmm8";
-  my $AUX_REG = "%xmm14";
-  my $PT = "%rdi";
-  my $CT = "%rsi";
-
-  my $round_double = sub {
-    my ($i, $j) = @_;
-    return <<___;
-    vpshufb %xmm15, %xmm3, %xmm2
-    vaesenclast %xmm0, %xmm2, %xmm2
-    vpslld \$1, %xmm0, %xmm0
-    vpslldq \$4, %xmm1, %xmm4
-    vpxor %xmm4, %xmm1, %xmm1
-    vpslldq \$4, %xmm4, %xmm4
-    vpxor %xmm4, %xmm1, %xmm1
-    vpslldq \$4, %xmm4, %xmm4
-    vpxor %xmm4, %xmm1, %xmm1
-    vpxor %xmm2, %xmm1, %xmm1
-    vaesenc %xmm1, $BLOCK1, $BLOCK1
-    vmovdqu %xmm1, ${\eval(16*$i)}($KS)
-
-    vpshufd \$0xff, %xmm1, %xmm2
-    vaesenclast %xmm14, %xmm2, %xmm2
-    vpslldq \$4, %xmm3, %xmm4
-    vpxor %xmm4, %xmm3, %xmm3
-    vpslldq \$4, %xmm4, %xmm4
-    vpxor %xmm4, %xmm3, %xmm3
-    vpslldq \$4, %xmm4, %xmm4
-    vpxor %xmm4, %xmm3, %xmm3
-    vpxor %xmm2, %xmm3, %xmm3
-    vaesenc %xmm3, $BLOCK1, $BLOCK1
-    vmovdqu %xmm3, ${\eval(16*$j)}($KS)
-___
-  };
-
-  my $round_last = sub {
-    my ($i) = @_;
-    return <<___;
-    vpshufb %xmm15, %xmm3, %xmm2
-    vaesenclast %xmm0, %xmm2, %xmm2
-    vpslldq \$4, %xmm1, %xmm4
-    vpxor %xmm4, %xmm1, %xmm1
-    vpslldq \$4, %xmm4, %xmm4
-    vpxor %xmm4, %xmm1, %xmm1
-    vpslldq \$4, %xmm4, %xmm4
-    vpxor %xmm4, %xmm1, %xmm1
-    vpxor %xmm2, %xmm1, %xmm1
-    vaesenclast %xmm1, $BLOCK1, $BLOCK1
-    vmovdqu %xmm1, ${\eval(16*$i)}($KS)
-___
-  };
-
-  # parameter 1: %rdi         Pointer to PT1
-  # parameter 2: %rsi         Pointer to CT1
-  # parameter 3: %rdx         Pointer to KS
-  # parameter 4: %rcx         Pointer to initial key
-  $code.=<<___;
-.globl aes256gcmsiv_aes_ks_enc_x1
-.type aes256gcmsiv_aes_ks_enc_x1,\@function,4
-.align 16
-aes256gcmsiv_aes_ks_enc_x1:
-.cfi_startproc
-    _CET_ENDBR
-    vmovdqa con1(%rip), $CON_MASK    # CON_MASK  = 1,1,1,1
-    vmovdqa mask(%rip), $MASK_256    # MASK_256
-    vmovdqa ($PT), $BLOCK1
-    vmovdqa ($KEYp), $KEY_1          # KEY_1 || KEY_2 [0..7] = user key
-    vmovdqa 16($KEYp), $KEY_2
-    vpxor $KEY_1, $BLOCK1, $BLOCK1
-    vaesenc $KEY_2, $BLOCK1, $BLOCK1
-    vmovdqu $KEY_1, ($KS)            # First round key
-    vmovdqu $KEY_2, 16($KS)
-    vpxor $AUX_REG, $AUX_REG, $AUX_REG
-
-    ${\$round_double->(2, 3)}
-    ${\$round_double->(4, 5)}
-    ${\$round_double->(6, 7)}
-    ${\$round_double->(8, 9)}
-    ${\$round_double->(10, 11)}
-    ${\$round_double->(12, 13)}
-    ${\$round_last->(14)}
-    vmovdqa $BLOCK1, ($CT)
-    ret
-.cfi_endproc
-.size aes256gcmsiv_aes_ks_enc_x1,.-aes256gcmsiv_aes_ks_enc_x1
-___
-}
-aes256gcmsiv_aes_ks_enc_x1();
-
-sub aes256gcmsiv_ecb_enc_block {
-  my $STATE_1 = "%xmm1";
-  my $PT = "%rdi";
-  my $CT = "%rsi";
-  my $KSp = "%rdx";
-
-  # parameter 1: PT            %rdi    (pointer to 128 bit)
-  # parameter 2: CT            %rsi    (pointer to 128 bit)
-  # parameter 3: ks            %rdx    (pointer to ks)
-  $code.=<<___;
-.globl aes256gcmsiv_ecb_enc_block
-.type aes256gcmsiv_ecb_enc_block,\@function,3
-.align 16
-aes256gcmsiv_ecb_enc_block:
-.cfi_startproc
-    _CET_ENDBR
-    vmovdqa (%rdi), $STATE_1
-    vpxor ($KSp), $STATE_1, $STATE_1
-    vaesenc 1*16($KSp), $STATE_1, $STATE_1
-    vaesenc 2*16($KSp), $STATE_1, $STATE_1
-    vaesenc 3*16($KSp), $STATE_1, $STATE_1
-    vaesenc 4*16($KSp), $STATE_1, $STATE_1
-    vaesenc 5*16($KSp), $STATE_1, $STATE_1
-    vaesenc 6*16($KSp), $STATE_1, $STATE_1
-    vaesenc 7*16($KSp), $STATE_1, $STATE_1
-    vaesenc 8*16($KSp), $STATE_1, $STATE_1
-    vaesenc 9*16($KSp), $STATE_1, $STATE_1
-    vaesenc 10*16($KSp), $STATE_1, $STATE_1
-    vaesenc 11*16($KSp), $STATE_1, $STATE_1
-    vaesenc 12*16($KSp), $STATE_1, $STATE_1
-    vaesenc 13*16($KSp), $STATE_1, $STATE_1
-    vaesenclast 14*16($KSp), $STATE_1, $STATE_1    # $STATE_1 == IV
-    vmovdqa $STATE_1, (%rsi)
-    ret
-.cfi_endproc
-.size aes256gcmsiv_ecb_enc_block,.-aes256gcmsiv_ecb_enc_block
-___
-}
-aes256gcmsiv_ecb_enc_block();
-
-sub aes256gcmsiv_enc_msg_x4 {
-  my $CTR1 = "%xmm0";
-  my $CTR2 = "%xmm1";
-  my $CTR3 = "%xmm2";
-  my $CTR4 = "%xmm3";
-  my $ADDER = "%xmm4";
-
-  my $STATE1 = "%xmm5";
-  my $STATE2 = "%xmm6";
-  my $STATE3 = "%xmm7";
-  my $STATE4 = "%xmm8";
-
-  my $TMP = "%xmm12";
-  my $TMP2 = "%xmm13";
-  my $TMP3 = "%xmm14";
-  my $IV = "%xmm15";
-
-  my $PT = "%rdi";
-  my $CT = "%rsi";
-  my $TAG = "%rdx";
-  my $KS = "%rcx";
-  my $LEN = "%r8";
-
-  my $aes_round = sub {
-    my ($i) = @_;
-    return <<___;
-    vmovdqu ${\eval($i*16)}($KS), $TMP
-    vaesenc $TMP, $STATE1, $STATE1
-    vaesenc $TMP, $STATE2, $STATE2
-    vaesenc $TMP, $STATE3, $STATE3
-    vaesenc $TMP, $STATE4, $STATE4
-___
-  };
-
-  my $aes_lastround = sub {
-    my ($i) = @_;
-    return <<___;
-    vmovdqu ${\eval($i*16)}($KS), $TMP
-    vaesenclast $TMP, $STATE1, $STATE1
-    vaesenclast $TMP, $STATE2, $STATE2
-    vaesenclast $TMP, $STATE3, $STATE3
-    vaesenclast $TMP, $STATE4, $STATE4
-___
-  };
-
-  # void aes256gcmsiv_enc_msg_x4(unsigned char* PT, unsigned char* CT,
-  #                              unsigned char* TAG, unsigned char* KS,
-  #                              size_t byte_len);
-  # parameter 1: %rdi     #PT
-  # parameter 2: %rsi     #CT
-  # parameter 3: %rdx     #TAG  [127 126 ... 0]  IV=[127...32]
-  # parameter 4: %rcx     #KS
-  # parameter 5: %r8      #LEN MSG_length in bytes
-  $code.=<<___;
-.globl aes256gcmsiv_enc_msg_x4
-.type aes256gcmsiv_enc_msg_x4,\@function,5
-.align 16
-aes256gcmsiv_enc_msg_x4:
-.cfi_startproc
-    _CET_ENDBR
-    test $LEN, $LEN
-    jnz .L256_enc_msg_x4_start
-    ret
-
-.L256_enc_msg_x4_start:
-    movq $LEN, %r10
-    shrq \$4, $LEN                       # LEN = num of blocks
-    shlq \$60, %r10
-    jz .L256_enc_msg_x4_start2
-    addq \$1, $LEN
-
-.L256_enc_msg_x4_start2:
-    movq $LEN, %r10
-    shlq \$62, %r10
-    shrq \$62, %r10
-
-    # make IV from TAG
-    vmovdqa ($TAG), $IV
-    vpor OR_MASK(%rip), $IV, $IV        # IV = [1]TAG[126...32][00..00]
-
-    vmovdqa four(%rip), $ADDER          # Register to increment counters
-    vmovdqa $IV, $CTR1                  # CTR1 = TAG[1][127...32][00..00]
-    vpaddd one(%rip), $IV, $CTR2        # CTR2 = TAG[1][127...32][00..01]
-    vpaddd two(%rip), $IV, $CTR3        # CTR3 = TAG[1][127...32][00..02]
-    vpaddd three(%rip), $IV, $CTR4      # CTR4 = TAG[1][127...32][00..03]
-
-    shrq \$2, $LEN
-    je .L256_enc_msg_x4_check_remainder
-
-    subq \$64, $CT
-    subq \$64, $PT
-
-.L256_enc_msg_x4_loop1:
-    addq \$64, $CT
-    addq \$64, $PT
-
-    vmovdqa $CTR1, $STATE1
-    vmovdqa $CTR2, $STATE2
-    vmovdqa $CTR3, $STATE3
-    vmovdqa $CTR4, $STATE4
-
-    vpxor ($KS), $STATE1, $STATE1
-    vpxor ($KS), $STATE2, $STATE2
-    vpxor ($KS), $STATE3, $STATE3
-    vpxor ($KS), $STATE4, $STATE4
-
-    ${\$aes_round->(1)}
-    vpaddd $ADDER, $CTR1, $CTR1
-    ${\$aes_round->(2)}
-    vpaddd $ADDER, $CTR2, $CTR2
-    ${\$aes_round->(3)}
-    vpaddd $ADDER, $CTR3, $CTR3
-    ${\$aes_round->(4)}
-    vpaddd $ADDER, $CTR4, $CTR4
-
-    ${\$aes_round->(5)}
-    ${\$aes_round->(6)}
-    ${\$aes_round->(7)}
-    ${\$aes_round->(8)}
-    ${\$aes_round->(9)}
-    ${\$aes_round->(10)}
-    ${\$aes_round->(11)}
-    ${\$aes_round->(12)}
-    ${\$aes_round->(13)}
-    ${\$aes_lastround->(14)}
-
-    # XOR with Plaintext
-    vpxor 0*16($PT), $STATE1, $STATE1
-    vpxor 1*16($PT), $STATE2, $STATE2
-    vpxor 2*16($PT), $STATE3, $STATE3
-    vpxor 3*16($PT), $STATE4, $STATE4
-
-    subq \$1, $LEN
-
-    vmovdqu $STATE1, 0*16($CT)
-    vmovdqu $STATE2, 1*16($CT)
-    vmovdqu $STATE3, 2*16($CT)
-    vmovdqu $STATE4, 3*16($CT)
-
-    jne .L256_enc_msg_x4_loop1
-
-    addq \$64, $CT
-    addq \$64, $PT
-
-.L256_enc_msg_x4_check_remainder:
-    cmpq \$0, %r10
-    je .L256_enc_msg_x4_out
-
-.L256_enc_msg_x4_loop2:
-    # encrypt each block separately
-    # CTR1 is the highest counter (even if no LOOP done)
-
-    vmovdqa $CTR1, $STATE1
-    vpaddd one(%rip), $CTR1, $CTR1      # inc counter
-    vpxor ($KS), $STATE1, $STATE1
-    vaesenc 16($KS), $STATE1, $STATE1
-    vaesenc 32($KS), $STATE1, $STATE1
-    vaesenc 48($KS), $STATE1, $STATE1
-    vaesenc 64($KS), $STATE1, $STATE1
-    vaesenc 80($KS), $STATE1, $STATE1
-    vaesenc 96($KS), $STATE1, $STATE1
-    vaesenc 112($KS), $STATE1, $STATE1
-    vaesenc 128($KS), $STATE1, $STATE1
-    vaesenc 144($KS), $STATE1, $STATE1
-    vaesenc 160($KS), $STATE1, $STATE1
-    vaesenc 176($KS), $STATE1, $STATE1
-    vaesenc 192($KS), $STATE1, $STATE1
-    vaesenc 208($KS), $STATE1, $STATE1
-    vaesenclast 224($KS), $STATE1, $STATE1
-
-    # XOR with Plaintext
-    vpxor ($PT), $STATE1, $STATE1
-
-    vmovdqu $STATE1, ($CT)
-
-    addq \$16, $PT
-    addq \$16, $CT
-
-    subq \$1, %r10
-    jne .L256_enc_msg_x4_loop2
-
-.L256_enc_msg_x4_out:
-    ret
-.cfi_endproc
-.size aes256gcmsiv_enc_msg_x4,.-aes256gcmsiv_enc_msg_x4
-___
-}
-aes256gcmsiv_enc_msg_x4();
-
-sub aes256gcmsiv_enc_msg_x8() {
-  my $STATE1 = "%xmm1";
-  my $STATE2 = "%xmm2";
-  my $STATE3 = "%xmm3";
-  my $STATE4 = "%xmm4";
-  my $STATE5 = "%xmm5";
-  my $STATE6 = "%xmm6";
-  my $STATE7 = "%xmm7";
-  my $STATE8 = "%xmm8";
-  my $CTR1 = "%xmm0";
-  my $CTR2 = "%xmm9";
-  my $CTR3 = "%xmm10";
-  my $CTR4 = "%xmm11";
-  my $CTR5 = "%xmm12";
-  my $CTR6 = "%xmm13";
-  my $CTR7 = "%xmm14";
-  my $TMP1 = "%xmm1";
-  my $TMP2 = "%xmm2";
-  my $KS = "%rcx";
-  my $LEN = "%r8";
-  my $PT = "%rdi";
-  my $CT = "%rsi";
-  my $TAG = "%rdx";
-  my $SCHED = "%xmm15";
-
-  my $aes_round8 = sub {
-    my ($i) = @_;
-    return <<___;
-    vmovdqu ${\eval($i*16)}($KS), $SCHED
-    vaesenc $SCHED, $STATE1, $STATE1
-    vaesenc $SCHED, $STATE2, $STATE2
-    vaesenc $SCHED, $STATE3, $STATE3
-    vaesenc $SCHED, $STATE4, $STATE4
-    vaesenc $SCHED, $STATE5, $STATE5
-    vaesenc $SCHED, $STATE6, $STATE6
-    vaesenc $SCHED, $STATE7, $STATE7
-    vaesenc $SCHED, $STATE8, $STATE8
-___
-  };
-
-  my $aes_lastround8 = sub {
-    my ($i) = @_;
-    return <<___;
-    vmovdqu ${\eval($i*16)}($KS), $SCHED
-    vaesenclast $SCHED, $STATE1, $STATE1
-    vaesenclast $SCHED, $STATE2, $STATE2
-    vaesenclast $SCHED, $STATE3, $STATE3
-    vaesenclast $SCHED, $STATE4, $STATE4
-    vaesenclast $SCHED, $STATE5, $STATE5
-    vaesenclast $SCHED, $STATE6, $STATE6
-    vaesenclast $SCHED, $STATE7, $STATE7
-    vaesenclast $SCHED, $STATE8, $STATE8
-___
-  };
-
-  # void ENC_MSG_x8(unsigned char* PT,
-  #                 unsigned char* CT,
-  #                 unsigned char* TAG,
-  #                 unsigned char* KS,
-  #                 size_t byte_len);
-  # parameter 1: %rdi     #PT
-  # parameter 2: %rsi     #CT
-  # parameter 3: %rdx     #TAG        [127 126 ... 0]  IV=[127...32]
-  # parameter 4: %rcx     #KS
-  # parameter 5: %r8      #LEN MSG_length in bytes
-  $code.=<<___;
-.globl aes256gcmsiv_enc_msg_x8
-.type aes256gcmsiv_enc_msg_x8,\@function,5
-.align 16
-aes256gcmsiv_enc_msg_x8:
-.cfi_startproc
-    _CET_ENDBR
-    test $LEN, $LEN
-    jnz .L256_enc_msg_x8_start
-    ret
-
-.L256_enc_msg_x8_start:
-    # Place in stack
-    movq %rsp, %r11
-    subq \$16, %r11
-    andq \$-64, %r11
-
-    movq $LEN, %r10
-    shrq \$4, $LEN                       # LEN = num of blocks
-    shlq \$60, %r10
-    jz .L256_enc_msg_x8_start2
-    addq \$1, $LEN
-
-.L256_enc_msg_x8_start2:
-    movq $LEN, %r10
-    shlq \$61, %r10
-    shrq \$61, %r10
-
-    # Make IV from TAG
-    vmovdqa ($TAG), $TMP1
-    vpor OR_MASK(%rip), $TMP1, $TMP1    # TMP1= IV = [1]TAG[126...32][00..00]
-
-    # store counter8 on the stack
-    vpaddd seven(%rip), $TMP1, $CTR1
-    vmovdqa $CTR1, (%r11)                # CTR8 = TAG[127...32][00..07]
-    vpaddd one(%rip), $TMP1, $CTR2       # CTR2 = TAG[127...32][00..01]
-    vpaddd two(%rip), $TMP1, $CTR3       # CTR3 = TAG[127...32][00..02]
-    vpaddd three(%rip), $TMP1, $CTR4     # CTR4 = TAG[127...32][00..03]
-    vpaddd four(%rip), $TMP1, $CTR5      # CTR5 = TAG[127...32][00..04]
-    vpaddd five(%rip), $TMP1, $CTR6      # CTR6 = TAG[127...32][00..05]
-    vpaddd six(%rip), $TMP1, $CTR7       # CTR7 = TAG[127...32][00..06]
-    vmovdqa $TMP1, $CTR1                 # CTR1 = TAG[127...32][00..00]
-
-    shrq \$3, $LEN
-    jz .L256_enc_msg_x8_check_remainder
-
-    subq \$128, $CT
-    subq \$128, $PT
-
-.L256_enc_msg_x8_loop1:
-    addq \$128, $CT
-    addq \$128, $PT
-
-    vmovdqa $CTR1, $STATE1
-    vmovdqa $CTR2, $STATE2
-    vmovdqa $CTR3, $STATE3
-    vmovdqa $CTR4, $STATE4
-    vmovdqa $CTR5, $STATE5
-    vmovdqa $CTR6, $STATE6
-    vmovdqa $CTR7, $STATE7
-    # move from stack
-    vmovdqa (%r11), $STATE8
-
-    vpxor ($KS), $STATE1, $STATE1
-    vpxor ($KS), $STATE2, $STATE2
-    vpxor ($KS), $STATE3, $STATE3
-    vpxor ($KS), $STATE4, $STATE4
-    vpxor ($KS), $STATE5, $STATE5
-    vpxor ($KS), $STATE6, $STATE6
-    vpxor ($KS), $STATE7, $STATE7
-    vpxor ($KS), $STATE8, $STATE8
-
-    ${\$aes_round8->(1)}
-    vmovdqa (%r11), $CTR7                # deal with CTR8
-    vpaddd eight(%rip), $CTR7, $CTR7
-    vmovdqa $CTR7, (%r11)
-    ${\$aes_round8->(2)}
-    vpsubd one(%rip), $CTR7, $CTR7
-    ${\$aes_round8->(3)}
-    vpaddd eight(%rip), $CTR1, $CTR1
-    ${\$aes_round8->(4)}
-    vpaddd eight(%rip), $CTR2, $CTR2
-    ${\$aes_round8->(5)}
-    vpaddd eight(%rip), $CTR3, $CTR3
-    ${\$aes_round8->(6)}
-    vpaddd eight(%rip), $CTR4, $CTR4
-    ${\$aes_round8->(7)}
-    vpaddd eight(%rip), $CTR5, $CTR5
-    ${\$aes_round8->(8)}
-    vpaddd eight(%rip), $CTR6, $CTR6
-    ${\$aes_round8->(9)}
-    ${\$aes_round8->(10)}
-    ${\$aes_round8->(11)}
-    ${\$aes_round8->(12)}
-    ${\$aes_round8->(13)}
-    ${\$aes_lastround8->(14)}
-
-    # XOR with Plaintext
-    vpxor 0*16($PT), $STATE1, $STATE1
-    vpxor 1*16($PT), $STATE2, $STATE2
-    vpxor 2*16($PT), $STATE3, $STATE3
-    vpxor 3*16($PT), $STATE4, $STATE4
-    vpxor 4*16($PT), $STATE5, $STATE5
-    vpxor 5*16($PT), $STATE6, $STATE6
-    vpxor 6*16($PT), $STATE7, $STATE7
-    vpxor 7*16($PT), $STATE8, $STATE8
-
-    subq \$1, $LEN
-
-    vmovdqu $STATE1, 0*16($CT)
-    vmovdqu $STATE2, 1*16($CT)
-    vmovdqu $STATE3, 2*16($CT)
-    vmovdqu $STATE4, 3*16($CT)
-    vmovdqu $STATE5, 4*16($CT)
-    vmovdqu $STATE6, 5*16($CT)
-    vmovdqu $STATE7, 6*16($CT)
-    vmovdqu $STATE8, 7*16($CT)
-
-    jne .L256_enc_msg_x8_loop1
-
-    addq \$128, $CT
-    addq \$128, $PT
-
-.L256_enc_msg_x8_check_remainder:
-   cmpq \$0, %r10
-   je .L256_enc_msg_x8_out
-
-.L256_enc_msg_x8_loop2:
-    # encrypt each block separately
-    # CTR1 is the highest counter (even if no LOOP done)
-    vmovdqa $CTR1, $STATE1
-    vpaddd one(%rip), $CTR1, $CTR1
-
-    vpxor ($KS), $STATE1, $STATE1
-    vaesenc 16($KS), $STATE1, $STATE1
-    vaesenc 32($KS), $STATE1, $STATE1
-    vaesenc 48($KS), $STATE1, $STATE1
-    vaesenc 64($KS), $STATE1, $STATE1
-    vaesenc 80($KS), $STATE1, $STATE1
-    vaesenc 96($KS), $STATE1, $STATE1
-    vaesenc 112($KS), $STATE1, $STATE1
-    vaesenc 128($KS), $STATE1, $STATE1
-    vaesenc 144($KS), $STATE1, $STATE1
-    vaesenc 160($KS), $STATE1, $STATE1
-    vaesenc 176($KS), $STATE1, $STATE1
-    vaesenc 192($KS), $STATE1, $STATE1
-    vaesenc 208($KS), $STATE1, $STATE1
-    vaesenclast 224($KS), $STATE1, $STATE1
-
-    # XOR with Plaintext
-    vpxor ($PT), $STATE1, $STATE1
-
-    vmovdqu $STATE1, ($CT)
-
-    addq \$16, $PT
-    addq \$16, $CT
-    subq \$1, %r10
-    jnz .L256_enc_msg_x8_loop2
-
-.L256_enc_msg_x8_out:
-    ret
-
-.cfi_endproc
-.size aes256gcmsiv_enc_msg_x8,.-aes256gcmsiv_enc_msg_x8
-___
-}
-aes256gcmsiv_enc_msg_x8();
-aesgcmsiv_dec(1);
-
-sub aes256gcmsiv_kdf {
-  my $ONE = "%xmm8";
-  my $BLOCK1 = "%xmm4";
-  my $BLOCK2 = "%xmm6";
-  my $BLOCK3 = "%xmm7";
-  my $BLOCK4 = "%xmm11";
-  my $BLOCK5 = "%xmm12";
-  my $BLOCK6 = "%xmm13";
-
-  my $enc_roundx6 = sub {
-    my ($i, $j) = @_;
-    return <<___;
-    vmovdqa ${\eval($i*16)}(%rdx), $j
-    vaesenc $j, $BLOCK1, $BLOCK1
-    vaesenc $j, $BLOCK2, $BLOCK2
-    vaesenc $j, $BLOCK3, $BLOCK3
-    vaesenc $j, $BLOCK4, $BLOCK4
-    vaesenc $j, $BLOCK5, $BLOCK5
-    vaesenc $j, $BLOCK6, $BLOCK6
-___
-  };
-
-  my $enc_roundlastx6 = sub {
-    my ($i, $j) = @_;
-    return <<___;
-    vmovdqa ${\eval($i*16)}(%rdx), $j
-    vaesenclast $j, $BLOCK1, $BLOCK1
-    vaesenclast $j, $BLOCK2, $BLOCK2
-    vaesenclast $j, $BLOCK3, $BLOCK3
-    vaesenclast $j, $BLOCK4, $BLOCK4
-    vaesenclast $j, $BLOCK5, $BLOCK5
-    vaesenclast $j, $BLOCK6, $BLOCK6
-___
-  };
-
-  # void aes256gcmsiv_kdf(const uint8_t nonce[16],
-  #                       uint8_t *out_key_material,
-  #                       const uint8_t *key_schedule);
-  $code.=<<___;
-.globl aes256gcmsiv_kdf
-.type aes256gcmsiv_kdf,\@function,3
-.align 16
-aes256gcmsiv_kdf:
-.cfi_startproc
-    _CET_ENDBR
-# parameter 1: %rdi                         Pointer to NONCE
-# parameter 2: %rsi                         Pointer to CT
-# parameter 4: %rdx                         Pointer to keys
-
-    vmovdqa (%rdx), %xmm1                  # xmm1 = first 16 bytes of random key
-    vmovdqa 0*16(%rdi), $BLOCK1
-    vmovdqa and_mask(%rip), $BLOCK4
-    vmovdqa one(%rip), $ONE
-    vpshufd \$0x90, $BLOCK1, $BLOCK1
-    vpand $BLOCK4, $BLOCK1, $BLOCK1
-    vpaddd $ONE, $BLOCK1, $BLOCK2
-    vpaddd $ONE, $BLOCK2, $BLOCK3
-    vpaddd $ONE, $BLOCK3, $BLOCK4
-    vpaddd $ONE, $BLOCK4, $BLOCK5
-    vpaddd $ONE, $BLOCK5, $BLOCK6
-
-    vpxor %xmm1, $BLOCK1, $BLOCK1
-    vpxor %xmm1, $BLOCK2, $BLOCK2
-    vpxor %xmm1, $BLOCK3, $BLOCK3
-    vpxor %xmm1, $BLOCK4, $BLOCK4
-    vpxor %xmm1, $BLOCK5, $BLOCK5
-    vpxor %xmm1, $BLOCK6, $BLOCK6
-
-    ${\$enc_roundx6->(1, "%xmm1")}
-    ${\$enc_roundx6->(2, "%xmm2")}
-    ${\$enc_roundx6->(3, "%xmm1")}
-    ${\$enc_roundx6->(4, "%xmm2")}
-    ${\$enc_roundx6->(5, "%xmm1")}
-    ${\$enc_roundx6->(6, "%xmm2")}
-    ${\$enc_roundx6->(7, "%xmm1")}
-    ${\$enc_roundx6->(8, "%xmm2")}
-    ${\$enc_roundx6->(9, "%xmm1")}
-    ${\$enc_roundx6->(10, "%xmm2")}
-    ${\$enc_roundx6->(11, "%xmm1")}
-    ${\$enc_roundx6->(12, "%xmm2")}
-    ${\$enc_roundx6->(13, "%xmm1")}
-    ${\$enc_roundlastx6->(14, "%xmm2")}
-
-    vmovdqa $BLOCK1, 0*16(%rsi)
-    vmovdqa $BLOCK2, 1*16(%rsi)
-    vmovdqa $BLOCK3, 2*16(%rsi)
-    vmovdqa $BLOCK4, 3*16(%rsi)
-    vmovdqa $BLOCK5, 4*16(%rsi)
-    vmovdqa $BLOCK6, 5*16(%rsi)
-    ret
-.cfi_endproc
-.size aes256gcmsiv_kdf, .-aes256gcmsiv_kdf
-___
-}
-aes256gcmsiv_kdf();
-
-print $code;
-
-close STDOUT or die "error closing STDOUT: $!";
diff --git a/src/crypto/cipher/asm/chacha20_poly1305_armv8.pl b/src/crypto/cipher/asm/chacha20_poly1305_armv8.pl
deleted file mode 100644
index 06a35e0..0000000
--- a/src/crypto/cipher/asm/chacha20_poly1305_armv8.pl
+++ /dev/null
@@ -1,1643 +0,0 @@
-#!/usr/bin/env perl
-
-# Copyright (c) 2020, CloudFlare Ltd.
-#
-# 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
-#
-#     https://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.
-
-##############################################################################
-#                                                                            #
-# Author:  Vlad Krasnov                                                      #
-#                                                                            #
-##############################################################################
-
-$flavour = shift;
-while (($output=shift) && ($output!~/\w[\w\-]*\.\w+$/)) {}
-
-$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
-( $xlate="${dir}arm-xlate.pl" and -f $xlate ) or
-( $xlate="${dir}../../perlasm/arm-xlate.pl" and -f $xlate) or
-die "can't locate arm-xlate.pl";
-
-open OUT,"| \"$^X\" $xlate $flavour $output";
-*STDOUT=*OUT;
-
-my ($oup,$inp,$inl,$adp,$adl,$keyp,$itr1,$itr2) = ("x0","x1","x2","x3","x4","x5","x6","x7");
-my ($acc0,$acc1,$acc2) = map("x$_",(8..10));
-my ($t0,$t1,$t2,$t3) = map("x$_",(11..14));
-my ($one, $r0, $r1) = ("x15","x16","x17");
-my ($t0w) = $t0 =~ s/x/w/r;
-
-my ($A0,$A1,$A2,$A3,$A4,$B0,$B1,$B2,$B3,$B4,$C0,$C1,$C2,$C3,$C4,$D0,$D1,$D2,$D3,$D4) = map("v$_",(0..19));
-my ($T0,$T1,$T2,$T3) = map("v$_",(20..23));
-
-my $CONSTS = "v24";
-my $INC = "v25";
-my $ROL8 = "v26";
-my $CLAMP = "v27";
-
-my ($B_STORE, $C_STORE, $D_STORE) = map("v$_",(28..30));
-
-my $S_STORE = $CLAMP;
-my $LEN_STORE = "v31";
-
-sub chacha_qr {
-my ($a,$b,$c,$d,$t,$dir)=@_;
-my ($shift_b,$shift_d) = $dir =~ /left/ ? ("#4","#12") : ("#12","#4");
-$code.=<<___;
-    add   $a.4s, $a.4s, $b.4s
-    eor   $d.16b, $d.16b, $a.16b
-    rev32 $d.8h, $d.8h
-
-    add   $c.4s, $c.4s, $d.4s
-    eor   $b.16b, $b.16b, $c.16b
-    ushr  $t.4s, $b.4s, #20
-    sli   $t.4s, $b.4s, #12
-___
-    ($t,$b) = ($b,$t);
-$code.=<<___;
-    add   $a.4s, $a.4s, $b.4s
-    eor   $d.16b, $d.16b, $a.16b
-    tbl   $d.16b, {$d.16b}, $ROL8.16b
-
-    add   $c.4s, $c.4s, $d.4s
-    eor   $b.16b, $b.16b, $c.16b
-    ushr  $t.4s, $b.4s, #25
-    sli   $t.4s, $b.4s, #7
-___
-    ($t,$b) = ($b,$t);
-$code.=<<___;
-    ext $b.16b, $b.16b, $b.16b, $shift_b
-    ext $c.16b, $c.16b, $c.16b, #8
-    ext $d.16b, $d.16b, $d.16b, $shift_d
-___
-}
-
-sub poly_add {
-my ($src)=@_;
-$code.="ldp  $t0, $t1, [$src], 16
-        adds $acc0, $acc0, $t0
-        adcs $acc1, $acc1, $t1
-        adc  $acc2, $acc2, $one\n";
-}
-
-sub poly_add_vec {
-my ($src)=@_;
-$code.="mov  $t0, $src.d[0]
-        mov  $t1, $src.d[1]
-        adds $acc0, $acc0, $t0
-        adcs $acc1, $acc1, $t1
-        adc  $acc2, $acc2, $one\n";
-}
-
-sub poly_stage1 {
-$code.="mul   $t0, $acc0, $r0     // [t2:t1:t0] = [acc2:acc1:acc0] * r0
-        umulh $t1, $acc0, $r0
-        mul   $t2, $acc1, $r0
-        umulh $t3, $acc1, $r0
-        adds  $t1, $t1, $t2
-        mul   $t2, $acc2, $r0
-        adc   $t2, $t2, $t3\n";
-}
-
-sub poly_stage2 {
-$code.="mul   $t3, $acc0, $r1       // [t3:t2:t1:t0] = [acc2:acc1:acc0] * [r1:r0]
-        umulh $acc0, $acc0, $r1
-        adds  $t1, $t1, $t3
-        mul   $t3, $acc1, $r1
-        umulh $acc1, $acc1, $r1
-        adcs  $t3, $t3, $acc0
-        mul   $acc2, $acc2, $r1
-        adc   $acc2, $acc2, $acc1
-        adds  $t2, $t2, $t3
-        adc   $t3, $acc2, xzr\n";
-}
-
-# At the beginning of the reduce stage t = [t3:t2:t1:t0] is a product of
-# r = [r1:r0] and acc = [acc2:acc1:acc0]
-# r is 124 bits at most (due to clamping) and acc is 131 bits at most
-# (acc2 is at most 4 before the addition and can be at most 6 when we add in
-# the next block) therefore t is at most 255 bits big, and t3 is 63 bits.
-sub poly_reduce_stage {
-$code.="and  $acc2, $t2, #3         // At this point acc2 is 2 bits at most (value of 3)
-        and  $acc0, $t2, #-4
-        extr $t2, $t3, $t2, #2
-        adds $acc0, $acc0, $t0
-        lsr  $t0, $t3, #2
-        adc  $acc1, $t3, $t0        // No carry out since t0 is 61 bits and t3 is 63 bits
-        adds $acc0, $acc0, $t2
-        adcs $acc1, $acc1, $t1
-        adc  $acc2, $acc2, xzr      // At this point acc2 has the value of 4 at most \n";
-}
-
-sub poly_mul {
-    &poly_stage1();
-    &poly_stage2();
-    &poly_reduce_stage();
-}
-
-sub chacha_qr_x3 {
-my ($dir)=@_;
-my ($shift_b,$shift_d) = $dir =~ /left/ ? ("#4","#12") : ("#12","#4");
-$code.=<<___;
-    add   $A0.4s, $A0.4s, $B0.4s
-    add   $A1.4s, $A1.4s, $B1.4s
-    add   $A2.4s, $A2.4s, $B2.4s
-    eor   $D0.16b, $D0.16b, $A0.16b
-    eor   $D1.16b, $D1.16b, $A1.16b
-    eor   $D2.16b, $D2.16b, $A2.16b
-    rev32 $D0.8h, $D0.8h
-    rev32 $D1.8h, $D1.8h
-    rev32 $D2.8h, $D2.8h
-
-    add   $C0.4s, $C0.4s, $D0.4s
-    add   $C1.4s, $C1.4s, $D1.4s
-    add   $C2.4s, $C2.4s, $D2.4s
-    eor   $B0.16b, $B0.16b, $C0.16b
-    eor   $B1.16b, $B1.16b, $C1.16b
-    eor   $B2.16b, $B2.16b, $C2.16b
-    ushr  $T0.4s, $B0.4s, #20
-    sli   $T0.4s, $B0.4s, #12
-    ushr  $B0.4s, $B1.4s, #20
-    sli   $B0.4s, $B1.4s, #12
-    ushr  $B1.4s, $B2.4s, #20
-    sli   $B1.4s, $B2.4s, #12
-
-    add   $A0.4s, $A0.4s, $T0.4s
-    add   $A1.4s, $A1.4s, $B0.4s
-    add   $A2.4s, $A2.4s, $B1.4s
-    eor   $D0.16b, $D0.16b, $A0.16b
-    eor   $D1.16b, $D1.16b, $A1.16b
-    eor   $D2.16b, $D2.16b, $A2.16b
-    tbl   $D0.16b, {$D0.16b}, $ROL8.16b
-    tbl   $D1.16b, {$D1.16b}, $ROL8.16b
-    tbl   $D2.16b, {$D2.16b}, $ROL8.16b
-
-    add   $C0.4s, $C0.4s, $D0.4s
-    add   $C1.4s, $C1.4s, $D1.4s
-    add   $C2.4s, $C2.4s, $D2.4s
-    eor   $T0.16b, $T0.16b, $C0.16b
-    eor   $B0.16b, $B0.16b, $C1.16b
-    eor   $B1.16b, $B1.16b, $C2.16b
-    ushr  $B2.4s, $B1.4s, #25
-    sli   $B2.4s, $B1.4s, #7
-    ushr  $B1.4s, $B0.4s, #25
-    sli   $B1.4s, $B0.4s, #7
-    ushr  $B0.4s, $T0.4s, #25
-    sli   $B0.4s, $T0.4s, #7
-
-    ext $B0.16b, $B0.16b, $B0.16b, $shift_b
-    ext $B1.16b, $B1.16b, $B1.16b, $shift_b
-    ext $B2.16b, $B2.16b, $B2.16b, $shift_b
-
-    ext $C0.16b, $C0.16b, $C0.16b, #8
-    ext $C1.16b, $C1.16b, $C1.16b, #8
-    ext $C2.16b, $C2.16b, $C2.16b, #8
-
-    ext $D0.16b, $D0.16b, $D0.16b, $shift_d
-    ext $D1.16b, $D1.16b, $D1.16b, $shift_d
-    ext $D2.16b, $D2.16b, $D2.16b, $shift_d
-___
-}
-
-# When preparing 5 ChaCha20 blocks in parallel, we operate on 4 blocks vertically as introduced by Andrew Moon
-# the fifth block is done horizontally
-sub chacha_qr_x5 {
-my ($dir)=@_;
-my ($a0,$a1,$a2,$a3) = $dir =~ /left/ ? ($A0,$A1,$A2,$A3) : ($A0,$A1,$A2,$A3);
-my ($b0,$b1,$b2,$b3) = $dir =~ /left/ ? ($B0,$B1,$B2,$B3) : ($B1,$B2,$B3,$B0);
-my ($c0,$c1,$c2,$c3) = $dir =~ /left/ ? ($C0,$C1,$C2,$C3) : ($C2,$C3,$C0,$C1);
-my ($d0,$d1,$d2,$d3) = $dir =~ /left/ ? ($D0,$D1,$D2,$D3) : ($D3,$D0,$D1,$D2);
-my ($shift_b,$shift_d) = $dir =~ /left/ ? ("#4","#12") : ("#12","#4");
-$code.=<<___;
-    add   $a0.4s, $a0.4s, $b0.4s
-    add   $a1.4s, $a1.4s, $b1.4s
-    add   $a2.4s, $a2.4s, $b2.4s
-    add   $a3.4s, $a3.4s, $b3.4s
-    add   $A4.4s, $A4.4s, $B4.4s
-
-    eor   $d0.16b, $d0.16b, $a0.16b
-    eor   $d1.16b, $d1.16b, $a1.16b
-    eor   $d2.16b, $d2.16b, $a2.16b
-    eor   $d3.16b, $d3.16b, $a3.16b
-    eor   $D4.16b, $D4.16b, $A4.16b
-
-    rev32 $d0.8h, $d0.8h
-    rev32 $d1.8h, $d1.8h
-    rev32 $d2.8h, $d2.8h
-    rev32 $d3.8h, $d3.8h
-    rev32 $D4.8h, $D4.8h
-
-    add   $c0.4s, $c0.4s, $d0.4s
-    add   $c1.4s, $c1.4s, $d1.4s
-    add   $c2.4s, $c2.4s, $d2.4s
-    add   $c3.4s, $c3.4s, $d3.4s
-    add   $C4.4s, $C4.4s, $D4.4s
-
-    eor   $b0.16b, $b0.16b, $c0.16b
-    eor   $b1.16b, $b1.16b, $c1.16b
-    eor   $b2.16b, $b2.16b, $c2.16b
-    eor   $b3.16b, $b3.16b, $c3.16b
-    eor   $B4.16b, $B4.16b, $C4.16b
-
-    ushr  $T0.4s, $b0.4s, #20
-    sli   $T0.4s, $b0.4s, #12
-    ushr  $b0.4s, $b1.4s, #20
-    sli   $b0.4s, $b1.4s, #12
-    ushr  $b1.4s, $b2.4s, #20
-    sli   $b1.4s, $b2.4s, #12
-    ushr  $b2.4s, $b3.4s, #20
-    sli   $b2.4s, $b3.4s, #12
-    ushr  $b3.4s, $B4.4s, #20
-    sli   $b3.4s, $B4.4s, #12
-
-    add   $a0.4s, $a0.4s, $T0.4s
-    add   $a1.4s, $a1.4s, $b0.4s
-    add   $a2.4s, $a2.4s, $b1.4s
-    add   $a3.4s, $a3.4s, $b2.4s
-    add   $A4.4s, $A4.4s, $b3.4s
-
-    eor   $d0.16b, $d0.16b, $a0.16b
-    eor   $d1.16b, $d1.16b, $a1.16b
-    eor   $d2.16b, $d2.16b, $a2.16b
-    eor   $d3.16b, $d3.16b, $a3.16b
-    eor   $D4.16b, $D4.16b, $A4.16b
-
-    tbl   $d0.16b, {$d0.16b}, $ROL8.16b
-    tbl   $d1.16b, {$d1.16b}, $ROL8.16b
-    tbl   $d2.16b, {$d2.16b}, $ROL8.16b
-    tbl   $d3.16b, {$d3.16b}, $ROL8.16b
-    tbl   $D4.16b, {$D4.16b}, $ROL8.16b
-
-    add   $c0.4s, $c0.4s, $d0.4s
-    add   $c1.4s, $c1.4s, $d1.4s
-    add   $c2.4s, $c2.4s, $d2.4s
-    add   $c3.4s, $c3.4s, $d3.4s
-    add   $C4.4s, $C4.4s, $D4.4s
-
-    eor   $T0.16b, $T0.16b, $c0.16b
-    eor   $b0.16b, $b0.16b, $c1.16b
-    eor   $b1.16b, $b1.16b, $c2.16b
-    eor   $b2.16b, $b2.16b, $c3.16b
-    eor   $b3.16b, $b3.16b, $C4.16b
-
-    ushr  $B4.4s, $b3.4s, #25
-    sli   $B4.4s, $b3.4s, #7
-    ushr  $b3.4s, $b2.4s, #25
-    sli   $b3.4s, $b2.4s, #7
-    ushr  $b2.4s, $b1.4s, #25
-    sli   $b2.4s, $b1.4s, #7
-    ushr  $b1.4s, $b0.4s, #25
-    sli   $b1.4s, $b0.4s, #7
-    ushr  $b0.4s, $T0.4s, #25
-    sli   $b0.4s, $T0.4s, #7
-
-    ext $B4.16b, $B4.16b, $B4.16b, $shift_b
-    ext $C4.16b, $C4.16b, $C4.16b, #8
-    ext $D4.16b, $D4.16b, $D4.16b, $shift_d
-___
-}
-
-{
-$code.=<<___;
-.section .rodata
-
-.align 7
-.Lchacha20_consts:
-.byte 'e','x','p','a','n','d',' ','3','2','-','b','y','t','e',' ','k'
-.Linc:
-.long 1,2,3,4
-.Lrol8:
-.byte 3,0,1,2, 7,4,5,6, 11,8,9,10, 15,12,13,14
-.Lclamp:
-.quad 0x0FFFFFFC0FFFFFFF, 0x0FFFFFFC0FFFFFFC
-
-.text
-
-.type   .Lpoly_hash_ad_internal,%function
-.align  6
-.Lpoly_hash_ad_internal:
-    .cfi_startproc
-    cbnz $adl, .Lpoly_hash_intro
-    ret
-
-.Lpoly_hash_intro:
-    cmp $adl, #16
-    b.lt .Lpoly_hash_ad_tail
-___
-        &poly_add($adp);
-        &poly_mul();
-$code.=<<___;
-        sub $adl, $adl, #16
-        b .Lpoly_hash_ad_internal
-
-.Lpoly_hash_ad_tail:
-    cbz $adl, .Lpoly_hash_ad_ret
-
-    eor $T0.16b, $T0.16b, $T0.16b // Use T0 to load the AAD
-    sub $adl, $adl, #1
-
-.Lpoly_hash_tail_16_compose:
-        ext  $T0.16b, $T0.16b, $T0.16b, #15
-        ldrb $t0w, [$adp, $adl]
-        mov  $T0.b[0], $t0w
-        subs $adl, $adl, #1
-        b.ge .Lpoly_hash_tail_16_compose
-___
-    &poly_add_vec($T0);
-    &poly_mul();
-$code.=<<___;
-
-.Lpoly_hash_ad_ret:
-    ret
-    .cfi_endproc
-.size .Lpoly_hash_ad_internal, .-.Lpoly_hash_ad_internal
-
-/////////////////////////////////
-//
-// void chacha20_poly1305_seal(uint8_t *pt, uint8_t *ct, size_t len_in, uint8_t *ad, size_t len_ad, union open_data *seal_data);
-//
-.globl  chacha20_poly1305_seal
-.type   chacha20_poly1305_seal,%function
-.align  6
-chacha20_poly1305_seal:
-    AARCH64_SIGN_LINK_REGISTER
-.cfi_startproc
-    stp x29, x30, [sp, #-80]!
-.cfi_def_cfa_offset 80
-.cfi_offset w30, -72
-.cfi_offset w29, -80
-    mov x29, sp
-    // We probably could do .cfi_def_cfa w29, 80 at this point, but since
-    // we don't actually use the frame pointer like that, it's probably not
-    // worth bothering.
-    stp d8, d9, [sp, #16]
-    stp d10, d11, [sp, #32]
-    stp d12, d13, [sp, #48]
-    stp d14, d15, [sp, #64]
-.cfi_offset b15, -8
-.cfi_offset b14, -16
-.cfi_offset b13, -24
-.cfi_offset b12, -32
-.cfi_offset b11, -40
-.cfi_offset b10, -48
-.cfi_offset b9, -56
-.cfi_offset b8, -64
-
-    adrp $t0, :pg_hi21:.Lchacha20_consts
-    add  $t0, $t0, :lo12:.Lchacha20_consts
-
-    ld1 {$CONSTS.16b - $CLAMP.16b}, [$t0] // Load the CONSTS, INC, ROL8 and CLAMP values
-    ld1 {$B_STORE.16b - $D_STORE.16b}, [$keyp]
-
-    mov $one, #1 // Prepare the Poly1305 state
-    mov $acc0, #0
-    mov $acc1, #0
-    mov $acc2, #0
-
-    ldr $t1, [$keyp, #56]   // The total cipher text length includes extra_in_len
-    add $t1, $t1, $inl
-    mov $LEN_STORE.d[0], $adl  // Store the input and aad lengths
-    mov $LEN_STORE.d[1], $t1
-
-    cmp $inl, #128
-    b.le .Lseal_128 // Optimization for smaller buffers
-
-    // Initially we prepare 5 ChaCha20 blocks. Four to encrypt up to 4 blocks (256 bytes) of plaintext,
-    // and one for the Poly1305 R and S keys. The first four blocks (A0-A3..D0-D3) are computed vertically,
-    // the fifth block (A4-D4) horizontally.
-    ld4r {$A0.4s-$A3.4s}, [$t0]
-    mov $A4.16b, $CONSTS.16b
-
-    ld4r {$B0.4s-$B3.4s}, [$keyp], #16
-    mov $B4.16b, $B_STORE.16b
-
-    ld4r {$C0.4s-$C3.4s}, [$keyp], #16
-    mov $C4.16b, $C_STORE.16b
-
-    ld4r {$D0.4s-$D3.4s}, [$keyp]
-    add $D0.4s, $D0.4s, $INC.4s
-    mov $D4.16b, $D_STORE.16b
-
-    sub $keyp, $keyp, #32
-
-    mov  $itr1, #10
-
-.align 5
-.Lseal_init_rounds:
-___
-        &chacha_qr_x5("left");
-        &chacha_qr_x5("right");
-$code.=<<___;
-        subs $itr1, $itr1, #1
-    b.hi .Lseal_init_rounds
-
-    add $D0.4s, $D0.4s, $INC.4s
-    mov $t0, #4
-    dup $T0.4s, $t0w
-    add $INC.4s, $INC.4s, $T0.4s
-
-    zip1 $T0.4s, $A0.4s, $A1.4s
-    zip2 $T1.4s, $A0.4s, $A1.4s
-    zip1 $T2.4s, $A2.4s, $A3.4s
-    zip2 $T3.4s, $A2.4s, $A3.4s
-
-    zip1 $A0.2d, $T0.2d, $T2.2d
-    zip2 $A1.2d, $T0.2d, $T2.2d
-    zip1 $A2.2d, $T1.2d, $T3.2d
-    zip2 $A3.2d, $T1.2d, $T3.2d
-
-    zip1 $T0.4s, $B0.4s, $B1.4s
-    zip2 $T1.4s, $B0.4s, $B1.4s
-    zip1 $T2.4s, $B2.4s, $B3.4s
-    zip2 $T3.4s, $B2.4s, $B3.4s
-
-    zip1 $B0.2d, $T0.2d, $T2.2d
-    zip2 $B1.2d, $T0.2d, $T2.2d
-    zip1 $B2.2d, $T1.2d, $T3.2d
-    zip2 $B3.2d, $T1.2d, $T3.2d
-
-    zip1 $T0.4s, $C0.4s, $C1.4s
-    zip2 $T1.4s, $C0.4s, $C1.4s
-    zip1 $T2.4s, $C2.4s, $C3.4s
-    zip2 $T3.4s, $C2.4s, $C3.4s
-
-    zip1 $C0.2d, $T0.2d, $T2.2d
-    zip2 $C1.2d, $T0.2d, $T2.2d
-    zip1 $C2.2d, $T1.2d, $T3.2d
-    zip2 $C3.2d, $T1.2d, $T3.2d
-
-    zip1 $T0.4s, $D0.4s, $D1.4s
-    zip2 $T1.4s, $D0.4s, $D1.4s
-    zip1 $T2.4s, $D2.4s, $D3.4s
-    zip2 $T3.4s, $D2.4s, $D3.4s
-
-    zip1 $D0.2d, $T0.2d, $T2.2d
-    zip2 $D1.2d, $T0.2d, $T2.2d
-    zip1 $D2.2d, $T1.2d, $T3.2d
-    zip2 $D3.2d, $T1.2d, $T3.2d
-
-    add $A4.4s, $A4.4s, $CONSTS.4s
-    add $B4.4s, $B4.4s, $B_STORE.4s
-    and $A4.16b, $A4.16b, $CLAMP.16b
-
-    add $A0.4s, $A0.4s, $CONSTS.4s
-    add $B0.4s, $B0.4s, $B_STORE.4s
-    add $C0.4s, $C0.4s, $C_STORE.4s
-    add $D0.4s, $D0.4s, $D_STORE.4s
-
-    add $A1.4s, $A1.4s, $CONSTS.4s
-    add $B1.4s, $B1.4s, $B_STORE.4s
-    add $C1.4s, $C1.4s, $C_STORE.4s
-    add $D1.4s, $D1.4s, $D_STORE.4s
-
-    add $A2.4s, $A2.4s, $CONSTS.4s
-    add $B2.4s, $B2.4s, $B_STORE.4s
-    add $C2.4s, $C2.4s, $C_STORE.4s
-    add $D2.4s, $D2.4s, $D_STORE.4s
-
-    add $A3.4s, $A3.4s, $CONSTS.4s
-    add $B3.4s, $B3.4s, $B_STORE.4s
-    add $C3.4s, $C3.4s, $C_STORE.4s
-    add $D3.4s, $D3.4s, $D_STORE.4s
-
-    mov $r0, $A4.d[0] // Move the R key to GPRs
-    mov $r1, $A4.d[1]
-    mov $S_STORE.16b, $B4.16b // Store the S key
-
-    bl  .Lpoly_hash_ad_internal
-
-    mov $adp, $oup
-    cmp $inl, #256
-    b.le .Lseal_tail
-
-    ld1 {$T0.16b - $T3.16b}, [$inp], #64
-    eor $T0.16b, $T0.16b, $A0.16b
-    eor $T1.16b, $T1.16b, $B0.16b
-    eor $T2.16b, $T2.16b, $C0.16b
-    eor $T3.16b, $T3.16b, $D0.16b
-    st1 {$T0.16b - $T3.16b}, [$oup], #64
-
-    ld1 {$T0.16b - $T3.16b}, [$inp], #64
-    eor $T0.16b, $T0.16b, $A1.16b
-    eor $T1.16b, $T1.16b, $B1.16b
-    eor $T2.16b, $T2.16b, $C1.16b
-    eor $T3.16b, $T3.16b, $D1.16b
-    st1 {$T0.16b - $T3.16b}, [$oup], #64
-
-    ld1 {$T0.16b - $T3.16b}, [$inp], #64
-    eor $T0.16b, $T0.16b, $A2.16b
-    eor $T1.16b, $T1.16b, $B2.16b
-    eor $T2.16b, $T2.16b, $C2.16b
-    eor $T3.16b, $T3.16b, $D2.16b
-    st1 {$T0.16b - $T3.16b}, [$oup], #64
-
-    ld1 {$T0.16b - $T3.16b}, [$inp], #64
-    eor $T0.16b, $T0.16b, $A3.16b
-    eor $T1.16b, $T1.16b, $B3.16b
-    eor $T2.16b, $T2.16b, $C3.16b
-    eor $T3.16b, $T3.16b, $D3.16b
-    st1 {$T0.16b - $T3.16b}, [$oup], #64
-
-    sub $inl, $inl, #256
-
-    mov $itr1, #4 // In the first run of the loop we need to hash 256 bytes, therefore we hash one block for the first 4 rounds
-    mov $itr2, #6 // and two blocks for the remaining 6, for a total of (1 * 4 + 2 * 6) * 16 = 256
-
-.Lseal_main_loop:
-    adrp $t0, :pg_hi21:.Lchacha20_consts
-    add  $t0, $t0, :lo12:.Lchacha20_consts
-
-    ld4r {$A0.4s-$A3.4s}, [$t0]
-    mov $A4.16b, $CONSTS.16b
-
-    ld4r {$B0.4s-$B3.4s}, [$keyp], #16
-    mov $B4.16b, $B_STORE.16b
-
-    ld4r {$C0.4s-$C3.4s}, [$keyp], #16
-    mov $C4.16b, $C_STORE.16b
-
-    ld4r {$D0.4s-$D3.4s}, [$keyp]
-    add $D0.4s, $D0.4s, $INC.4s
-    mov $D4.16b, $D_STORE.16b
-
-    eor $T0.16b, $T0.16b, $T0.16b //zero
-    not $T1.16b, $T0.16b // -1
-    sub $T1.4s, $INC.4s, $T1.4s // Add +1
-    ext $T0.16b, $T1.16b, $T0.16b, #12 // Get the last element (counter)
-    add $D4.4s, $D4.4s, $T0.4s
-
-    sub $keyp, $keyp, #32
-.align 5
-.Lseal_main_loop_rounds:
-___
-        &chacha_qr_x5("left");
-        &poly_add($adp);
-        &poly_mul();
-        &chacha_qr_x5("right");
-$code.=<<___;
-        subs $itr1, $itr1, #1
-        b.ge .Lseal_main_loop_rounds
-___
-        &poly_add($adp);
-        &poly_mul();
-$code.=<<___;
-        subs $itr2, $itr2, #1
-        b.gt .Lseal_main_loop_rounds
-
-    eor $T0.16b, $T0.16b, $T0.16b //zero
-    not $T1.16b, $T0.16b // -1
-    sub $T1.4s, $INC.4s, $T1.4s // Add +1
-    ext $T0.16b, $T1.16b, $T0.16b, #12 // Get the last element (counter)
-    add $D4.4s, $D4.4s, $T0.4s
-
-    add $D0.4s, $D0.4s, $INC.4s
-    mov $t0, #5
-    dup $T0.4s, $t0w
-    add $INC.4s, $INC.4s, $T0.4s
-
-    zip1 $T0.4s, $A0.4s, $A1.4s
-    zip2 $T1.4s, $A0.4s, $A1.4s
-    zip1 $T2.4s, $A2.4s, $A3.4s
-    zip2 $T3.4s, $A2.4s, $A3.4s
-
-    zip1 $A0.2d, $T0.2d, $T2.2d
-    zip2 $A1.2d, $T0.2d, $T2.2d
-    zip1 $A2.2d, $T1.2d, $T3.2d
-    zip2 $A3.2d, $T1.2d, $T3.2d
-
-    zip1 $T0.4s, $B0.4s, $B1.4s
-    zip2 $T1.4s, $B0.4s, $B1.4s
-    zip1 $T2.4s, $B2.4s, $B3.4s
-    zip2 $T3.4s, $B2.4s, $B3.4s
-
-    zip1 $B0.2d, $T0.2d, $T2.2d
-    zip2 $B1.2d, $T0.2d, $T2.2d
-    zip1 $B2.2d, $T1.2d, $T3.2d
-    zip2 $B3.2d, $T1.2d, $T3.2d
-
-    zip1 $T0.4s, $C0.4s, $C1.4s
-    zip2 $T1.4s, $C0.4s, $C1.4s
-    zip1 $T2.4s, $C2.4s, $C3.4s
-    zip2 $T3.4s, $C2.4s, $C3.4s
-
-    zip1 $C0.2d, $T0.2d, $T2.2d
-    zip2 $C1.2d, $T0.2d, $T2.2d
-    zip1 $C2.2d, $T1.2d, $T3.2d
-    zip2 $C3.2d, $T1.2d, $T3.2d
-
-    zip1 $T0.4s, $D0.4s, $D1.4s
-    zip2 $T1.4s, $D0.4s, $D1.4s
-    zip1 $T2.4s, $D2.4s, $D3.4s
-    zip2 $T3.4s, $D2.4s, $D3.4s
-
-    zip1 $D0.2d, $T0.2d, $T2.2d
-    zip2 $D1.2d, $T0.2d, $T2.2d
-    zip1 $D2.2d, $T1.2d, $T3.2d
-    zip2 $D3.2d, $T1.2d, $T3.2d
-
-    add $A0.4s, $A0.4s, $CONSTS.4s
-    add $B0.4s, $B0.4s, $B_STORE.4s
-    add $C0.4s, $C0.4s, $C_STORE.4s
-    add $D0.4s, $D0.4s, $D_STORE.4s
-
-    add $A1.4s, $A1.4s, $CONSTS.4s
-    add $B1.4s, $B1.4s, $B_STORE.4s
-    add $C1.4s, $C1.4s, $C_STORE.4s
-    add $D1.4s, $D1.4s, $D_STORE.4s
-
-    add $A2.4s, $A2.4s, $CONSTS.4s
-    add $B2.4s, $B2.4s, $B_STORE.4s
-    add $C2.4s, $C2.4s, $C_STORE.4s
-    add $D2.4s, $D2.4s, $D_STORE.4s
-
-    add $A3.4s, $A3.4s, $CONSTS.4s
-    add $B3.4s, $B3.4s, $B_STORE.4s
-    add $C3.4s, $C3.4s, $C_STORE.4s
-    add $D3.4s, $D3.4s, $D_STORE.4s
-
-    add $A4.4s, $A4.4s, $CONSTS.4s
-    add $B4.4s, $B4.4s, $B_STORE.4s
-    add $C4.4s, $C4.4s, $C_STORE.4s
-    add $D4.4s, $D4.4s, $D_STORE.4s
-
-    cmp $inl, #320
-    b.le .Lseal_tail
-
-    ld1 {$T0.16b - $T3.16b}, [$inp], #64
-    eor $T0.16b, $T0.16b, $A0.16b
-    eor $T1.16b, $T1.16b, $B0.16b
-    eor $T2.16b, $T2.16b, $C0.16b
-    eor $T3.16b, $T3.16b, $D0.16b
-    st1 {$T0.16b - $T3.16b}, [$oup], #64
-
-    ld1 {$T0.16b - $T3.16b}, [$inp], #64
-    eor $T0.16b, $T0.16b, $A1.16b
-    eor $T1.16b, $T1.16b, $B1.16b
-    eor $T2.16b, $T2.16b, $C1.16b
-    eor $T3.16b, $T3.16b, $D1.16b
-    st1 {$T0.16b - $T3.16b}, [$oup], #64
-
-    ld1 {$T0.16b - $T3.16b}, [$inp], #64
-    eor $T0.16b, $T0.16b, $A2.16b
-    eor $T1.16b, $T1.16b, $B2.16b
-    eor $T2.16b, $T2.16b, $C2.16b
-    eor $T3.16b, $T3.16b, $D2.16b
-    st1 {$T0.16b - $T3.16b}, [$oup], #64
-
-    ld1 {$T0.16b - $T3.16b}, [$inp], #64
-    eor $T0.16b, $T0.16b, $A3.16b
-    eor $T1.16b, $T1.16b, $B3.16b
-    eor $T2.16b, $T2.16b, $C3.16b
-    eor $T3.16b, $T3.16b, $D3.16b
-    st1 {$T0.16b - $T3.16b}, [$oup], #64
-
-    ld1 {$T0.16b - $T3.16b}, [$inp], #64
-    eor $T0.16b, $T0.16b, $A4.16b
-    eor $T1.16b, $T1.16b, $B4.16b
-    eor $T2.16b, $T2.16b, $C4.16b
-    eor $T3.16b, $T3.16b, $D4.16b
-    st1 {$T0.16b - $T3.16b}, [$oup], #64
-
-    sub $inl, $inl, #320
-
-    mov $itr1, #0
-    mov $itr2, #10 // For the remainder of the loop we always hash and encrypt 320 bytes per iteration
-
-    b .Lseal_main_loop
-
-.Lseal_tail:
-    // This part of the function handles the storage and authentication of the last [0,320) bytes
-    // We assume A0-A4 ... D0-D4 hold at least inl (320 max) bytes of the stream data.
-    cmp $inl, #64
-    b.lt .Lseal_tail_64
-
-    // Store and authenticate 64B blocks per iteration
-    ld1 {$T0.16b - $T3.16b}, [$inp], #64
-
-    eor $T0.16b, $T0.16b, $A0.16b
-    eor $T1.16b, $T1.16b, $B0.16b
-    eor $T2.16b, $T2.16b, $C0.16b
-    eor $T3.16b, $T3.16b, $D0.16b
-___
-    &poly_add_vec($T0);
-    &poly_mul();
-    &poly_add_vec($T1);
-    &poly_mul();
-    &poly_add_vec($T2);
-    &poly_mul();
-    &poly_add_vec($T3);
-    &poly_mul();
-$code.=<<___;
-    st1 {$T0.16b - $T3.16b}, [$oup], #64
-    sub $inl, $inl, #64
-
-    // Shift the state left by 64 bytes for the next iteration of the loop
-    mov $A0.16b, $A1.16b
-    mov $B0.16b, $B1.16b
-    mov $C0.16b, $C1.16b
-    mov $D0.16b, $D1.16b
-
-    mov $A1.16b, $A2.16b
-    mov $B1.16b, $B2.16b
-    mov $C1.16b, $C2.16b
-    mov $D1.16b, $D2.16b
-
-    mov $A2.16b, $A3.16b
-    mov $B2.16b, $B3.16b
-    mov $C2.16b, $C3.16b
-    mov $D2.16b, $D3.16b
-
-    mov $A3.16b, $A4.16b
-    mov $B3.16b, $B4.16b
-    mov $C3.16b, $C4.16b
-    mov $D3.16b, $D4.16b
-
-    b .Lseal_tail
-
-.Lseal_tail_64:
-    ldp $adp, $adl, [$keyp, #48] // extra_in_len and extra_in_ptr
-
-    // Here we handle the last [0,64) bytes of plaintext
-    cmp $inl, #16
-    b.lt .Lseal_tail_16
-    // Each iteration encrypt and authenticate a 16B block
-    ld1 {$T0.16b}, [$inp], #16
-    eor $T0.16b, $T0.16b, $A0.16b
-___
-    &poly_add_vec($T0);
-    &poly_mul();
-$code.=<<___;
-    st1 {$T0.16b}, [$oup], #16
-
-    sub $inl, $inl, #16
-
-    // Shift the state left by 16 bytes for the next iteration of the loop
-    mov $A0.16b, $B0.16b
-    mov $B0.16b, $C0.16b
-    mov $C0.16b, $D0.16b
-
-    b .Lseal_tail_64
-
-.Lseal_tail_16:
-    // Here we handle the last [0,16) bytes of ciphertext that require a padded block
-    cbz $inl, .Lseal_hash_extra
-
-    eor $T0.16b, $T0.16b, $T0.16b // Use T0 to load the plaintext/extra in
-    eor $T1.16b, $T1.16b, $T1.16b // Use T1 to generate an AND mask that will only mask the ciphertext bytes
-    not $T2.16b, $T0.16b
-
-    mov $itr1, $inl
-    add $inp, $inp, $inl
-
-    cbz $adl, .Lseal_tail_16_compose // No extra data to pad with, zero padding
-
-    mov $itr2, #16          // We need to load some extra_in first for padding
-    sub $itr2, $itr2, $inl
-    cmp $adl, $itr2
-    csel $itr2, $adl, $itr2, lt // Load the minimum of extra_in_len and the amount needed to fill the register
-    mov $t1, $itr2
-    add $adp, $adp, $itr2
-    sub $adl, $adl, $itr2
-
-.Lseal_tail16_compose_extra_in:
-        ext  $T0.16b, $T0.16b, $T0.16b, #15
-        ldrb $t0w, [$adp, #-1]!
-        mov  $T0.b[0], $t0w
-        subs $itr2, $itr2, #1
-        b.gt .Lseal_tail16_compose_extra_in
-
-    add $adp, $adp, $t1
-
-.Lseal_tail_16_compose:
-        ext  $T0.16b, $T0.16b, $T0.16b, #15
-        ldrb $t0w, [$inp, #-1]!
-        mov  $T0.b[0], $t0w
-        ext  $T1.16b, $T2.16b, $T1.16b, #15
-        subs $inl, $inl, #1
-        b.gt .Lseal_tail_16_compose
-
-    and $A0.16b, $A0.16b, $T1.16b
-    eor $T0.16b, $T0.16b, $A0.16b
-    mov $T1.16b, $T0.16b
-
-.Lseal_tail_16_store:
-        umov $t0w, $T0.b[0]
-        strb $t0w, [$oup], #1
-        ext  $T0.16b, $T0.16b, $T0.16b, #1
-        subs $itr1, $itr1, #1
-        b.gt .Lseal_tail_16_store
-
-    // Hash in the final ct block concatenated with extra_in
-___
-    &poly_add_vec($T1);
-    &poly_mul();
-$code.=<<___;
-
-.Lseal_hash_extra:
-    cbz $adl, .Lseal_finalize
-
-.Lseal_hash_extra_loop:
-    cmp $adl, #16
-    b.lt .Lseal_hash_extra_tail
-    ld1 {$T0.16b}, [$adp], #16
-___
-    &poly_add_vec($T0);
-    &poly_mul();
-$code.=<<___;
-    sub $adl, $adl, #16
-    b .Lseal_hash_extra_loop
-
-.Lseal_hash_extra_tail:
-    cbz $adl, .Lseal_finalize
-    eor $T0.16b, $T0.16b, $T0.16b // Use T0 to load the remaining extra ciphertext
-    add $adp, $adp, $adl
-
-.Lseal_hash_extra_load:
-        ext  $T0.16b, $T0.16b, $T0.16b, #15
-        ldrb $t0w, [$adp, #-1]!
-        mov  $T0.b[0], $t0w
-        subs $adl, $adl, #1
-        b.gt .Lseal_hash_extra_load
-
-    // Hash in the final padded extra_in blcok
-___
-    &poly_add_vec($T0);
-    &poly_mul();
-$code.=<<___;
-
-.Lseal_finalize:
-___
-    &poly_add_vec($LEN_STORE);
-    &poly_mul();
-$code.=<<___;
-    // Final reduction step
-    sub  $t1, xzr, $one
-    orr  $t2, xzr, #3
-    subs $t0, $acc0, #-5
-    sbcs $t1, $acc1, $t1
-    sbcs $t2, $acc2, $t2
-    csel $acc0, $t0, $acc0, cs
-    csel $acc1, $t1, $acc1, cs
-    csel $acc2, $t2, $acc2, cs
-___
-    &poly_add_vec($S_STORE);
-$code.=<<___;
-
-    stp  $acc0, $acc1, [$keyp]
-
-    ldp d8, d9, [sp, #16]
-    ldp d10, d11, [sp, #32]
-    ldp d12, d13, [sp, #48]
-    ldp d14, d15, [sp, #64]
-.cfi_restore b15
-.cfi_restore b14
-.cfi_restore b13
-.cfi_restore b12
-.cfi_restore b11
-.cfi_restore b10
-.cfi_restore b9
-.cfi_restore b8
-    ldp x29, x30, [sp], 80
-.cfi_restore w29
-.cfi_restore w30
-.cfi_def_cfa_offset 0
-    AARCH64_VALIDATE_LINK_REGISTER
-    ret
-
-.Lseal_128:
-    // On some architectures preparing 5 blocks for small buffers is wasteful
-    eor $INC.16b, $INC.16b, $INC.16b
-    mov $t0, #1
-    mov $INC.s[0], $t0w
-    mov $A0.16b, $CONSTS.16b
-    mov $A1.16b, $CONSTS.16b
-    mov $A2.16b, $CONSTS.16b
-    mov $B0.16b, $B_STORE.16b
-    mov $B1.16b, $B_STORE.16b
-    mov $B2.16b, $B_STORE.16b
-    mov $C0.16b, $C_STORE.16b
-    mov $C1.16b, $C_STORE.16b
-    mov $C2.16b, $C_STORE.16b
-    mov $D2.16b, $D_STORE.16b
-    add $D0.4s, $D2.4s, $INC.4s
-    add $D1.4s, $D0.4s, $INC.4s
-
-    mov  $itr1, #10
-
-.Lseal_128_rounds:
-___
-        &chacha_qr_x3("left");
-        &chacha_qr_x3("right");
-$code.=<<___;
-        subs $itr1, $itr1, #1
-    b.hi .Lseal_128_rounds
-
-    add $A0.4s, $A0.4s, $CONSTS.4s
-    add $A1.4s, $A1.4s, $CONSTS.4s
-    add $A2.4s, $A2.4s, $CONSTS.4s
-
-    add $B0.4s, $B0.4s, $B_STORE.4s
-    add $B1.4s, $B1.4s, $B_STORE.4s
-    add $B2.4s, $B2.4s, $B_STORE.4s
-
-    // Only the first 32 bytes of the third block (counter = 0) are needed,
-    // so skip updating $C2 and $D2.
-    add $C0.4s, $C0.4s, $C_STORE.4s
-    add $C1.4s, $C1.4s, $C_STORE.4s
-
-    add $D_STORE.4s, $D_STORE.4s, $INC.4s
-    add $D0.4s, $D0.4s, $D_STORE.4s
-    add $D_STORE.4s, $D_STORE.4s, $INC.4s
-    add $D1.4s, $D1.4s, $D_STORE.4s
-
-    and $A2.16b, $A2.16b, $CLAMP.16b
-    mov $r0, $A2.d[0] // Move the R key to GPRs
-    mov $r1, $A2.d[1]
-    mov $S_STORE.16b, $B2.16b // Store the S key
-
-    bl  .Lpoly_hash_ad_internal
-    b   .Lseal_tail
-.cfi_endproc
-.size chacha20_poly1305_seal,.-chacha20_poly1305_seal
-
-/////////////////////////////////
-//
-// void chacha20_poly1305_open(uint8_t *pt, uint8_t *ct, size_t len_in, uint8_t *ad, size_t len_ad, union open_data *aead_data);
-//
-.globl	chacha20_poly1305_open
-.type	chacha20_poly1305_open,%function
-.align	6
-chacha20_poly1305_open:
-    AARCH64_SIGN_LINK_REGISTER
-.cfi_startproc
-    stp x29, x30, [sp, #-80]!
-.cfi_def_cfa_offset 80
-.cfi_offset w30, -72
-.cfi_offset w29, -80
-    mov x29, sp
-    // We probably could do .cfi_def_cfa w29, 80 at this point, but since
-    // we don't actually use the frame pointer like that, it's probably not
-    // worth bothering.
-    stp	d8, d9, [sp, #16]
-    stp	d10, d11, [sp, #32]
-    stp	d12, d13, [sp, #48]
-    stp	d14, d15, [sp, #64]
-.cfi_offset b15, -8
-.cfi_offset b14, -16
-.cfi_offset b13, -24
-.cfi_offset b12, -32
-.cfi_offset b11, -40
-.cfi_offset b10, -48
-.cfi_offset b9, -56
-.cfi_offset b8, -64
-
-    adrp $t0, :pg_hi21:.Lchacha20_consts
-    add  $t0, $t0, :lo12:.Lchacha20_consts
-
-    ld1 {$CONSTS.16b - $CLAMP.16b}, [$t0] // Load the CONSTS, INC, ROL8 and CLAMP values
-    ld1 {$B_STORE.16b - $D_STORE.16b}, [$keyp]
-
-    mov $one, #1 // Prepare the Poly1305 state
-    mov $acc0, #0
-    mov $acc1, #0
-    mov $acc2, #0
-
-    mov $LEN_STORE.d[0], $adl  // Store the input and aad lengths
-    mov $LEN_STORE.d[1], $inl
-
-    cmp $inl, #128
-    b.le .Lopen_128 // Optimization for smaller buffers
-
-    // Initially we prepare a single ChaCha20 block for the Poly1305 R and S keys
-    mov $A0.16b, $CONSTS.16b
-    mov $B0.16b, $B_STORE.16b
-    mov $C0.16b, $C_STORE.16b
-    mov $D0.16b, $D_STORE.16b
-
-    mov  $itr1, #10
-
-.align 5
-.Lopen_init_rounds:
-___
-        &chacha_qr($A0, $B0, $C0, $D0, $T0, "left");
-        &chacha_qr($A0, $B0, $C0, $D0, $T0, "right");
-$code.=<<___;
-        subs $itr1, $itr1, #1
-    b.hi .Lopen_init_rounds
-
-    add $A0.4s, $A0.4s, $CONSTS.4s
-    add $B0.4s, $B0.4s, $B_STORE.4s
-
-    and $A0.16b, $A0.16b, $CLAMP.16b
-    mov $r0, $A0.d[0] // Move the R key to GPRs
-    mov $r1, $A0.d[1]
-    mov $S_STORE.16b, $B0.16b // Store the S key
-
-    bl  .Lpoly_hash_ad_internal
-
-.Lopen_ad_done:
-    mov $adp, $inp
-
-// Each iteration of the loop hash 320 bytes, and prepare stream for 320 bytes
-.Lopen_main_loop:
-
-    cmp $inl, #192
-    b.lt .Lopen_tail
-
-    adrp $t0, :pg_hi21:.Lchacha20_consts
-    add  $t0, $t0, :lo12:.Lchacha20_consts
-
-    ld4r {$A0.4s-$A3.4s}, [$t0]
-    mov $A4.16b, $CONSTS.16b
-
-    ld4r {$B0.4s-$B3.4s}, [$keyp], #16
-    mov $B4.16b, $B_STORE.16b
-
-    ld4r {$C0.4s-$C3.4s}, [$keyp], #16
-    mov $C4.16b, $C_STORE.16b
-
-    ld4r {$D0.4s-$D3.4s}, [$keyp]
-    sub $keyp, $keyp, #32
-    add $D0.4s, $D0.4s, $INC.4s
-    mov $D4.16b, $D_STORE.16b
-
-    eor $T0.16b, $T0.16b, $T0.16b //zero
-    not $T1.16b, $T0.16b // -1
-    sub $T1.4s, $INC.4s, $T1.4s // Add +1
-    ext $T0.16b, $T1.16b, $T0.16b, #12 // Get the last element (counter)
-    add $D4.4s, $D4.4s, $T0.4s
-
-    lsr $adl, $inl, #4 // How many whole blocks we have to hash, will always be at least 12
-    sub $adl, $adl, #10
-
-    mov $itr2, #10
-    subs $itr1, $itr2, $adl
-    subs $itr1, $itr2, $adl // itr1 can be negative if we have more than 320 bytes to hash
-    csel $itr2, $itr2, $adl, le // if itr1 is zero or less, itr2 should be 10 to indicate all 10 rounds are full
-
-    cbz $itr2, .Lopen_main_loop_rounds_short
-
-.align 5
-.Lopen_main_loop_rounds:
-___
-        &poly_add($adp);
-        &poly_mul();
-$code.=<<___;
-.Lopen_main_loop_rounds_short:
-___
-        &chacha_qr_x5("left");
-        &poly_add($adp);
-        &poly_mul();
-        &chacha_qr_x5("right");
-$code.=<<___;
-        subs $itr2, $itr2, #1
-        b.gt .Lopen_main_loop_rounds
-        subs $itr1, $itr1, #1
-        b.ge .Lopen_main_loop_rounds_short
-___
-$code.=<<___;
-
-    eor $T0.16b, $T0.16b, $T0.16b //zero
-    not $T1.16b, $T0.16b // -1
-    sub $T1.4s, $INC.4s, $T1.4s // Add +1
-    ext $T0.16b, $T1.16b, $T0.16b, #12 // Get the last element (counter)
-    add $D4.4s, $D4.4s, $T0.4s
-
-    add $D0.4s, $D0.4s, $INC.4s
-    mov $t0, #5
-    dup $T0.4s, $t0w
-    add $INC.4s, $INC.4s, $T0.4s
-
-    zip1 $T0.4s, $A0.4s, $A1.4s
-    zip2 $T1.4s, $A0.4s, $A1.4s
-    zip1 $T2.4s, $A2.4s, $A3.4s
-    zip2 $T3.4s, $A2.4s, $A3.4s
-
-    zip1 $A0.2d, $T0.2d, $T2.2d
-    zip2 $A1.2d, $T0.2d, $T2.2d
-    zip1 $A2.2d, $T1.2d, $T3.2d
-    zip2 $A3.2d, $T1.2d, $T3.2d
-
-    zip1 $T0.4s, $B0.4s, $B1.4s
-    zip2 $T1.4s, $B0.4s, $B1.4s
-    zip1 $T2.4s, $B2.4s, $B3.4s
-    zip2 $T3.4s, $B2.4s, $B3.4s
-
-    zip1 $B0.2d, $T0.2d, $T2.2d
-    zip2 $B1.2d, $T0.2d, $T2.2d
-    zip1 $B2.2d, $T1.2d, $T3.2d
-    zip2 $B3.2d, $T1.2d, $T3.2d
-
-    zip1 $T0.4s, $C0.4s, $C1.4s
-    zip2 $T1.4s, $C0.4s, $C1.4s
-    zip1 $T2.4s, $C2.4s, $C3.4s
-    zip2 $T3.4s, $C2.4s, $C3.4s
-
-    zip1 $C0.2d, $T0.2d, $T2.2d
-    zip2 $C1.2d, $T0.2d, $T2.2d
-    zip1 $C2.2d, $T1.2d, $T3.2d
-    zip2 $C3.2d, $T1.2d, $T3.2d
-
-    zip1 $T0.4s, $D0.4s, $D1.4s
-    zip2 $T1.4s, $D0.4s, $D1.4s
-    zip1 $T2.4s, $D2.4s, $D3.4s
-    zip2 $T3.4s, $D2.4s, $D3.4s
-
-    zip1 $D0.2d, $T0.2d, $T2.2d
-    zip2 $D1.2d, $T0.2d, $T2.2d
-    zip1 $D2.2d, $T1.2d, $T3.2d
-    zip2 $D3.2d, $T1.2d, $T3.2d
-
-    add $A0.4s, $A0.4s, $CONSTS.4s
-    add $B0.4s, $B0.4s, $B_STORE.4s
-    add $C0.4s, $C0.4s, $C_STORE.4s
-    add $D0.4s, $D0.4s, $D_STORE.4s
-
-    add $A1.4s, $A1.4s, $CONSTS.4s
-    add $B1.4s, $B1.4s, $B_STORE.4s
-    add $C1.4s, $C1.4s, $C_STORE.4s
-    add $D1.4s, $D1.4s, $D_STORE.4s
-
-    add $A2.4s, $A2.4s, $CONSTS.4s
-    add $B2.4s, $B2.4s, $B_STORE.4s
-    add $C2.4s, $C2.4s, $C_STORE.4s
-    add $D2.4s, $D2.4s, $D_STORE.4s
-
-    add $A3.4s, $A3.4s, $CONSTS.4s
-    add $B3.4s, $B3.4s, $B_STORE.4s
-    add $C3.4s, $C3.4s, $C_STORE.4s
-    add $D3.4s, $D3.4s, $D_STORE.4s
-
-    add $A4.4s, $A4.4s, $CONSTS.4s
-    add $B4.4s, $B4.4s, $B_STORE.4s
-    add $C4.4s, $C4.4s, $C_STORE.4s
-    add $D4.4s, $D4.4s, $D_STORE.4s
-
-    // We can always safely store 192 bytes
-    ld1 {$T0.16b - $T3.16b}, [$inp], #64
-    eor $T0.16b, $T0.16b, $A0.16b
-    eor $T1.16b, $T1.16b, $B0.16b
-    eor $T2.16b, $T2.16b, $C0.16b
-    eor $T3.16b, $T3.16b, $D0.16b
-    st1 {$T0.16b - $T3.16b}, [$oup], #64
-
-    ld1 {$T0.16b - $T3.16b}, [$inp], #64
-    eor $T0.16b, $T0.16b, $A1.16b
-    eor $T1.16b, $T1.16b, $B1.16b
-    eor $T2.16b, $T2.16b, $C1.16b
-    eor $T3.16b, $T3.16b, $D1.16b
-    st1 {$T0.16b - $T3.16b}, [$oup], #64
-
-    ld1 {$T0.16b - $T3.16b}, [$inp], #64
-    eor $T0.16b, $T0.16b, $A2.16b
-    eor $T1.16b, $T1.16b, $B2.16b
-    eor $T2.16b, $T2.16b, $C2.16b
-    eor $T3.16b, $T3.16b, $D2.16b
-    st1 {$T0.16b - $T3.16b}, [$oup], #64
-
-    sub $inl, $inl, #192
-
-    mov $A0.16b, $A3.16b
-    mov $B0.16b, $B3.16b
-    mov $C0.16b, $C3.16b
-    mov $D0.16b, $D3.16b
-
-    cmp $inl, #64
-    b.lt .Lopen_tail_64_store
-
-    ld1 {$T0.16b - $T3.16b}, [$inp], #64
-    eor $T0.16b, $T0.16b, $A3.16b
-    eor $T1.16b, $T1.16b, $B3.16b
-    eor $T2.16b, $T2.16b, $C3.16b
-    eor $T3.16b, $T3.16b, $D3.16b
-    st1 {$T0.16b - $T3.16b}, [$oup], #64
-
-    sub $inl, $inl, #64
-
-    mov $A0.16b, $A4.16b
-    mov $B0.16b, $B4.16b
-    mov $C0.16b, $C4.16b
-    mov $D0.16b, $D4.16b
-
-    cmp $inl, #64
-    b.lt .Lopen_tail_64_store
-
-    ld1 {$T0.16b - $T3.16b}, [$inp], #64
-    eor $T0.16b, $T0.16b, $A4.16b
-    eor $T1.16b, $T1.16b, $B4.16b
-    eor $T2.16b, $T2.16b, $C4.16b
-    eor $T3.16b, $T3.16b, $D4.16b
-    st1 {$T0.16b - $T3.16b}, [$oup], #64
-
-    sub $inl, $inl, #64
-    b .Lopen_main_loop
-
-.Lopen_tail:
-
-    cbz $inl, .Lopen_finalize
-
-    lsr $adl, $inl, #4 // How many whole blocks we have to hash
-
-    cmp $inl, #64
-    b.le .Lopen_tail_64
-    cmp $inl, #128
-    b.le .Lopen_tail_128
-
-.Lopen_tail_192:
-     // We need three more blocks
-    mov $A0.16b, $CONSTS.16b
-    mov $A1.16b, $CONSTS.16b
-    mov $A2.16b, $CONSTS.16b
-    mov $B0.16b, $B_STORE.16b
-    mov $B1.16b, $B_STORE.16b
-    mov $B2.16b, $B_STORE.16b
-    mov $C0.16b, $C_STORE.16b
-    mov $C1.16b, $C_STORE.16b
-    mov $C2.16b, $C_STORE.16b
-    mov $D0.16b, $D_STORE.16b
-    mov $D1.16b, $D_STORE.16b
-    mov $D2.16b, $D_STORE.16b
-    eor $T3.16b, $T3.16b, $T3.16b
-    eor $T1.16b, $T1.16b, $T1.16b
-    ins $T3.s[0], $INC.s[0]
-    ins $T1.d[0], $one
-
-    add $T2.4s, $T3.4s, $T1.4s
-    add $T1.4s, $T2.4s, $T1.4s
-
-    add $D0.4s, $D0.4s, $T1.4s
-    add $D1.4s, $D1.4s, $T3.4s
-    add $D2.4s, $D2.4s, $T2.4s
-
-    mov $itr2, #10
-    subs $itr1, $itr2, $adl // itr1 can be negative if we have more than 160 bytes to hash
-    csel $itr2, $itr2, $adl, le // if itr1 is zero or less, itr2 should be 10 to indicate all 10 rounds are hashing
-    sub $adl, $adl, $itr2
-
-    cbz $itr2, .Lopen_tail_192_rounds_no_hash
-
-.Lopen_tail_192_rounds:
-___
-        &poly_add($adp);
-        &poly_mul();
-$code.=<<___;
-.Lopen_tail_192_rounds_no_hash:
-___
-        &chacha_qr_x3("left");
-        &chacha_qr_x3("right");
-$code.=<<___;
-        subs $itr2, $itr2, #1
-        b.gt .Lopen_tail_192_rounds
-        subs $itr1, $itr1, #1
-        b.ge .Lopen_tail_192_rounds_no_hash
-
-    // We hashed 160 bytes at most, may still have 32 bytes left
-.Lopen_tail_192_hash:
-    cbz $adl, .Lopen_tail_192_hash_done
-___
-        &poly_add($adp);
-        &poly_mul();
-$code.=<<___;
-    sub $adl, $adl, #1
-    b .Lopen_tail_192_hash
-
-.Lopen_tail_192_hash_done:
-
-    add $A0.4s, $A0.4s, $CONSTS.4s
-    add $A1.4s, $A1.4s, $CONSTS.4s
-    add $A2.4s, $A2.4s, $CONSTS.4s
-    add $B0.4s, $B0.4s, $B_STORE.4s
-    add $B1.4s, $B1.4s, $B_STORE.4s
-    add $B2.4s, $B2.4s, $B_STORE.4s
-    add $C0.4s, $C0.4s, $C_STORE.4s
-    add $C1.4s, $C1.4s, $C_STORE.4s
-    add $C2.4s, $C2.4s, $C_STORE.4s
-    add $D0.4s, $D0.4s, $D_STORE.4s
-    add $D1.4s, $D1.4s, $D_STORE.4s
-    add $D2.4s, $D2.4s, $D_STORE.4s
-
-    add $D0.4s, $D0.4s, $T1.4s
-    add $D1.4s, $D1.4s, $T3.4s
-    add $D2.4s, $D2.4s, $T2.4s
-
-    ld1 {$T0.16b - $T3.16b}, [$inp], #64
-
-    eor $T0.16b, $T0.16b, $A1.16b
-    eor $T1.16b, $T1.16b, $B1.16b
-    eor $T2.16b, $T2.16b, $C1.16b
-    eor $T3.16b, $T3.16b, $D1.16b
-
-    st1 {$T0.16b - $T3.16b}, [$oup], #64
-
-    ld1 {$T0.16b - $T3.16b}, [$inp], #64
-
-    eor $T0.16b, $T0.16b, $A2.16b
-    eor $T1.16b, $T1.16b, $B2.16b
-    eor $T2.16b, $T2.16b, $C2.16b
-    eor $T3.16b, $T3.16b, $D2.16b
-
-    st1 {$T0.16b - $T3.16b}, [$oup], #64
-
-    sub $inl, $inl, #128
-    b .Lopen_tail_64_store
-
-.Lopen_tail_128:
-     // We need two more blocks
-    mov $A0.16b, $CONSTS.16b
-    mov $A1.16b, $CONSTS.16b
-    mov $B0.16b, $B_STORE.16b
-    mov $B1.16b, $B_STORE.16b
-    mov $C0.16b, $C_STORE.16b
-    mov $C1.16b, $C_STORE.16b
-    mov $D0.16b, $D_STORE.16b
-    mov $D1.16b, $D_STORE.16b
-    eor $T3.16b, $T3.16b, $T3.16b
-    eor $T2.16b, $T2.16b, $T2.16b
-    ins $T3.s[0], $INC.s[0]
-    ins $T2.d[0], $one
-    add $T2.4s, $T2.4s, $T3.4s
-
-    add $D0.4s, $D0.4s, $T2.4s
-    add $D1.4s, $D1.4s, $T3.4s
-
-    mov $itr1, #10
-    sub $itr1, $itr1, $adl
-
-.Lopen_tail_128_rounds:
-___
-        &chacha_qr($A0, $B0, $C0, $D0, $T0, "left");
-        &chacha_qr($A1, $B1, $C1, $D1, $T0, "left");
-        &chacha_qr($A0, $B0, $C0, $D0, $T0, "right");
-        &chacha_qr($A1, $B1, $C1, $D1, $T0, "right");
-$code.=<<___;
-        subs $itr1, $itr1, #1
-        b.gt .Lopen_tail_128_rounds
-        cbz $adl, .Lopen_tail_128_rounds_done
-        subs $adl, $adl, #1
-___
-        &poly_add($adp);
-        &poly_mul();
-$code.=<<___;
-    b .Lopen_tail_128_rounds
-
-.Lopen_tail_128_rounds_done:
-    add $A0.4s, $A0.4s, $CONSTS.4s
-    add $A1.4s, $A1.4s, $CONSTS.4s
-    add $B0.4s, $B0.4s, $B_STORE.4s
-    add $B1.4s, $B1.4s, $B_STORE.4s
-    add $C0.4s, $C0.4s, $C_STORE.4s
-    add $C1.4s, $C1.4s, $C_STORE.4s
-    add $D0.4s, $D0.4s, $D_STORE.4s
-    add $D1.4s, $D1.4s, $D_STORE.4s
-    add $D0.4s, $D0.4s, $T2.4s
-    add $D1.4s, $D1.4s, $T3.4s
-
-    ld1 {$T0.16b - $T3.16b}, [$inp], #64
-
-    eor $T0.16b, $T0.16b, $A1.16b
-    eor $T1.16b, $T1.16b, $B1.16b
-    eor $T2.16b, $T2.16b, $C1.16b
-    eor $T3.16b, $T3.16b, $D1.16b
-
-    st1 {$T0.16b - $T3.16b}, [$oup], #64
-    sub $inl, $inl, #64
-
-    b .Lopen_tail_64_store
-
-.Lopen_tail_64:
-    // We just need a single block
-    mov $A0.16b, $CONSTS.16b
-    mov $B0.16b, $B_STORE.16b
-    mov $C0.16b, $C_STORE.16b
-    mov $D0.16b, $D_STORE.16b
-    eor $T3.16b, $T3.16b, $T3.16b
-    ins $T3.s[0], $INC.s[0]
-    add $D0.4s, $D0.4s, $T3.4s
-
-    mov $itr1, #10
-    sub $itr1, $itr1, $adl
-
-.Lopen_tail_64_rounds:
-___
-        &chacha_qr($A0, $B0, $C0, $D0, $T0, "left");
-        &chacha_qr($A0, $B0, $C0, $D0, $T0, "right");
-$code.=<<___;
-        subs $itr1, $itr1, #1
-        b.gt .Lopen_tail_64_rounds
-        cbz $adl, .Lopen_tail_64_rounds_done
-        subs $adl, $adl, #1
-___
-        &poly_add($adp);
-        &poly_mul();
-$code.=<<___;
-    b .Lopen_tail_64_rounds
-
-.Lopen_tail_64_rounds_done:
-    add $A0.4s, $A0.4s, $CONSTS.4s
-    add $B0.4s, $B0.4s, $B_STORE.4s
-    add $C0.4s, $C0.4s, $C_STORE.4s
-    add $D0.4s, $D0.4s, $D_STORE.4s
-    add $D0.4s, $D0.4s, $T3.4s
-
-.Lopen_tail_64_store:
-    cmp $inl, #16
-    b.lt .Lopen_tail_16
-
-    ld1 {$T0.16b}, [$inp], #16
-    eor $T0.16b, $T0.16b, $A0.16b
-    st1 {$T0.16b}, [$oup], #16
-    mov $A0.16b, $B0.16b
-    mov $B0.16b, $C0.16b
-    mov $C0.16b, $D0.16b
-    sub $inl, $inl, #16
-    b .Lopen_tail_64_store
-
-.Lopen_tail_16:
-    // Here we handle the last [0,16) bytes that require a padded block
-    cbz $inl, .Lopen_finalize
-
-    eor $T0.16b, $T0.16b, $T0.16b // Use T0 to load the ciphertext
-    eor $T1.16b, $T1.16b, $T1.16b // Use T1 to generate an AND mask
-    not $T2.16b, $T0.16b
-
-    add $itr2, $inp, $inl
-    mov $itr1, $inl
-
-.Lopen_tail_16_compose:
-    ext  $T0.16b, $T0.16b, $T0.16b, #15
-    ldrb $t0w, [$itr2, #-1]!
-    mov  $T0.b[0], $t0w
-    ext  $T1.16b, $T2.16b, $T1.16b, #15
-    subs $inl, $inl, #1
-    b.gt .Lopen_tail_16_compose
-
-    and $T0.16b, $T0.16b, $T1.16b
-    // Hash in the final padded block
-___
-    &poly_add_vec($T0);
-    &poly_mul();
-$code.=<<___;
-    eor $T0.16b, $T0.16b, $A0.16b
-
-.Lopen_tail_16_store:
-    umov $t0w, $T0.b[0]
-    strb $t0w, [$oup], #1
-    ext  $T0.16b, $T0.16b, $T0.16b, #1
-    subs $itr1, $itr1, #1
-    b.gt .Lopen_tail_16_store
-
-.Lopen_finalize:
-___
-    &poly_add_vec($LEN_STORE);
-    &poly_mul();
-$code.=<<___;
-    // Final reduction step
-    sub  $t1, xzr, $one
-    orr  $t2, xzr, #3
-    subs $t0, $acc0, #-5
-    sbcs $t1, $acc1, $t1
-    sbcs $t2, $acc2, $t2
-    csel $acc0, $t0, $acc0, cs
-    csel $acc1, $t1, $acc1, cs
-    csel $acc2, $t2, $acc2, cs
-___
-    &poly_add_vec($S_STORE);
-$code.=<<___;
-
-    stp  $acc0, $acc1, [$keyp]
-
-    ldp	d8, d9, [sp, #16]
-    ldp	d10, d11, [sp, #32]
-    ldp	d12, d13, [sp, #48]
-    ldp	d14, d15, [sp, #64]
-.cfi_restore b15
-.cfi_restore b14
-.cfi_restore b13
-.cfi_restore b12
-.cfi_restore b11
-.cfi_restore b10
-.cfi_restore b9
-.cfi_restore b8
-    ldp x29, x30, [sp], 80
-.cfi_restore w29
-.cfi_restore w30
-.cfi_def_cfa_offset 0
-    AARCH64_VALIDATE_LINK_REGISTER
-    ret
-
-.Lopen_128:
-    // On some architectures preparing 5 blocks for small buffers is wasteful
-    eor $INC.16b, $INC.16b, $INC.16b
-    mov $t0, #1
-    mov $INC.s[0], $t0w
-    mov $A0.16b, $CONSTS.16b
-    mov $A1.16b, $CONSTS.16b
-    mov $A2.16b, $CONSTS.16b
-    mov $B0.16b, $B_STORE.16b
-    mov $B1.16b, $B_STORE.16b
-    mov $B2.16b, $B_STORE.16b
-    mov $C0.16b, $C_STORE.16b
-    mov $C1.16b, $C_STORE.16b
-    mov $C2.16b, $C_STORE.16b
-    mov $D2.16b, $D_STORE.16b
-    add $D0.4s, $D2.4s, $INC.4s
-    add $D1.4s, $D0.4s, $INC.4s
-
-    mov  $itr1, #10
-
-.Lopen_128_rounds:
-___
-        &chacha_qr_x3("left");
-        &chacha_qr_x3("right");
-$code.=<<___;
-        subs $itr1, $itr1, #1
-    b.hi .Lopen_128_rounds
-
-    add $A0.4s, $A0.4s, $CONSTS.4s
-    add $A1.4s, $A1.4s, $CONSTS.4s
-    add $A2.4s, $A2.4s, $CONSTS.4s
-
-    add $B0.4s, $B0.4s, $B_STORE.4s
-    add $B1.4s, $B1.4s, $B_STORE.4s
-    add $B2.4s, $B2.4s, $B_STORE.4s
-
-    add $C0.4s, $C0.4s, $C_STORE.4s
-    add $C1.4s, $C1.4s, $C_STORE.4s
-
-    add $D_STORE.4s, $D_STORE.4s, $INC.4s
-    add $D0.4s, $D0.4s, $D_STORE.4s
-    add $D_STORE.4s, $D_STORE.4s, $INC.4s
-    add $D1.4s, $D1.4s, $D_STORE.4s
-
-    and $A2.16b, $A2.16b, $CLAMP.16b
-    mov $r0, $A2.d[0] // Move the R key to GPRs
-    mov $r1, $A2.d[1]
-    mov $S_STORE.16b, $B2.16b // Store the S key
-
-    bl  .Lpoly_hash_ad_internal
-
-.Lopen_128_store:
-    cmp $inl, #64
-    b.lt .Lopen_128_store_64
-
-    ld1 {$T0.16b - $T3.16b}, [$inp], #64
-
-___
-    &poly_add_vec($T0);
-    &poly_mul();
-    &poly_add_vec($T1);
-    &poly_mul();
-    &poly_add_vec($T2);
-    &poly_mul();
-    &poly_add_vec($T3);
-    &poly_mul();
-$code.=<<___;
-
-    eor $T0.16b, $T0.16b, $A0.16b
-    eor $T1.16b, $T1.16b, $B0.16b
-    eor $T2.16b, $T2.16b, $C0.16b
-    eor $T3.16b, $T3.16b, $D0.16b
-
-    st1 {$T0.16b - $T3.16b}, [$oup], #64
-
-    sub $inl, $inl, #64
-
-    mov $A0.16b, $A1.16b
-    mov $B0.16b, $B1.16b
-    mov $C0.16b, $C1.16b
-    mov $D0.16b, $D1.16b
-
-.Lopen_128_store_64:
-
-    lsr $adl, $inl, #4
-    mov $adp, $inp
-
-.Lopen_128_hash_64:
-    cbz $adl, .Lopen_tail_64_store
-___
-    &poly_add($adp);
-    &poly_mul();
-$code.=<<___;
-    sub $adl, $adl, #1
-    b .Lopen_128_hash_64
-.cfi_endproc
-.size chacha20_poly1305_open,.-chacha20_poly1305_open
-___
-}
-
-foreach (split("\n",$code)) {
-	s/\`([^\`]*)\`/eval $1/ge;
-
-	print $_,"\n";
-}
-close STDOUT or die "error closing STDOUT";
diff --git a/src/crypto/cipher/asm/chacha20_poly1305_x86_64.pl b/src/crypto/cipher/asm/chacha20_poly1305_x86_64.pl
deleted file mode 100644
index 1abc178..0000000
--- a/src/crypto/cipher/asm/chacha20_poly1305_x86_64.pl
+++ /dev/null
@@ -1,2609 +0,0 @@
-#!/usr/bin/env perl
-
-# Copyright (c) 2015, CloudFlare Ltd.
-#
-# 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
-#
-#     https://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.
-
-##############################################################################
-#                                                                            #
-# Author:  Vlad Krasnov                                                      #
-#                                                                            #
-##############################################################################
-
-$flavour = shift;
-$output  = shift;
-if ($flavour =~ /\./) { $output = $flavour; undef $flavour; }
-
-$win64=0; $win64=1 if ($flavour =~ /[nm]asm|mingw64/ || $output =~ /\.asm$/);
-
-$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
-( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or
-( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
-die "can't locate x86_64-xlate.pl";
-
-open OUT,"| \"$^X\" \"$xlate\" $flavour \"$output\"";
-*STDOUT=*OUT;
-
-$avx = 2;
-
-$code.=<<___;
-.section .rodata
-.align 64
-chacha20_poly1305_constants:
-.Lchacha20_consts:
-.byte 'e','x','p','a','n','d',' ','3','2','-','b','y','t','e',' ','k'
-.byte 'e','x','p','a','n','d',' ','3','2','-','b','y','t','e',' ','k'
-.Lrol8:
-.byte 3,0,1,2, 7,4,5,6, 11,8,9,10, 15,12,13,14
-.byte 3,0,1,2, 7,4,5,6, 11,8,9,10, 15,12,13,14
-.Lrol16:
-.byte 2,3,0,1, 6,7,4,5, 10,11,8,9, 14,15,12,13
-.byte 2,3,0,1, 6,7,4,5, 10,11,8,9, 14,15,12,13
-.Lavx2_init:
-.long 0,0,0,0
-.Lsse_inc:
-.long 1,0,0,0
-.Lavx2_inc:
-.long 2,0,0,0,2,0,0,0
-.Lclamp:
-.quad 0x0FFFFFFC0FFFFFFF, 0x0FFFFFFC0FFFFFFC
-.quad 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF
-.align 16
-.Land_masks:
-.byte 0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
-.byte 0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
-.byte 0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
-.byte 0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
-.byte 0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
-.byte 0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
-.byte 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
-.byte 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
-.byte 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00
-.byte 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00
-.byte 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00
-.byte 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00
-.byte 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00
-.byte 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00
-.byte 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00
-.byte 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
-.text
-___
-
-my ($oup,$inp,$inl,$adp,$keyp,$itr1,$itr2,$adl)=("%rdi","%rsi","%rbx","%rcx","%r9","%rcx","%r8","%r8");
-my ($acc0,$acc1,$acc2)=map("%r$_",(10..12));
-my ($t0,$t1,$t2,$t3)=("%r13","%r14","%r15","%r9");
-my ($A0,$A1,$A2,$A3,$B0,$B1,$B2,$B3,$C0,$C1,$C2,$C3,$D0,$D1,$D2,$D3)=map("%xmm$_",(0..15));
-my ($T0,$T1,$T2,$T3)=($A3,$B3,$C3,$D3);
-my $xmm_storage = 0;
-if ($win64) {
-    $xmm_storage = 10*16;
-}
-my $xmm_store="0*16(%rbp)";
-my $r_store="$xmm_storage+0*16(%rbp)";
-my $s_store="$xmm_storage+1*16(%rbp)";
-my $len_store="$xmm_storage+2*16(%rbp)";
-my $state1_store="$xmm_storage+3*16(%rbp)";
-my $state2_store="$xmm_storage+4*16(%rbp)";
-my $tmp_store="$xmm_storage+5*16(%rbp)";
-my $ctr0_store="$xmm_storage+6*16(%rbp)";
-my $ctr1_store="$xmm_storage+7*16(%rbp)";
-my $ctr2_store="$xmm_storage+8*16(%rbp)";
-my $ctr3_store="$xmm_storage+9*16(%rbp)";
-
-sub chacha_qr {
-my ($a,$b,$c,$d,$t,$dir)=@_;
-$code.="movdqa $t, $tmp_store\n" if ($dir =~ /store/);
-$code.="paddd $b, $a
-        pxor $a, $d
-        pshufb .Lrol16(%rip), $d
-        paddd $d, $c
-        pxor $c, $b
-        movdqa $b, $t
-        pslld \$12, $t
-        psrld \$20, $b
-        pxor $t, $b
-        paddd $b, $a
-        pxor $a, $d
-        pshufb .Lrol8(%rip), $d
-        paddd $d, $c
-        pxor $c, $b
-        movdqa $b, $t
-        pslld \$7, $t
-        psrld \$25, $b
-        pxor $t, $b\n";
-$code.="palignr \$4, $b, $b
-        palignr \$8, $c, $c
-        palignr \$12, $d, $d\n" if ($dir =~ /left/);
-$code.="palignr \$12, $b, $b
-        palignr \$8, $c, $c
-        palignr \$4, $d, $d\n" if ($dir =~ /right/);
-$code.="movdqa $tmp_store, $t\n" if ($dir =~ /load/);
-}
-
-sub poly_add {
-my ($src)=@_;
-$code.="add 0+$src, $acc0
-        adc 8+$src, $acc1
-        adc \$1, $acc2\n";
-}
-
-sub poly_stage1 {
-$code.="mov 0+$r_store, %rax
-        mov %rax, $t2
-        mul $acc0
-        mov %rax, $t0
-        mov %rdx, $t1
-        mov 0+$r_store, %rax
-        mul $acc1
-        imulq $acc2, $t2
-        add %rax, $t1
-        adc %rdx, $t2\n";
-}
-
-sub poly_stage2 {
-$code.="mov 8+$r_store, %rax
-        mov %rax, $t3
-        mul $acc0
-        add %rax, $t1
-        adc \$0, %rdx
-        mov %rdx, $acc0
-        mov 8+$r_store, %rax
-        mul $acc1
-        add %rax, $t2
-        adc \$0, %rdx\n";
-}
-
-sub poly_stage3 {
-$code.="imulq $acc2, $t3
-        add $acc0, $t2
-        adc %rdx, $t3\n";
-}
-
-# At the beginning of the reduce stage t = [t3:t2:t1:t0] is a product of
-# r = [r1:r0] and acc = [acc2:acc1:acc0]
-# r is 124 bits at most (due to clamping) and acc is 131 bits at most
-# (acc2 is at most 4 before the addition and can be at most 6 when we add in
-# the next block) therefore t is at most 255 bits big, and t3 is 63 bits.
-sub poly_reduce_stage {
-$code.="mov $t0, $acc0
-        mov $t1, $acc1
-        mov $t2, $acc2
-        and \$3, $acc2 # At this point acc2 is 2 bits at most (value of 3)
-        mov $t2, $t0
-        and \$-4, $t0
-        mov $t3, $t1
-        shrd \$2, $t3, $t2
-        shr \$2, $t3
-        add $t0, $t2
-        adc $t1, $t3 # No carry out since t3 is 61 bits and t1 is 63 bits
-        add $t2, $acc0
-        adc $t3, $acc1
-        adc \$0, $acc2\n"; # At this point acc2 has the value of 4 at most
-}
-
-sub poly_mul {
-    &poly_stage1();
-    &poly_stage2();
-    &poly_stage3();
-    &poly_reduce_stage();
-}
-
-sub prep_state {
-my ($n)=@_;
-$code.="movdqa .Lchacha20_consts(%rip), $A0
-        movdqa $state1_store, $B0
-        movdqa $state2_store, $C0\n";
-$code.="movdqa $A0, $A1
-        movdqa $B0, $B1
-        movdqa $C0, $C1\n" if ($n ge 2);
-$code.="movdqa $A0, $A2
-        movdqa $B0, $B2
-        movdqa $C0, $C2\n" if ($n ge 3);
-$code.="movdqa $A0, $A3
-        movdqa $B0, $B3
-        movdqa $C0, $C3\n" if ($n ge 4);
-$code.="movdqa $ctr0_store, $D0
-        paddd .Lsse_inc(%rip), $D0
-        movdqa $D0, $ctr0_store\n" if ($n eq 1);
-$code.="movdqa $ctr0_store, $D1
-        paddd .Lsse_inc(%rip), $D1
-        movdqa $D1, $D0
-        paddd .Lsse_inc(%rip), $D0
-        movdqa $D0, $ctr0_store
-        movdqa $D1, $ctr1_store\n" if ($n eq 2);
-$code.="movdqa $ctr0_store, $D2
-        paddd .Lsse_inc(%rip), $D2
-        movdqa $D2, $D1
-        paddd .Lsse_inc(%rip), $D1
-        movdqa $D1, $D0
-        paddd .Lsse_inc(%rip), $D0
-        movdqa $D0, $ctr0_store
-        movdqa $D1, $ctr1_store
-        movdqa $D2, $ctr2_store\n" if ($n eq 3);
-$code.="movdqa $ctr0_store, $D3
-        paddd .Lsse_inc(%rip), $D3
-        movdqa $D3, $D2
-        paddd .Lsse_inc(%rip), $D2
-        movdqa $D2, $D1
-        paddd .Lsse_inc(%rip), $D1
-        movdqa $D1, $D0
-        paddd .Lsse_inc(%rip), $D0
-        movdqa $D0, $ctr0_store
-        movdqa $D1, $ctr1_store
-        movdqa $D2, $ctr2_store
-        movdqa $D3, $ctr3_store\n" if ($n eq 4);
-}
-
-sub finalize_state {
-my ($n)=@_;
-$code.="paddd .Lchacha20_consts(%rip), $A3
-        paddd $state1_store, $B3
-        paddd $state2_store, $C3
-        paddd $ctr3_store, $D3\n" if ($n eq 4);
-$code.="paddd .Lchacha20_consts(%rip), $A2
-        paddd $state1_store, $B2
-        paddd $state2_store, $C2
-        paddd $ctr2_store, $D2\n" if ($n ge 3);
-$code.="paddd .Lchacha20_consts(%rip), $A1
-        paddd $state1_store, $B1
-        paddd $state2_store, $C1
-        paddd $ctr1_store, $D1\n" if ($n ge 2);
-$code.="paddd .Lchacha20_consts(%rip), $A0
-        paddd $state1_store, $B0
-        paddd $state2_store, $C0
-        paddd $ctr0_store, $D0\n";
-}
-
-sub xor_stream {
-my ($A, $B, $C, $D, $offset)=@_;
-$code.="movdqu 0*16 + $offset($inp), $A3
-        movdqu 1*16 + $offset($inp), $B3
-        movdqu 2*16 + $offset($inp), $C3
-        movdqu 3*16 + $offset($inp), $D3
-        pxor $A3, $A
-        pxor $B3, $B
-        pxor $C3, $C
-        pxor $D, $D3
-        movdqu $A, 0*16 + $offset($oup)
-        movdqu $B, 1*16 + $offset($oup)
-        movdqu $C, 2*16 + $offset($oup)
-        movdqu $D3, 3*16 + $offset($oup)\n";
-}
-
-sub xor_stream_using_temp {
-my ($A, $B, $C, $D, $offset, $temp)=@_;
-$code.="movdqa $temp, $tmp_store
-        movdqu 0*16 + $offset($inp), $temp
-        pxor $A, $temp
-        movdqu $temp, 0*16 + $offset($oup)
-        movdqu 1*16 + $offset($inp), $temp
-        pxor $B, $temp
-        movdqu $temp, 1*16 + $offset($oup)
-        movdqu 2*16 + $offset($inp), $temp
-        pxor $C, $temp
-        movdqu $temp, 2*16 + $offset($oup)
-        movdqu 3*16 + $offset($inp), $temp
-        pxor $D, $temp
-        movdqu $temp, 3*16 + $offset($oup)\n";
-}
-
-sub gen_chacha_round {
-my ($rot1, $rot2, $shift)=@_;
-my $round="";
-$round.="movdqa $C0, $tmp_store\n" if ($rot1 eq 20);
-$round.="movdqa $rot2, $C0
-         paddd $B3, $A3
-         paddd $B2, $A2
-         paddd $B1, $A1
-         paddd $B0, $A0
-         pxor $A3, $D3
-         pxor $A2, $D2
-         pxor $A1, $D1
-         pxor $A0, $D0
-         pshufb $C0, $D3
-         pshufb $C0, $D2
-         pshufb $C0, $D1
-         pshufb $C0, $D0
-         movdqa $tmp_store, $C0
-         paddd $D3, $C3
-         paddd $D2, $C2
-         paddd $D1, $C1
-         paddd $D0, $C0
-         pxor $C3, $B3
-         pxor $C2, $B2
-         pxor $C1, $B1
-         pxor $C0, $B0
-         movdqa $C0, $tmp_store
-         movdqa $B3, $C0
-         psrld \$$rot1, $C0
-         pslld \$32-$rot1, $B3
-         pxor $C0, $B3
-         movdqa $B2, $C0
-         psrld \$$rot1, $C0
-         pslld \$32-$rot1, $B2
-         pxor $C0, $B2
-         movdqa $B1, $C0
-         psrld \$$rot1, $C0
-         pslld \$32-$rot1, $B1
-         pxor $C0, $B1
-         movdqa $B0, $C0
-         psrld \$$rot1, $C0
-         pslld \$32-$rot1, $B0
-         pxor $C0, $B0\n";
-($s1,$s2,$s3)=(4,8,12) if ($shift =~ /left/);
-($s1,$s2,$s3)=(12,8,4) if ($shift =~ /right/);
-$round.="movdqa $tmp_store, $C0
-         palignr \$$s1, $B3, $B3
-         palignr \$$s2, $C3, $C3
-         palignr \$$s3, $D3, $D3
-         palignr \$$s1, $B2, $B2
-         palignr \$$s2, $C2, $C2
-         palignr \$$s3, $D2, $D2
-         palignr \$$s1, $B1, $B1
-         palignr \$$s2, $C1, $C1
-         palignr \$$s3, $D1, $D1
-         palignr \$$s1, $B0, $B0
-         palignr \$$s2, $C0, $C0
-         palignr \$$s3, $D0, $D0\n"
-if (($shift =~ /left/) || ($shift =~ /right/));
-return $round;
-};
-
-$chacha_body = &gen_chacha_round(20, ".Lrol16(%rip)") .
-               &gen_chacha_round(25, ".Lrol8(%rip)", "left") .
-               &gen_chacha_round(20, ".Lrol16(%rip)") .
-               &gen_chacha_round(25, ".Lrol8(%rip)", "right");
-
-my @loop_body = split /\n/, $chacha_body;
-
-sub emit_body {
-my ($n)=@_;
-    for (my $i=0; $i < $n; $i++) {
-        $code=$code.shift(@loop_body)."\n";
-    };
-}
-
-{
-################################################################################
-# void poly_hash_ad_internal();
-$code.="
-.type poly_hash_ad_internal,\@abi-omnipotent
-.align 64
-poly_hash_ad_internal:
-.cfi_startproc
-.cfi_def_cfa rsp, 8
-    xor $acc0, $acc0
-    xor $acc1, $acc1
-    xor $acc2, $acc2
-    cmp \$13,  $itr2
-    jne .Lhash_ad_loop
-.Lpoly_fast_tls_ad:
-    # Special treatment for the TLS case of 13 bytes
-    mov ($adp), $acc0
-    mov 5($adp), $acc1
-    shr \$24, $acc1
-    mov \$1, $acc2\n";
-    &poly_mul(); $code.="
-    ret
-.Lhash_ad_loop:
-        # Hash in 16 byte chunk
-        cmp \$16, $itr2
-        jb .Lhash_ad_tail\n";
-        &poly_add("0($adp)");
-        &poly_mul(); $code.="
-        lea 1*16($adp), $adp
-        sub \$16, $itr2
-    jmp .Lhash_ad_loop
-.Lhash_ad_tail:
-    cmp \$0, $itr2
-    je .Lhash_ad_done
-    # Hash last < 16 byte tail
-    xor $t0, $t0
-    xor $t1, $t1
-    xor $t2, $t2
-    add $itr2, $adp
-.Lhash_ad_tail_loop:
-        shld \$8, $t0, $t1
-        shl \$8, $t0
-        movzxb -1($adp), $t2
-        xor $t2, $t0
-        dec $adp
-        dec $itr2
-    jne .Lhash_ad_tail_loop
-
-    add $t0, $acc0
-    adc $t1, $acc1
-    adc \$1, $acc2\n";
-    &poly_mul(); $code.="
-    # Finished AD
-.Lhash_ad_done:
-    ret
-.cfi_endproc
-.size poly_hash_ad_internal, .-poly_hash_ad_internal\n";
-}
-
-{
-################################################################################
-# void chacha20_poly1305_open(uint8_t *out_plaintext, const uint8_t *ciphertext,
-#                             size_t plaintext_len, const uint8_t *ad,
-#                             size_t ad_len,
-#                             union chacha20_poly1305_open_data *aead_data)
-#
-$code.="
-.globl chacha20_poly1305_open_sse41
-.type chacha20_poly1305_open_sse41,\@function,6
-.align 64
-chacha20_poly1305_open_sse41:
-.cfi_startproc
-    _CET_ENDBR
-    push %rbp
-.cfi_push %rbp
-    push %rbx
-.cfi_push %rbx
-    push %r12
-.cfi_push %r12
-    push %r13
-.cfi_push %r13
-    push %r14
-.cfi_push %r14
-    push %r15
-.cfi_push %r15
-    # We write the calculated authenticator back to keyp at the end, so save
-    # the pointer on the stack too.
-    push $keyp
-.cfi_push $keyp
-    sub \$288 + $xmm_storage + 32, %rsp
-.cfi_adjust_cfa_offset 288 + 32
-
-    lea 32(%rsp), %rbp
-    and \$-32, %rbp\n";
-$code.="
-    movaps %xmm6,16*0+$xmm_store
-    movaps %xmm7,16*1+$xmm_store
-    movaps %xmm8,16*2+$xmm_store
-    movaps %xmm9,16*3+$xmm_store
-    movaps %xmm10,16*4+$xmm_store
-    movaps %xmm11,16*5+$xmm_store
-    movaps %xmm12,16*6+$xmm_store
-    movaps %xmm13,16*7+$xmm_store
-    movaps %xmm14,16*8+$xmm_store
-    movaps %xmm15,16*9+$xmm_store\n" if ($win64);
-$code.="
-    mov %rdx, $inl
-    mov $adl, 0+$len_store
-    mov $inl, 8+$len_store
-
-    cmp \$128, $inl
-    jbe .Lopen_sse_128
-    # For long buffers, prepare the poly key first
-    movdqa .Lchacha20_consts(%rip), $A0
-    movdqu 0*16($keyp), $B0
-    movdqu 1*16($keyp), $C0
-    movdqu 2*16($keyp), $D0
-
-    movdqa $D0, $T1
-    # Store on stack, to free keyp
-    movdqa $B0, $state1_store
-    movdqa $C0, $state2_store
-    movdqa $D0, $ctr0_store
-    mov \$10, $acc0
-.Lopen_sse_init_rounds:\n";
-        &chacha_qr($A0,$B0,$C0,$D0,$T0,"left");
-        &chacha_qr($A0,$B0,$C0,$D0,$T0,"right"); $code.="
-        dec $acc0
-    jne .Lopen_sse_init_rounds
-    # A0|B0 hold the Poly1305 32-byte key, C0,D0 can be discarded
-    paddd .Lchacha20_consts(%rip), $A0
-    paddd $state1_store, $B0
-    # Clamp and store the key
-    pand .Lclamp(%rip), $A0
-    movdqa $A0, $r_store
-    movdqa $B0, $s_store
-    # Hash
-    mov $adl, $itr2
-    call poly_hash_ad_internal
-.Lopen_sse_main_loop:
-        cmp \$16*16, $inl
-        jb .Lopen_sse_tail
-        # Load state, increment counter blocks\n";
-        &prep_state(4); $code.="
-        # There are 10 ChaCha20 iterations of 2QR each, so for 6 iterations we
-        # hash 2 blocks, and for the remaining 4 only 1 block - for a total of 16
-        mov \$4, $itr1
-        mov $inp, $itr2
-.Lopen_sse_main_loop_rounds:\n";
-            &emit_body(20);
-            &poly_add("0($itr2)"); $code.="
-            lea 2*8($itr2), $itr2\n";
-            &emit_body(20);
-            &poly_stage1();
-            &emit_body(20);
-            &poly_stage2();
-            &emit_body(20);
-            &poly_stage3();
-            &emit_body(20);
-            &poly_reduce_stage();
-            foreach $l (@loop_body) {$code.=$l."\n";}
-            @loop_body = split /\n/, $chacha_body; $code.="
-            dec $itr1
-        jge .Lopen_sse_main_loop_rounds\n";
-            &poly_add("0($itr2)");
-            &poly_mul(); $code.="
-            lea 2*8($itr2), $itr2
-            cmp \$-6, $itr1
-        jg .Lopen_sse_main_loop_rounds\n";
-        &finalize_state(4);
-        &xor_stream_using_temp($A3, $B3, $C3, $D3, "0*16", $D0);
-        &xor_stream($A2, $B2, $C2, $D2, "4*16");
-        &xor_stream($A1, $B1, $C1, $D1, "8*16");
-        &xor_stream($A0, $B0, $C0, $tmp_store, "12*16"); $code.="
-        lea 16*16($inp), $inp
-        lea 16*16($oup), $oup
-        sub \$16*16, $inl
-    jmp .Lopen_sse_main_loop
-.Lopen_sse_tail:
-    # Handle the various tail sizes efficiently
-    test $inl, $inl
-    jz .Lopen_sse_finalize
-    cmp \$12*16, $inl
-    ja .Lopen_sse_tail_256
-    cmp \$8*16, $inl
-    ja .Lopen_sse_tail_192
-    cmp \$4*16, $inl
-    ja .Lopen_sse_tail_128\n";
-###############################################################################
-    # At most 64 bytes are left
-    &prep_state(1); $code.="
-    xor $itr2, $itr2
-    mov $inl, $itr1
-    cmp \$16, $itr1
-    jb .Lopen_sse_tail_64_rounds
-.Lopen_sse_tail_64_rounds_and_x1hash: \n";
-        &poly_add("0($inp,$itr2)");
-        &poly_mul(); $code.="
-        sub \$16, $itr1
-.Lopen_sse_tail_64_rounds:
-        add \$16, $itr2\n";
-        &chacha_qr($A0,$B0,$C0,$D0,$T0,"left");
-        &chacha_qr($A0,$B0,$C0,$D0,$T0,"right"); $code.="
-        cmp \$16, $itr1
-    jae .Lopen_sse_tail_64_rounds_and_x1hash
-        cmp \$10*16, $itr2
-    jne .Lopen_sse_tail_64_rounds\n";
-    &finalize_state(1); $code.="
-    jmp .Lopen_sse_tail_64_dec_loop
-###############################################################################
-.Lopen_sse_tail_128:\n";
-    # 65 - 128 bytes are left
-    &prep_state(2); $code.="
-    mov $inl, $itr1
-    and \$-16, $itr1
-    xor $itr2, $itr2
-.Lopen_sse_tail_128_rounds_and_x1hash: \n";
-        &poly_add("0($inp,$itr2)");
-        &poly_mul(); $code.="
-.Lopen_sse_tail_128_rounds:
-        add \$16, $itr2\n";
-        &chacha_qr($A0,$B0,$C0,$D0,$T0,"left");
-        &chacha_qr($A1,$B1,$C1,$D1,$T0,"left");
-        &chacha_qr($A0,$B0,$C0,$D0,$T0,"right");
-        &chacha_qr($A1,$B1,$C1,$D1,$T0,"right");$code.="
-        cmp $itr1, $itr2
-    jb .Lopen_sse_tail_128_rounds_and_x1hash
-        cmp \$10*16, $itr2
-    jne .Lopen_sse_tail_128_rounds\n";
-    &finalize_state(2);
-    &xor_stream($A1, $B1, $C1, $D1, "0*16"); $code.="
-    sub \$4*16, $inl
-    lea 4*16($inp), $inp
-    lea 4*16($oup), $oup
-    jmp .Lopen_sse_tail_64_dec_loop
-###############################################################################
-.Lopen_sse_tail_192:\n";
-    # 129 - 192 bytes are left
-    &prep_state(3); $code.="
-    mov $inl, $itr1
-    mov \$10*16, $itr2
-    cmp \$10*16, $itr1
-    cmovg $itr2, $itr1
-    and \$-16, $itr1
-    xor $itr2, $itr2
-.Lopen_sse_tail_192_rounds_and_x1hash: \n";
-        &poly_add("0($inp,$itr2)");
-        &poly_mul(); $code.="
-.Lopen_sse_tail_192_rounds:
-        add \$16, $itr2\n";
-        &chacha_qr($A0,$B0,$C0,$D0,$T0,"left");
-        &chacha_qr($A1,$B1,$C1,$D1,$T0,"left");
-        &chacha_qr($A2,$B2,$C2,$D2,$T0,"left");
-        &chacha_qr($A0,$B0,$C0,$D0,$T0,"right");
-        &chacha_qr($A1,$B1,$C1,$D1,$T0,"right");
-        &chacha_qr($A2,$B2,$C2,$D2,$T0,"right"); $code.="
-        cmp $itr1, $itr2
-    jb .Lopen_sse_tail_192_rounds_and_x1hash
-        cmp \$10*16, $itr2
-    jne .Lopen_sse_tail_192_rounds
-    cmp \$11*16, $inl
-    jb .Lopen_sse_tail_192_finish\n";
-    &poly_add("10*16($inp)");
-    &poly_mul(); $code.="
-    cmp \$12*16, $inl
-    jb .Lopen_sse_tail_192_finish\n";
-    &poly_add("11*16($inp)");
-    &poly_mul(); $code.="
-.Lopen_sse_tail_192_finish: \n";
-    &finalize_state(3);
-    &xor_stream($A2, $B2, $C2, $D2, "0*16");
-    &xor_stream($A1, $B1, $C1, $D1, "4*16"); $code.="
-    sub \$8*16, $inl
-    lea 8*16($inp), $inp
-    lea 8*16($oup), $oup
-    jmp .Lopen_sse_tail_64_dec_loop
-###############################################################################
-.Lopen_sse_tail_256:\n";
-    # 193 - 255 bytes are left
-    &prep_state(4); $code.="
-    xor $itr2, $itr2
-.Lopen_sse_tail_256_rounds_and_x1hash: \n";
-        &poly_add("0($inp,$itr2)");
-        &chacha_qr($A0,$B0,$C0,$D0,$C3,"store_left");
-        &chacha_qr($A1,$B1,$C1,$D1,$C3,"left");
-        &chacha_qr($A2,$B2,$C2,$D2,$C3,"left_load");
-        &poly_stage1();
-        &chacha_qr($A3,$B3,$C3,$D3,$C1,"store_left_load");
-        &poly_stage2();
-        &chacha_qr($A0,$B0,$C0,$D0,$C3,"store_right");
-        &chacha_qr($A1,$B1,$C1,$D1,$C3,"right");
-        &poly_stage3();
-        &chacha_qr($A2,$B2,$C2,$D2,$C3,"right_load");
-        &poly_reduce_stage();
-        &chacha_qr($A3,$B3,$C3,$D3,$C1,"store_right_load"); $code.="
-        add \$16, $itr2
-        cmp \$10*16, $itr2
-    jb .Lopen_sse_tail_256_rounds_and_x1hash
-
-    mov $inl, $itr1
-    and \$-16, $itr1
-.Lopen_sse_tail_256_hash: \n";
-        &poly_add("0($inp,$itr2)");
-        &poly_mul(); $code.="
-        add \$16, $itr2
-        cmp $itr1, $itr2
-    jb .Lopen_sse_tail_256_hash\n";
-    &finalize_state(4);
-    &xor_stream_using_temp($A3, $B3, $C3, $D3, "0*16", $D0);
-    &xor_stream($A2, $B2, $C2, $D2, "4*16");
-    &xor_stream($A1, $B1, $C1, $D1, "8*16"); $code.="
-    movdqa $tmp_store, $D0
-    sub \$12*16, $inl
-    lea 12*16($inp), $inp
-    lea 12*16($oup), $oup
-###############################################################################
-    # Decrypt the remaining data, 16B at a time, using existing stream
-.Lopen_sse_tail_64_dec_loop:
-    cmp \$16, $inl
-    jb .Lopen_sse_tail_16_init
-        sub \$16, $inl
-        movdqu ($inp), $T0
-        pxor $T0, $A0
-        movdqu $A0, ($oup)
-        lea 16($inp), $inp
-        lea 16($oup), $oup
-        movdqa $B0, $A0
-        movdqa $C0, $B0
-        movdqa $D0, $C0
-    jmp .Lopen_sse_tail_64_dec_loop
-.Lopen_sse_tail_16_init:
-    movdqa $A0, $A1
-
-    # Decrypt up to 16 bytes at the end.
-.Lopen_sse_tail_16:
-    test $inl, $inl
-    jz .Lopen_sse_finalize
-
-    # Read the final bytes into $T0. They need to be read in reverse order so
-    # that they end up in the correct order in $T0.
-    pxor $T0, $T0
-    lea -1($inp,$inl), $inp
-    movq $inl, $itr2
-.Lopen_sse_tail_16_compose:
-        pslldq \$1, $T0
-        pinsrb \$0, ($inp), $T0
-        sub \$1, $inp
-        sub \$1, $itr2
-        jnz .Lopen_sse_tail_16_compose
-
-    movq $T0, $t0
-    pextrq \$1, $T0, $t1
-    # The final bytes of keystream are in $A1.
-    pxor $A1, $T0
-
-    # Copy the plaintext bytes out.
-.Lopen_sse_tail_16_extract:
-        pextrb \$0, $T0, ($oup)
-        psrldq \$1, $T0
-        add \$1, $oup
-        sub \$1, $inl
-    jne .Lopen_sse_tail_16_extract
-
-    add $t0, $acc0
-    adc $t1, $acc1
-    adc \$1, $acc2\n";
-    &poly_mul(); $code.="
-
-.Lopen_sse_finalize:\n";
-    &poly_add($len_store);
-    &poly_mul(); $code.="
-    # Final reduce
-    mov $acc0, $t0
-    mov $acc1, $t1
-    mov $acc2, $t2
-    sub \$-5, $acc0
-    sbb \$-1, $acc1
-    sbb \$3, $acc2
-    cmovc $t0, $acc0
-    cmovc $t1, $acc1
-    cmovc $t2, $acc2
-    # Add in s part of the key
-    add 0+$s_store, $acc0
-    adc 8+$s_store, $acc1\n";
-
-$code.="
-    movaps 16*0+$xmm_store, %xmm6
-    movaps 16*1+$xmm_store, %xmm7
-    movaps 16*2+$xmm_store, %xmm8
-    movaps 16*3+$xmm_store, %xmm9
-    movaps 16*4+$xmm_store, %xmm10
-    movaps 16*5+$xmm_store, %xmm11
-    movaps 16*6+$xmm_store, %xmm12
-    movaps 16*7+$xmm_store, %xmm13
-    movaps 16*8+$xmm_store, %xmm14
-    movaps 16*9+$xmm_store, %xmm15\n" if ($win64);
-$code.="
-.cfi_remember_state
-    add \$288 + $xmm_storage + 32, %rsp
-.cfi_adjust_cfa_offset -(288 + 32)
-    # The tag replaces the key on return
-    pop $keyp
-.cfi_pop $keyp
-    mov $acc0, ($keyp)
-    mov $acc1, 8($keyp)
-    pop %r15
-.cfi_pop %r15
-    pop %r14
-.cfi_pop %r14
-    pop %r13
-.cfi_pop %r13
-    pop %r12
-.cfi_pop %r12
-    pop %rbx
-.cfi_pop %rbx
-    pop %rbp
-.cfi_pop %rbp
-    ret
-###############################################################################
-.Lopen_sse_128:
-.cfi_restore_state
-    movdqu .Lchacha20_consts(%rip), $A0\nmovdqa $A0, $A1\nmovdqa $A0, $A2
-    movdqu 0*16($keyp), $B0\nmovdqa $B0, $B1\nmovdqa $B0, $B2
-    movdqu 1*16($keyp), $C0\nmovdqa $C0, $C1\nmovdqa $C0, $C2
-    movdqu 2*16($keyp), $D0
-    movdqa $D0, $D1\npaddd .Lsse_inc(%rip), $D1
-    movdqa $D1, $D2\npaddd .Lsse_inc(%rip), $D2
-    movdqa $B0, $T1\nmovdqa $C0, $T2\nmovdqa $D1, $T3
-    mov \$10, $acc0
-
-.Lopen_sse_128_rounds:  \n";
-        &chacha_qr($A0,$B0,$C0,$D0,$T0,"left");
-        &chacha_qr($A1,$B1,$C1,$D1,$T0,"left");
-        &chacha_qr($A2,$B2,$C2,$D2,$T0,"left");
-        &chacha_qr($A0,$B0,$C0,$D0,$T0,"right");
-        &chacha_qr($A1,$B1,$C1,$D1,$T0,"right");
-        &chacha_qr($A2,$B2,$C2,$D2,$T0,"right"); $code.="
-    dec $acc0
-    jnz .Lopen_sse_128_rounds
-    paddd .Lchacha20_consts(%rip), $A0
-    paddd .Lchacha20_consts(%rip), $A1
-    paddd .Lchacha20_consts(%rip), $A2
-    paddd $T1, $B0\npaddd $T1, $B1\npaddd $T1, $B2
-    paddd $T2, $C1\npaddd $T2, $C2
-    paddd $T3, $D1
-    paddd .Lsse_inc(%rip), $T3
-    paddd $T3, $D2
-    # Clamp and store the key
-    pand .Lclamp(%rip), $A0
-    movdqa $A0, $r_store
-    movdqa $B0, $s_store
-    # Hash
-    mov $adl, $itr2
-    call poly_hash_ad_internal
-.Lopen_sse_128_xor_hash:
-        cmp \$16, $inl
-        jb .Lopen_sse_tail_16
-        sub \$16, $inl\n";
-        # Load for hashing
-        &poly_add("0*8($inp)"); $code.="
-        # Load for decryption
-        movdqu 0*16($inp), $T0
-        pxor $T0, $A1
-        movdqu $A1, 0*16($oup)
-        lea 1*16($inp), $inp
-        lea 1*16($oup), $oup\n";
-        &poly_mul(); $code.="
-        # Shift the stream left
-        movdqa $B1, $A1
-        movdqa $C1, $B1
-        movdqa $D1, $C1
-        movdqa $A2, $D1
-        movdqa $B2, $A2
-        movdqa $C2, $B2
-        movdqa $D2, $C2
-    jmp .Lopen_sse_128_xor_hash
-.size chacha20_poly1305_open_sse41, .-chacha20_poly1305_open_sse41
-.cfi_endproc
-
-################################################################################
-################################################################################
-# void chacha20_poly1305_seal(uint8_t *out_ciphertext, const uint8_t *plaintext,
-#                             size_t plaintext_len, const uint8_t *ad,
-#                             size_t ad_len,
-#                             union chacha20_poly1305_seal_data *data);
-.globl  chacha20_poly1305_seal_sse41
-.type chacha20_poly1305_seal_sse41,\@function,6
-.align 64
-chacha20_poly1305_seal_sse41:
-.cfi_startproc
-    _CET_ENDBR
-    push %rbp
-.cfi_push %rbp
-    push %rbx
-.cfi_push %rbx
-    push %r12
-.cfi_push %r12
-    push %r13
-.cfi_push %r13
-    push %r14
-.cfi_push %r14
-    push %r15
-.cfi_push %r15   
-# We write the calculated authenticator back to keyp at the end, so save
-# the pointer on the stack too.
-    push $keyp
-.cfi_push $keyp
-    sub \$288 + $xmm_storage + 32, %rsp
-.cfi_adjust_cfa_offset 288 + 32
-    lea 32(%rsp), %rbp
-    and \$-32, %rbp\n";
-$code.="
-    movaps %xmm6,16*0+$xmm_store
-    movaps %xmm7,16*1+$xmm_store
-    movaps %xmm8,16*2+$xmm_store
-    movaps %xmm9,16*3+$xmm_store
-    movaps %xmm10,16*4+$xmm_store
-    movaps %xmm11,16*5+$xmm_store
-    movaps %xmm12,16*6+$xmm_store
-    movaps %xmm13,16*7+$xmm_store
-    movaps %xmm14,16*8+$xmm_store
-    movaps %xmm15,16*9+$xmm_store\n" if ($win64);
-$code.="
-    mov 56($keyp), $inl  # extra_in_len
-    addq %rdx, $inl
-    mov $adl, 0+$len_store
-    mov $inl, 8+$len_store
-    mov %rdx, $inl
-
-    cmp \$128, $inl
-    jbe .Lseal_sse_128
-    # For longer buffers, prepare the poly key + some stream
-    movdqa .Lchacha20_consts(%rip), $A0
-    movdqu 0*16($keyp), $B0
-    movdqu 1*16($keyp), $C0
-    movdqu 2*16($keyp), $D0
-
-    movdqa $A0, $A1
-    movdqa $A0, $A2
-    movdqa $A0, $A3
-    movdqa $B0, $B1
-    movdqa $B0, $B2
-    movdqa $B0, $B3
-    movdqa $C0, $C1
-    movdqa $C0, $C2
-    movdqa $C0, $C3
-    movdqa $D0, $D3
-    paddd .Lsse_inc(%rip), $D0
-    movdqa $D0, $D2
-    paddd .Lsse_inc(%rip), $D0
-    movdqa $D0, $D1
-    paddd .Lsse_inc(%rip), $D0
-    # Store on stack
-    movdqa $B0, $state1_store
-    movdqa $C0, $state2_store
-    movdqa $D0, $ctr0_store
-    movdqa $D1, $ctr1_store
-    movdqa $D2, $ctr2_store
-    movdqa $D3, $ctr3_store
-    mov \$10, $acc0
-.Lseal_sse_init_rounds:  \n";
-        foreach $l (@loop_body) {$code.=$l."\n";}
-        @loop_body = split /\n/, $chacha_body; $code.="
-        dec $acc0
-    jnz .Lseal_sse_init_rounds\n";
-    &finalize_state(4); $code.="
-    # Clamp and store the key
-    pand .Lclamp(%rip), $A3
-    movdqa $A3, $r_store
-    movdqa $B3, $s_store
-    # Hash
-    mov $adl, $itr2
-    call poly_hash_ad_internal\n";
-    &xor_stream($A2,$B2,$C2,$D2,"0*16");
-    &xor_stream($A1,$B1,$C1,$D1,"4*16"); $code.="
-    cmp \$12*16, $inl
-    ja .Lseal_sse_main_init
-    mov \$8*16, $itr1
-    sub \$8*16, $inl
-    lea 8*16($inp), $inp
-    jmp .Lseal_sse_128_tail_hash
-.Lseal_sse_main_init:\n";
-    &xor_stream($A0, $B0, $C0, $D0, "8*16"); $code.="
-    mov \$12*16, $itr1
-    sub \$12*16, $inl
-    lea 12*16($inp), $inp
-    mov \$2, $itr1
-    mov \$8, $itr2
-    cmp \$4*16, $inl
-    jbe .Lseal_sse_tail_64
-    cmp \$8*16, $inl
-    jbe .Lseal_sse_tail_128
-    cmp \$12*16, $inl
-    jbe .Lseal_sse_tail_192
-
-.Lseal_sse_main_loop: \n";
-    # The main loop
-        &prep_state(4); $code.="
-.align 32
-.Lseal_sse_main_rounds: \n";
-            &emit_body(20);
-            &poly_add("0($oup)");
-            &emit_body(20);
-            &poly_stage1();
-            &emit_body(20);
-            &poly_stage2();
-            &emit_body(20);
-            &poly_stage3();
-            &emit_body(20);
-            &poly_reduce_stage();
-            foreach $l (@loop_body) {$code.=$l."\n";}
-            @loop_body = split /\n/, $chacha_body; $code.="
-            lea 16($oup), $oup
-            dec $itr2
-        jge .Lseal_sse_main_rounds\n";
-            &poly_add("0*8($oup)");
-            &poly_mul(); $code.="
-            lea 16($oup), $oup
-            dec $itr1
-        jg .Lseal_sse_main_rounds\n";
-
-        &finalize_state(4);$code.="
-        movdqa $D2, $tmp_store\n";
-        &xor_stream_using_temp($A3,$B3,$C3,$D3,0*16,$D2); $code.="
-        movdqa $tmp_store, $D2\n";
-        &xor_stream($A2,$B2,$C2,$D2, 4*16);
-        &xor_stream($A1,$B1,$C1,$D1, 8*16); $code.="
-        cmp \$16*16, $inl
-        ja .Lseal_sse_main_loop_xor
-
-        mov \$12*16, $itr1
-        sub \$12*16, $inl
-        lea 12*16($inp), $inp
-        jmp .Lseal_sse_128_tail_hash
-.Lseal_sse_main_loop_xor: \n";
-        &xor_stream($A0,$B0,$C0,$D0,"12*16"); $code.="
-        lea 16*16($inp), $inp
-        sub \$16*16, $inl
-        mov \$6, $itr1
-        mov \$4, $itr2
-        cmp \$12*16, $inl
-    jg .Lseal_sse_main_loop
-    mov $inl, $itr1
-    test $inl, $inl
-    je .Lseal_sse_128_tail_hash
-    mov \$6, $itr1
-    cmp \$8*16, $inl
-    ja .Lseal_sse_tail_192
-    cmp \$4*16, $inl
-    ja .Lseal_sse_tail_128
-###############################################################################
-.Lseal_sse_tail_64: \n";
-    &prep_state(1); $code.="
-.Lseal_sse_tail_64_rounds_and_x2hash: \n";
-        &poly_add("0($oup)");
-        &poly_mul(); $code.="
-        lea 16($oup), $oup
-.Lseal_sse_tail_64_rounds_and_x1hash: \n";
-        &chacha_qr($A0,$B0,$C0,$D0,$T0,"left");
-        &chacha_qr($A0,$B0,$C0,$D0,$T0,"right");
-        &poly_add("0($oup)");
-        &poly_mul(); $code.="
-        lea 16($oup), $oup
-    dec $itr1
-    jg .Lseal_sse_tail_64_rounds_and_x2hash
-    dec $itr2
-    jge .Lseal_sse_tail_64_rounds_and_x1hash\n";
-    &finalize_state(1); $code.="
-    jmp .Lseal_sse_128_tail_xor
-###############################################################################
-.Lseal_sse_tail_128:\n";
-    &prep_state(2); $code.="
-.Lseal_sse_tail_128_rounds_and_x2hash: \n";
-        &poly_add("0($oup)");
-        &poly_mul(); $code.="
-        lea 16($oup), $oup
-.Lseal_sse_tail_128_rounds_and_x1hash: \n";
-        &chacha_qr($A0,$B0,$C0,$D0,$T0,"left");
-        &chacha_qr($A1,$B1,$C1,$D1,$T0,"left");
-        &poly_add("0($oup)");
-        &poly_mul();
-        &chacha_qr($A0,$B0,$C0,$D0,$T0,"right");
-        &chacha_qr($A1,$B1,$C1,$D1,$T0,"right"); $code.="
-        lea 16($oup), $oup
-    dec $itr1
-    jg .Lseal_sse_tail_128_rounds_and_x2hash
-    dec $itr2
-    jge .Lseal_sse_tail_128_rounds_and_x1hash\n";
-    &finalize_state(2);
-    &xor_stream($A1,$B1,$C1,$D1,0*16); $code.="
-    mov \$4*16, $itr1
-    sub \$4*16, $inl
-    lea 4*16($inp), $inp
-    jmp .Lseal_sse_128_tail_hash
-###############################################################################
-.Lseal_sse_tail_192:\n";
-    &prep_state(3); $code.="
-.Lseal_sse_tail_192_rounds_and_x2hash: \n";
-        &poly_add("0($oup)");
-        &poly_mul(); $code.="
-        lea 16($oup), $oup
-.Lseal_sse_tail_192_rounds_and_x1hash: \n";
-        &chacha_qr($A0,$B0,$C0,$D0,$T0,"left");
-        &chacha_qr($A1,$B1,$C1,$D1,$T0,"left");
-        &chacha_qr($A2,$B2,$C2,$D2,$T0,"left");
-        &poly_add("0($oup)");
-        &poly_mul();
-        &chacha_qr($A0,$B0,$C0,$D0,$T0,"right");
-        &chacha_qr($A1,$B1,$C1,$D1,$T0,"right");
-        &chacha_qr($A2,$B2,$C2,$D2,$T0,"right"); $code.="
-        lea 16($oup), $oup
-    dec $itr1
-    jg .Lseal_sse_tail_192_rounds_and_x2hash
-    dec $itr2
-    jge .Lseal_sse_tail_192_rounds_and_x1hash\n";
-    &finalize_state(3);
-    &xor_stream($A2,$B2,$C2,$D2,0*16);
-    &xor_stream($A1,$B1,$C1,$D1,4*16); $code.="
-    mov \$8*16, $itr1
-    sub \$8*16, $inl
-    lea 8*16($inp), $inp
-###############################################################################
-.Lseal_sse_128_tail_hash:
-        cmp \$16, $itr1
-        jb .Lseal_sse_128_tail_xor\n";
-        &poly_add("0($oup)");
-        &poly_mul(); $code.="
-        sub \$16, $itr1
-        lea 16($oup), $oup
-    jmp .Lseal_sse_128_tail_hash
-
-.Lseal_sse_128_tail_xor:
-        cmp \$16, $inl
-        jb .Lseal_sse_tail_16
-        sub \$16, $inl
-        # Load for decryption
-        movdqu 0*16($inp), $T0
-        pxor $T0, $A0
-        movdqu $A0, 0*16($oup)
-        # Then hash
-        add 0*8($oup), $acc0
-        adc 1*8($oup), $acc1
-        adc \$1, $acc2
-        lea 1*16($inp), $inp
-        lea 1*16($oup), $oup\n";
-        &poly_mul(); $code.="
-        # Shift the stream left
-        movdqa $B0, $A0
-        movdqa $C0, $B0
-        movdqa $D0, $C0
-        movdqa $A1, $D0
-        movdqa $B1, $A1
-        movdqa $C1, $B1
-        movdqa $D1, $C1
-    jmp .Lseal_sse_128_tail_xor
-
-.Lseal_sse_tail_16:
-    test $inl, $inl
-    jz .Lprocess_blocks_of_extra_in
-    # We can only load the PT one byte at a time to avoid buffer overread
-    mov $inl, $itr2
-    mov $inl, $itr1
-    lea -1($inp,$inl), $inp
-    pxor $T3, $T3
-.Lseal_sse_tail_16_compose:
-        pslldq \$1, $T3
-        pinsrb \$0, ($inp), $T3
-        lea -1($inp), $inp
-        dec $itr1
-        jne .Lseal_sse_tail_16_compose
-
-    # XOR the keystream with the plaintext.
-    pxor $A0, $T3
-
-    # Write ciphertext out, byte-by-byte.
-    movq $inl, $itr1
-    movdqu $T3, $A0
-.Lseal_sse_tail_16_extract:
-        pextrb \$0, $A0, ($oup)
-        psrldq \$1, $A0
-        add \$1, $oup
-        sub \$1, $itr1
-        jnz .Lseal_sse_tail_16_extract
-
-    # $T3 contains the final (partial, non-empty) block of ciphertext which
-    # needs to be fed into the Poly1305 state. The right-most $inl bytes of it
-    # are valid. We need to fill it with extra_in bytes until full, or until we
-    # run out of bytes.
-    #
-    # $keyp points to the tag output, which is actually a struct with the
-    # extra_in pointer and length at offset 48.
-    movq 288 + $xmm_storage + 32(%rsp), $keyp
-    movq 56($keyp), $t1  # extra_in_len
-    movq 48($keyp), $t0  # extra_in
-    test $t1, $t1
-    jz .Lprocess_partial_block  # Common case: no bytes of extra_in
-
-    movq \$16, $t2
-    subq $inl, $t2  # 16-$inl is the number of bytes that fit into $T3.
-    cmpq $t2, $t1   # if extra_in_len < 16-$inl, only copy extra_in_len
-                    # (note that AT&T syntax reverses the arguments)
-    jge .Lload_extra_in
-    movq $t1, $t2
-
-.Lload_extra_in:
-    # $t2 contains the number of bytes of extra_in (pointed to by $t0) to load
-    # into $T3. They are loaded in reverse order.
-    leaq -1($t0,$t2), $inp
-    # Update extra_in and extra_in_len to reflect the bytes that are about to
-    # be read.
-    addq $t2, $t0
-    subq $t2, $t1
-    movq $t0, 48($keyp)
-    movq $t1, 56($keyp)
-
-    # Update $itr2, which is used to select the mask later on, to reflect the
-    # extra bytes about to be added.
-    addq $t2, $itr2
-
-    # Load $t2 bytes of extra_in into $T2.
-    pxor $T2, $T2
-.Lload_extra_load_loop:
-        pslldq \$1, $T2
-        pinsrb \$0, ($inp), $T2
-        lea -1($inp), $inp
-        sub \$1, $t2
-        jnz .Lload_extra_load_loop
-
-    # Shift $T2 up the length of the remainder from the main encryption. Sadly,
-    # the shift for an XMM register has to be a constant, thus we loop to do
-    # this.
-    movq $inl, $t2
-
-.Lload_extra_shift_loop:
-        pslldq \$1, $T2
-        sub \$1, $t2
-        jnz .Lload_extra_shift_loop
-
-    # Mask $T3 (the remainder from the main encryption) so that superfluous
-    # bytes are zero. This means that the non-zero bytes in $T2 and $T3 are
-    # disjoint and so we can merge them with an OR.
-    lea .Land_masks(%rip), $t2
-    shl \$4, $inl
-    pand -16($t2,$inl), $T3
-
-    # Merge $T2 into $T3, forming the remainder block.
-    por $T2, $T3
-
-    # The block of ciphertext + extra_in is ready to be included in the
-    # Poly1305 state.
-    movq $T3, $t0
-    pextrq \$1, $T3, $t1
-    add $t0, $acc0
-    adc $t1, $acc1
-    adc \$1, $acc2\n";
-    &poly_mul(); $code.="
-
-.Lprocess_blocks_of_extra_in:
-    # There may be additional bytes of extra_in to process.
-    movq 288+32+$xmm_storage (%rsp), $keyp
-    movq 48($keyp), $inp   # extra_in
-    movq 56($keyp), $itr2  # extra_in_len
-    movq $itr2, $itr1
-    shr \$4, $itr2         # number of blocks
-
-.Lprocess_extra_hash_loop:
-        jz process_extra_in_trailer\n";
-        &poly_add("0($inp)");
-        &poly_mul(); $code.="
-        leaq 16($inp), $inp
-        subq \$1, $itr2
-        jmp .Lprocess_extra_hash_loop
-process_extra_in_trailer:
-    andq \$15, $itr1       # remaining num bytes (<16) of extra_in
-    movq $itr1, $inl
-    jz .Ldo_length_block
-    leaq -1($inp,$itr1), $inp
-
-.Lprocess_extra_in_trailer_load:
-        pslldq \$1, $T3
-        pinsrb \$0, ($inp), $T3
-        lea -1($inp), $inp
-        sub \$1, $itr1
-        jnz .Lprocess_extra_in_trailer_load
-
-.Lprocess_partial_block:
-    # $T3 contains $inl bytes of data to be fed into Poly1305. $inl != 0
-    lea .Land_masks(%rip), $t2
-    shl \$4, $inl
-    pand -16($t2,$inl), $T3
-    movq $T3, $t0
-    pextrq \$1, $T3, $t1
-    add $t0, $acc0
-    adc $t1, $acc1
-    adc \$1, $acc2\n";
-    &poly_mul(); $code.="
-
-.Ldo_length_block:\n";
-    &poly_add($len_store);
-    &poly_mul(); $code.="
-    # Final reduce
-    mov $acc0, $t0
-    mov $acc1, $t1
-    mov $acc2, $t2
-    sub \$-5, $acc0
-    sbb \$-1, $acc1
-    sbb \$3, $acc2
-    cmovc $t0, $acc0
-    cmovc $t1, $acc1
-    cmovc $t2, $acc2
-    # Add in s part of the key
-    add 0+$s_store, $acc0
-    adc 8+$s_store, $acc1\n";
-
-$code.="
-    movaps 16*0+$xmm_store, %xmm6
-    movaps 16*1+$xmm_store, %xmm7
-    movaps 16*2+$xmm_store, %xmm8
-    movaps 16*3+$xmm_store, %xmm9
-    movaps 16*4+$xmm_store, %xmm10
-    movaps 16*5+$xmm_store, %xmm11
-    movaps 16*6+$xmm_store, %xmm12
-    movaps 16*7+$xmm_store, %xmm13
-    movaps 16*8+$xmm_store, %xmm14
-    movaps 16*9+$xmm_store, %xmm15\n" if ($win64);
-$code.="
-.cfi_remember_state
-    add \$288 + $xmm_storage + 32, %rsp
-.cfi_adjust_cfa_offset -(288 + 32)
-    # The tag replaces the key on return
-    pop $keyp
-.cfi_pop $keyp
-    mov $acc0, ($keyp)
-    mov $acc1, 8($keyp)
-    pop %r15
-.cfi_pop %r15
-    pop %r14
-.cfi_pop %r14
-    pop %r13
-.cfi_pop %r13
-    pop %r12
-.cfi_pop %r12
-    pop %rbx
-.cfi_pop %rbx
-    pop %rbp
-.cfi_pop %rbp
-    ret
-################################################################################
-.Lseal_sse_128:
-.cfi_restore_state
-    movdqu .Lchacha20_consts(%rip), $A0\nmovdqa $A0, $A1\nmovdqa $A0, $A2
-    movdqu 0*16($keyp), $B0\nmovdqa $B0, $B1\nmovdqa $B0, $B2
-    movdqu 1*16($keyp), $C0\nmovdqa $C0, $C1\nmovdqa $C0, $C2
-    movdqu 2*16($keyp), $D2
-    movdqa $D2, $D0\npaddd .Lsse_inc(%rip), $D0
-    movdqa $D0, $D1\npaddd .Lsse_inc(%rip), $D1
-    movdqa $B0, $T1\nmovdqa $C0, $T2\nmovdqa $D0, $T3
-    mov \$10, $acc0
-
-.Lseal_sse_128_rounds:\n";
-        &chacha_qr($A0,$B0,$C0,$D0,$T0,"left");
-        &chacha_qr($A1,$B1,$C1,$D1,$T0,"left");
-        &chacha_qr($A2,$B2,$C2,$D2,$T0,"left");
-        &chacha_qr($A0,$B0,$C0,$D0,$T0,"right");
-        &chacha_qr($A1,$B1,$C1,$D1,$T0,"right");
-        &chacha_qr($A2,$B2,$C2,$D2,$T0,"right"); $code.="
-        dec $acc0
-    jnz .Lseal_sse_128_rounds
-    paddd .Lchacha20_consts(%rip), $A0
-    paddd .Lchacha20_consts(%rip), $A1
-    paddd .Lchacha20_consts(%rip), $A2
-    paddd $T1, $B0\npaddd $T1, $B1\npaddd $T1, $B2
-    paddd $T2, $C0\npaddd $T2, $C1
-    paddd $T3, $D0
-    paddd .Lsse_inc(%rip), $T3
-    paddd $T3, $D1
-    # Clamp and store the key
-    pand .Lclamp(%rip), $A2
-    movdqa $A2, $r_store
-    movdqa $B2, $s_store
-    # Hash
-    mov %r8, $itr2
-    call poly_hash_ad_internal
-    jmp .Lseal_sse_128_tail_xor
-.size chacha20_poly1305_seal_sse41, .-chacha20_poly1305_seal_sse41
-.cfi_endproc\n";
-}
-
-if ($avx>1) {
-
-($A0,$A1,$A2,$A3,$B0,$B1,$B2,$B3,$C0,$C1,$C2,$C3,$D0,$D1,$D2,$D3)=map("%ymm$_",(0..15));
-my ($A0x,$A1x,$A2x,$A3x,$B0x,$B1x,$B2x,$B3x,$C0x,$C1x,$C2x,$C3x,$D0x,$D1x,$D2x,$D3x)=map("%xmm$_",(0..15));
-($T0,$T1,$T2,$T3)=($A3,$B3,$C3,$D3);
-$state1_store="$xmm_storage+2*32(%rbp)";
-$state2_store="$xmm_storage+3*32(%rbp)";
-$tmp_store="$xmm_storage+4*32(%rbp)";
-$ctr0_store="$xmm_storage+5*32(%rbp)";
-$ctr1_store="$xmm_storage+6*32(%rbp)";
-$ctr2_store="$xmm_storage+7*32(%rbp)";
-$ctr3_store="$xmm_storage+8*32(%rbp)";
-
-sub chacha_qr_avx2 {
-my ($a,$b,$c,$d,$t,$dir)=@_;
-$code.=<<___ if ($dir =~ /store/);
-    vmovdqa $t, $tmp_store
-___
-$code.=<<___;
-    vpaddd $b, $a, $a
-    vpxor $a, $d, $d
-    vpshufb .Lrol16(%rip), $d, $d
-    vpaddd $d, $c, $c
-    vpxor $c, $b, $b
-    vpsrld \$20, $b, $t
-    vpslld \$12, $b, $b
-    vpxor $t, $b, $b
-    vpaddd $b, $a, $a
-    vpxor $a, $d, $d
-    vpshufb .Lrol8(%rip), $d, $d
-    vpaddd $d, $c, $c
-    vpxor $c, $b, $b
-    vpslld \$7, $b, $t
-    vpsrld \$25, $b, $b
-    vpxor $t, $b, $b
-___
-$code.=<<___ if ($dir =~ /left/);
-    vpalignr \$12, $d, $d, $d
-    vpalignr \$8, $c, $c, $c
-    vpalignr \$4, $b, $b, $b
-___
-$code.=<<___ if ($dir =~ /right/);
-    vpalignr \$4, $d, $d, $d
-    vpalignr \$8, $c, $c, $c
-    vpalignr \$12, $b, $b, $b
-___
-$code.=<<___ if ($dir =~ /load/);
-    vmovdqa $tmp_store, $t
-___
-}
-
-sub prep_state_avx2 {
-my ($n)=@_;
-$code.=<<___;
-    vmovdqa .Lchacha20_consts(%rip), $A0
-    vmovdqa $state1_store, $B0
-    vmovdqa $state2_store, $C0
-___
-$code.=<<___ if ($n ge 2);
-    vmovdqa $A0, $A1
-    vmovdqa $B0, $B1
-    vmovdqa $C0, $C1
-___
-$code.=<<___ if ($n ge 3);
-    vmovdqa $A0, $A2
-    vmovdqa $B0, $B2
-    vmovdqa $C0, $C2
-___
-$code.=<<___ if ($n ge 4);
-    vmovdqa $A0, $A3
-    vmovdqa $B0, $B3
-    vmovdqa $C0, $C3
-___
-$code.=<<___ if ($n eq 1);
-    vmovdqa .Lavx2_inc(%rip), $D0
-    vpaddd $ctr0_store, $D0, $D0
-    vmovdqa $D0, $ctr0_store
-___
-$code.=<<___ if ($n eq 2);
-    vmovdqa .Lavx2_inc(%rip), $D0
-    vpaddd $ctr0_store, $D0, $D1
-    vpaddd $D1, $D0, $D0
-    vmovdqa $D0, $ctr0_store
-    vmovdqa $D1, $ctr1_store
-___
-$code.=<<___ if ($n eq 3);
-    vmovdqa .Lavx2_inc(%rip), $D0
-    vpaddd $ctr0_store, $D0, $D2
-    vpaddd $D2, $D0, $D1
-    vpaddd $D1, $D0, $D0
-    vmovdqa $D0, $ctr0_store
-    vmovdqa $D1, $ctr1_store
-    vmovdqa $D2, $ctr2_store
-___
-$code.=<<___ if ($n eq 4);
-    vmovdqa .Lavx2_inc(%rip), $D0
-    vpaddd $ctr0_store, $D0, $D3
-    vpaddd $D3, $D0, $D2
-    vpaddd $D2, $D0, $D1
-    vpaddd $D1, $D0, $D0
-    vmovdqa $D3, $ctr3_store
-    vmovdqa $D2, $ctr2_store
-    vmovdqa $D1, $ctr1_store
-    vmovdqa $D0, $ctr0_store
-___
-}
-
-sub finalize_state_avx2 {
-my ($n)=@_;
-$code.=<<___ if ($n eq 4);
-    vpaddd .Lchacha20_consts(%rip), $A3, $A3
-    vpaddd $state1_store, $B3, $B3
-    vpaddd $state2_store, $C3, $C3
-    vpaddd $ctr3_store, $D3, $D3
-___
-$code.=<<___ if ($n ge 3);
-    vpaddd .Lchacha20_consts(%rip), $A2, $A2
-    vpaddd $state1_store, $B2, $B2
-    vpaddd $state2_store, $C2, $C2
-    vpaddd $ctr2_store, $D2, $D2
-___
-$code.=<<___ if ($n ge 2);
-    vpaddd .Lchacha20_consts(%rip), $A1, $A1
-    vpaddd $state1_store, $B1, $B1
-    vpaddd $state2_store, $C1, $C1
-    vpaddd $ctr1_store, $D1, $D1
-___
-$code.=<<___;
-    vpaddd .Lchacha20_consts(%rip), $A0, $A0
-    vpaddd $state1_store, $B0, $B0
-    vpaddd $state2_store, $C0, $C0
-    vpaddd $ctr0_store, $D0, $D0
-___
-}
-
-sub xor_stream_avx2 {
-my ($A, $B, $C, $D, $offset, $hlp)=@_;
-$code.=<<___;
-    vperm2i128 \$0x02, $A, $B, $hlp
-    vperm2i128 \$0x13, $A, $B, $B
-    vperm2i128 \$0x02, $C, $D, $A
-    vperm2i128 \$0x13, $C, $D, $C
-    vpxor 0*32+$offset($inp), $hlp, $hlp
-    vpxor 1*32+$offset($inp), $A, $A
-    vpxor 2*32+$offset($inp), $B, $B
-    vpxor 3*32+$offset($inp), $C, $C
-    vmovdqu $hlp, 0*32+$offset($oup)
-    vmovdqu $A, 1*32+$offset($oup)
-    vmovdqu $B, 2*32+$offset($oup)
-    vmovdqu $C, 3*32+$offset($oup)
-___
-}
-
-sub finish_stream_avx2 {
-my ($A, $B, $C, $D, $hlp)=@_;
-$code.=<<___;
-    vperm2i128 \$0x13, $A, $B, $hlp
-    vperm2i128 \$0x02, $A, $B, $A
-    vperm2i128 \$0x02, $C, $D, $B
-    vperm2i128 \$0x13, $C, $D, $D
-    vmovdqa $hlp, $C
-___
-}
-
-sub poly_stage1_mulx {
-$code.=<<___;
-    mov 0+$r_store, %rdx
-    mov %rdx, $t2
-    mulx $acc0, $t0, $t1
-    mulx $acc1, %rax, %rdx
-    imulq $acc2, $t2
-    add %rax, $t1
-    adc %rdx, $t2
-___
-}
-
-sub poly_stage2_mulx {
-$code.=<<___;
-    mov 8+$r_store, %rdx
-    mulx $acc0, $acc0, %rax
-    add $acc0, $t1
-    mulx $acc1, $acc1, $t3
-    adc $acc1, $t2
-    adc \$0, $t3
-    imulq $acc2, %rdx
-___
-}
-
-sub poly_stage3_mulx {
-$code.=<<___;
-    add %rax, $t2
-    adc %rdx, $t3
-___
-}
-
-sub poly_mul_mulx {
-    &poly_stage1_mulx();
-    &poly_stage2_mulx();
-    &poly_stage3_mulx();
-    &poly_reduce_stage();
-}
-
-sub gen_chacha_round_avx2 {
-my ($rot1, $rot2, $shift)=@_;
-my $round="";
-$round=$round ."vmovdqa $C0, $tmp_store\n" if ($rot1 eq 20);
-$round=$round ."vmovdqa $rot2, $C0
-                vpaddd $B3, $A3, $A3
-                vpaddd $B2, $A2, $A2
-                vpaddd $B1, $A1, $A1
-                vpaddd $B0, $A0, $A0
-                vpxor $A3, $D3, $D3
-                vpxor $A2, $D2, $D2
-                vpxor $A1, $D1, $D1
-                vpxor $A0, $D0, $D0
-                vpshufb $C0, $D3, $D3
-                vpshufb $C0, $D2, $D2
-                vpshufb $C0, $D1, $D1
-                vpshufb $C0, $D0, $D0
-                vpaddd $D3, $C3, $C3
-                vpaddd $D2, $C2, $C2
-                vpaddd $D1, $C1, $C1
-                vpaddd $tmp_store, $D0, $C0
-                vpxor $C3, $B3, $B3
-                vpxor $C2, $B2, $B2
-                vpxor $C1, $B1, $B1
-                vpxor $C0, $B0, $B0
-                vmovdqa $C0, $tmp_store
-                vpsrld \$$rot1, $B3, $C0
-                vpslld \$32-$rot1, $B3, $B3
-                vpxor $C0, $B3, $B3
-                vpsrld \$$rot1, $B2, $C0
-                vpslld \$32-$rot1, $B2, $B2
-                vpxor $C0, $B2, $B2
-                vpsrld \$$rot1, $B1, $C0
-                vpslld \$32-$rot1, $B1, $B1
-                vpxor $C0, $B1, $B1
-                vpsrld \$$rot1, $B0, $C0
-                vpslld \$32-$rot1, $B0, $B0
-                vpxor $C0, $B0, $B0\n";
-($s1,$s2,$s3)=(4,8,12) if ($shift =~ /left/);
-($s1,$s2,$s3)=(12,8,4) if ($shift =~ /right/);
-$round=$round ."vmovdqa $tmp_store, $C0
-                vpalignr \$$s1, $B3, $B3, $B3
-                vpalignr \$$s2, $C3, $C3, $C3
-                vpalignr \$$s3, $D3, $D3, $D3
-                vpalignr \$$s1, $B2, $B2, $B2
-                vpalignr \$$s2, $C2, $C2, $C2
-                vpalignr \$$s3, $D2, $D2, $D2
-                vpalignr \$$s1, $B1, $B1, $B1
-                vpalignr \$$s2, $C1, $C1, $C1
-                vpalignr \$$s3, $D1, $D1, $D1
-                vpalignr \$$s1, $B0, $B0, $B0
-                vpalignr \$$s2, $C0, $C0, $C0
-                vpalignr \$$s3, $D0, $D0, $D0\n"
-if (($shift =~ /left/) || ($shift =~ /right/));
-return $round;
-};
-
-$chacha_body = &gen_chacha_round_avx2(20, ".Lrol16(%rip)") .
-               &gen_chacha_round_avx2(25, ".Lrol8(%rip)", "left") .
-               &gen_chacha_round_avx2(20, ".Lrol16(%rip)") .
-               &gen_chacha_round_avx2(25, ".Lrol8(%rip)", "right");
-
-@loop_body = split /\n/, $chacha_body;
-
-$code.="
-###############################################################################
-.globl chacha20_poly1305_open_avx2
-.type chacha20_poly1305_open_avx2,\@function,6
-.align 64
-chacha20_poly1305_open_avx2:
-.cfi_startproc
-    _CET_ENDBR
-    push %rbp
-.cfi_push %rbp
-    push %rbx
-.cfi_push %rbx
-    push %r12
-.cfi_push %r12
-    push %r13
-.cfi_push %r13
-    push %r14
-.cfi_push %r14
-    push %r15
-.cfi_push %r15
-    # We write the calculated authenticator back to keyp at the end, so save
-    # the pointer on the stack too.
-    push $keyp
-.cfi_push $keyp
-    sub \$288 + $xmm_storage + 32, %rsp
-.cfi_adjust_cfa_offset 288 + 32
-
-    lea 32(%rsp), %rbp
-    and \$-32, %rbp\n";
-$code.="
-    movaps %xmm6,16*0+$xmm_store
-    movaps %xmm7,16*1+$xmm_store
-    movaps %xmm8,16*2+$xmm_store
-    movaps %xmm9,16*3+$xmm_store
-    movaps %xmm10,16*4+$xmm_store
-    movaps %xmm11,16*5+$xmm_store
-    movaps %xmm12,16*6+$xmm_store
-    movaps %xmm13,16*7+$xmm_store
-    movaps %xmm14,16*8+$xmm_store
-    movaps %xmm15,16*9+$xmm_store\n" if ($win64);
-$code.="
-    mov %rdx, $inl
-    mov $adl, 0+$len_store
-    mov $inl, 8+$len_store
-
-    vzeroupper
-    vmovdqa .Lchacha20_consts(%rip), $A0
-    vbroadcasti128 0*16($keyp), $B0
-    vbroadcasti128 1*16($keyp), $C0
-    vbroadcasti128 2*16($keyp), $D0
-    vpaddd .Lavx2_init(%rip), $D0, $D0
-    cmp \$6*32, $inl
-    jbe .Lopen_avx2_192
-    cmp \$10*32, $inl
-    jbe .Lopen_avx2_320
-
-    vmovdqa $B0, $state1_store
-    vmovdqa $C0, $state2_store
-    vmovdqa $D0, $ctr0_store
-    mov \$10, $acc0
-.Lopen_avx2_init_rounds:  \n";
-        &chacha_qr_avx2($A0,$B0,$C0,$D0,$T0,"left");
-        &chacha_qr_avx2($A0,$B0,$C0,$D0,$T0,"right"); $code.="
-        dec $acc0
-    jne .Lopen_avx2_init_rounds
-    vpaddd .Lchacha20_consts(%rip), $A0, $A0
-    vpaddd $state1_store, $B0, $B0
-    vpaddd $state2_store, $C0, $C0
-    vpaddd $ctr0_store, $D0, $D0
-
-    vperm2i128 \$0x02, $A0, $B0, $T0
-    # Clamp and store key
-    vpand .Lclamp(%rip), $T0, $T0
-    vmovdqa $T0, $r_store
-    # Stream for the first 64 bytes
-    vperm2i128 \$0x13, $A0, $B0, $A0
-    vperm2i128 \$0x13, $C0, $D0, $B0
-    # Hash AD + first 64 bytes
-    mov $adl, $itr2
-    call poly_hash_ad_internal
-    # Hash first 64 bytes
-    xor $itr1, $itr1
-.Lopen_avx2_init_hash: \n";
-       &poly_add("0($inp,$itr1)");
-       &poly_mul(); $code.="
-       add \$16, $itr1
-       cmp \$2*32, $itr1
-    jne .Lopen_avx2_init_hash
-    # Decrypt first 64 bytes
-    vpxor 0*32($inp), $A0, $A0
-    vpxor 1*32($inp), $B0, $B0
-    # Store first 64 bytes of decrypted data
-    vmovdqu $A0, 0*32($oup)
-    vmovdqu $B0, 1*32($oup)
-    lea 2*32($inp), $inp
-    lea 2*32($oup), $oup
-    sub \$2*32, $inl
-.Lopen_avx2_main_loop:
-        # Hash and decrypt 512 bytes each iteration
-        cmp \$16*32, $inl
-        jb .Lopen_avx2_main_loop_done\n";
-        &prep_state_avx2(4); $code.=" 
-        xor $itr1, $itr1
-.Lopen_avx2_main_loop_rounds: \n";
-            &poly_add("0*8($inp,$itr1)");
-            &emit_body(10);
-            &poly_stage1_mulx();
-            &emit_body(9);
-            &poly_stage2_mulx();
-            &emit_body(12);
-            &poly_stage3_mulx();
-            &emit_body(10);
-            &poly_reduce_stage();
-            &emit_body(9);
-            &poly_add("2*8($inp,$itr1)");
-            &emit_body(8);
-            &poly_stage1_mulx();
-            &emit_body(18);
-            &poly_stage2_mulx();
-            &emit_body(18);
-            &poly_stage3_mulx();
-            &emit_body(9);
-            &poly_reduce_stage();
-            &emit_body(8);
-            &poly_add("4*8($inp,$itr1)"); $code.="
-            lea 6*8($itr1), $itr1\n";
-            &emit_body(18);
-            &poly_stage1_mulx();
-            &emit_body(8);
-            &poly_stage2_mulx();
-            &emit_body(8);
-            &poly_stage3_mulx();
-            &emit_body(18);
-            &poly_reduce_stage();
-            foreach $l (@loop_body) {$code.=$l."\n";}
-            @loop_body = split /\n/, $chacha_body; $code.="
-            cmp \$10*6*8, $itr1
-        jne .Lopen_avx2_main_loop_rounds\n";
-        &finalize_state_avx2(4); $code.="
-        vmovdqa $A0, $tmp_store\n";
-        &poly_add("10*6*8($inp)");
-        &xor_stream_avx2($A3, $B3, $C3, $D3, 0*32, $A0); $code.="
-        vmovdqa $tmp_store, $A0\n";
-        &poly_mul();
-        &xor_stream_avx2($A2, $B2, $C2, $D2, 4*32, $A3);
-        &poly_add("10*6*8+2*8($inp)");
-        &xor_stream_avx2($A1, $B1, $C1, $D1, 8*32, $A3);
-        &poly_mul();
-        &xor_stream_avx2($A0, $B0, $C0, $D0, 12*32, $A3); $code.="
-        lea 16*32($inp), $inp
-        lea 16*32($oup), $oup
-        sub \$16*32, $inl
-    jmp .Lopen_avx2_main_loop
-.Lopen_avx2_main_loop_done:
-    test $inl, $inl
-    vzeroupper
-    je .Lopen_sse_finalize
-
-    cmp \$12*32, $inl
-    ja .Lopen_avx2_tail_512
-    cmp \$8*32, $inl
-    ja .Lopen_avx2_tail_384
-    cmp \$4*32, $inl
-    ja .Lopen_avx2_tail_256\n";
-###############################################################################
-    # 1-128 bytes left
-    &prep_state_avx2(1); $code.="
-    xor $itr2, $itr2
-    mov $inl, $itr1
-    and \$-16, $itr1
-    test $itr1, $itr1
-    je .Lopen_avx2_tail_128_rounds # Have nothing to hash
-.Lopen_avx2_tail_128_rounds_and_x1hash: \n";
-        &poly_add("0*8($inp,$itr2)");
-        &poly_mul(); $code.="
-.Lopen_avx2_tail_128_rounds:
-        add \$16, $itr2\n";
-        &chacha_qr_avx2($A0,$B0,$C0,$D0,$T0,"left");
-        &chacha_qr_avx2($A0,$B0,$C0,$D0,$T0,"right"); $code.="
-        cmp $itr1, $itr2
-    jb .Lopen_avx2_tail_128_rounds_and_x1hash
-        cmp \$160, $itr2
-    jne .Lopen_avx2_tail_128_rounds\n";
-    &finalize_state_avx2(1);
-    &finish_stream_avx2($A0,$B0,$C0,$D0,$T0); $code.="
-    jmp .Lopen_avx2_tail_128_xor
-###############################################################################
-.Lopen_avx2_tail_256: \n";
-    # 129-256 bytes left
-    &prep_state_avx2(2); $code.="
-    mov $inl, $tmp_store
-    mov $inl, $itr1
-    sub \$4*32, $itr1
-    shr \$4, $itr1
-    mov \$10, $itr2
-    cmp \$10, $itr1
-    cmovg $itr2, $itr1
-    mov $inp, $inl
-    xor $itr2, $itr2
-.Lopen_avx2_tail_256_rounds_and_x1hash: \n";
-        &poly_add("0*8($inl)");
-        &poly_mul_mulx(); $code.="
-        lea 16($inl), $inl
-.Lopen_avx2_tail_256_rounds: \n";
-        &chacha_qr_avx2($A0,$B0,$C0,$D0,$T0,"left");
-        &chacha_qr_avx2($A1,$B1,$C1,$D1,$T0,"left"); $code.="
-        inc $itr2\n";
-        &chacha_qr_avx2($A0,$B0,$C0,$D0,$T0,"right");
-        &chacha_qr_avx2($A1,$B1,$C1,$D1,$T0,"right");
-        &chacha_qr_avx2($A2,$B2,$C2,$D2,$T0,"right"); $code.="
-        cmp $itr1, $itr2
-    jb .Lopen_avx2_tail_256_rounds_and_x1hash
-        cmp \$10, $itr2
-    jne .Lopen_avx2_tail_256_rounds
-    mov $inl, $itr2
-    sub $inp, $inl
-    mov $inl, $itr1
-    mov $tmp_store, $inl
-.Lopen_avx2_tail_256_hash:
-        add \$16, $itr1
-        cmp $inl, $itr1
-        jg .Lopen_avx2_tail_256_done\n";
-        &poly_add("0*8($itr2)");
-        &poly_mul_mulx(); $code.="
-        lea 16($itr2), $itr2
-    jmp .Lopen_avx2_tail_256_hash
-.Lopen_avx2_tail_256_done: \n";
-    &finalize_state_avx2(2);
-    &xor_stream_avx2($A1, $B1, $C1, $D1, 0*32, $T0);
-    &finish_stream_avx2($A0, $B0, $C0, $D0, $T0); $code.="
-    lea 4*32($inp), $inp
-    lea 4*32($oup), $oup
-    sub \$4*32, $inl
-    jmp .Lopen_avx2_tail_128_xor
-###############################################################################
-.Lopen_avx2_tail_384: \n";
-    # 257-383 bytes left
-    &prep_state_avx2(3); $code.="
-    mov $inl, $tmp_store
-    mov $inl, $itr1
-    sub \$8*32, $itr1
-    shr \$4, $itr1
-    add \$6, $itr1
-    mov \$10, $itr2
-    cmp \$10, $itr1
-    cmovg $itr2, $itr1
-    mov $inp, $inl
-    xor $itr2, $itr2
-.Lopen_avx2_tail_384_rounds_and_x2hash: \n";
-        &poly_add("0*8($inl)");
-        &poly_mul_mulx(); $code.="
-        lea 16($inl), $inl
-.Lopen_avx2_tail_384_rounds_and_x1hash: \n";
-        &chacha_qr_avx2($A2,$B2,$C2,$D2,$T0,"left");
-        &chacha_qr_avx2($A1,$B1,$C1,$D1,$T0,"left");
-        &chacha_qr_avx2($A0,$B0,$C0,$D0,$T0,"left");
-        &poly_add("0*8($inl)");
-        &poly_mul(); $code.="
-        lea 16($inl), $inl
-        inc $itr2\n";
-        &chacha_qr_avx2($A2,$B2,$C2,$D2,$T0,"right");
-        &chacha_qr_avx2($A1,$B1,$C1,$D1,$T0,"right");
-        &chacha_qr_avx2($A0,$B0,$C0,$D0,$T0,"right"); $code.="
-        cmp $itr1, $itr2
-    jb  .Lopen_avx2_tail_384_rounds_and_x2hash
-        cmp \$10, $itr2
-    jne .Lopen_avx2_tail_384_rounds_and_x1hash
-    mov $inl, $itr2
-    sub $inp, $inl
-    mov $inl, $itr1
-    mov $tmp_store, $inl
-.Lopen_avx2_384_tail_hash:
-        add \$16, $itr1
-        cmp $inl, $itr1
-        jg .Lopen_avx2_384_tail_done\n";
-        &poly_add("0*8($itr2)");
-        &poly_mul_mulx(); $code.="
-        lea 16($itr2), $itr2
-    jmp .Lopen_avx2_384_tail_hash
-.Lopen_avx2_384_tail_done: \n";
-    &finalize_state_avx2(3);
-    &xor_stream_avx2($A2, $B2, $C2, $D2, 0*32, $T0);
-    &xor_stream_avx2($A1, $B1, $C1, $D1, 4*32, $T0);
-    &finish_stream_avx2($A0, $B0, $C0, $D0, $T0); $code.="
-    lea 8*32($inp), $inp
-    lea 8*32($oup), $oup
-    sub \$8*32, $inl
-    jmp .Lopen_avx2_tail_128_xor
-###############################################################################
-.Lopen_avx2_tail_512: \n";
-    # 384-512 bytes left
-    &prep_state_avx2(4); $code.="
-    xor $itr1, $itr1
-    mov $inp, $itr2
-.Lopen_avx2_tail_512_rounds_and_x2hash: \n";
-        &poly_add("0*8($itr2)");
-        &poly_mul(); $code.="
-        lea 2*8($itr2), $itr2
-.Lopen_avx2_tail_512_rounds_and_x1hash: \n";
-        &emit_body(37);
-        &poly_add("0*8($itr2)");
-        &poly_mul_mulx();
-        &emit_body(48);
-        &poly_add("2*8($itr2)");
-        &poly_mul_mulx(); $code.="
-        lea 4*8($itr2), $itr2\n";
-        foreach $l (@loop_body) {$code.=$l."\n";}
-        @loop_body = split /\n/, $chacha_body; $code.="
-        inc $itr1
-        cmp \$4, $itr1
-    jl  .Lopen_avx2_tail_512_rounds_and_x2hash
-        cmp \$10, $itr1
-    jne .Lopen_avx2_tail_512_rounds_and_x1hash
-    mov $inl, $itr1
-    sub \$12*32, $itr1
-    and \$-16, $itr1
-.Lopen_avx2_tail_512_hash:
-        test $itr1, $itr1
-        je .Lopen_avx2_tail_512_done\n";
-        &poly_add("0*8($itr2)");
-        &poly_mul_mulx(); $code.="
-        lea 2*8($itr2), $itr2
-        sub \$2*8, $itr1
-    jmp .Lopen_avx2_tail_512_hash
-.Lopen_avx2_tail_512_done: \n";
-    &finalize_state_avx2(4); $code.="
-    vmovdqa $A0, $tmp_store\n";
-    &xor_stream_avx2($A3, $B3, $C3, $D3, 0*32, $A0); $code.="
-    vmovdqa $tmp_store, $A0\n";
-    &xor_stream_avx2($A2, $B2, $C2, $D2, 4*32, $A3);
-    &xor_stream_avx2($A1, $B1, $C1, $D1, 8*32, $A3);
-    &finish_stream_avx2($A0, $B0, $C0, $D0, $A3); $code.="
-    lea 12*32($inp), $inp
-    lea 12*32($oup), $oup
-    sub \$12*32, $inl
-.Lopen_avx2_tail_128_xor:
-    cmp \$32, $inl
-    jb .Lopen_avx2_tail_32_xor
-        sub \$32, $inl
-        vpxor ($inp), $A0, $A0
-        vmovdqu $A0, ($oup)
-        lea 1*32($inp), $inp
-        lea 1*32($oup), $oup
-        vmovdqa $B0, $A0
-        vmovdqa $C0, $B0
-        vmovdqa $D0, $C0
-    jmp .Lopen_avx2_tail_128_xor
-.Lopen_avx2_tail_32_xor:
-    cmp \$16, $inl
-    vmovdqa $A0x, $A1x
-    jb .Lopen_avx2_exit
-    sub \$16, $inl
-    #load for decryption
-    vpxor ($inp), $A0x, $A1x
-    vmovdqu $A1x, ($oup)
-    lea 1*16($inp), $inp
-    lea 1*16($oup), $oup
-    vperm2i128 \$0x11, $A0, $A0, $A0
-    vmovdqa $A0x, $A1x
-.Lopen_avx2_exit:
-    vzeroupper
-    jmp .Lopen_sse_tail_16
-###############################################################################
-.Lopen_avx2_192:
-    vmovdqa $A0, $A1
-    vmovdqa $A0, $A2
-    vmovdqa $B0, $B1
-    vmovdqa $B0, $B2
-    vmovdqa $C0, $C1
-    vmovdqa $C0, $C2
-    vpaddd .Lavx2_inc(%rip), $D0, $D1
-    vmovdqa $D0, $T2
-    vmovdqa $D1, $T3
-    mov \$10, $acc0
-.Lopen_avx2_192_rounds: \n";
-        &chacha_qr_avx2($A0,$B0,$C0,$D0,$T0,"left");
-        &chacha_qr_avx2($A1,$B1,$C1,$D1,$T0,"left");
-        &chacha_qr_avx2($A0,$B0,$C0,$D0,$T0,"right");
-        &chacha_qr_avx2($A1,$B1,$C1,$D1,$T0,"right"); $code.="
-        dec $acc0
-    jne .Lopen_avx2_192_rounds
-    vpaddd $A2, $A0, $A0
-    vpaddd $A2, $A1, $A1
-    vpaddd $B2, $B0, $B0
-    vpaddd $B2, $B1, $B1
-    vpaddd $C2, $C0, $C0
-    vpaddd $C2, $C1, $C1
-    vpaddd $T2, $D0, $D0
-    vpaddd $T3, $D1, $D1
-    vperm2i128 \$0x02, $A0, $B0, $T0
-    # Clamp and store the key
-    vpand .Lclamp(%rip), $T0, $T0
-    vmovdqa $T0, $r_store
-    # Stream for up to 192 bytes
-    vperm2i128 \$0x13, $A0, $B0, $A0
-    vperm2i128 \$0x13, $C0, $D0, $B0
-    vperm2i128 \$0x02, $A1, $B1, $C0
-    vperm2i128 \$0x02, $C1, $D1, $D0
-    vperm2i128 \$0x13, $A1, $B1, $A1
-    vperm2i128 \$0x13, $C1, $D1, $B1
-.Lopen_avx2_short:
-    mov $adl, $itr2
-    call poly_hash_ad_internal
-.Lopen_avx2_short_hash_and_xor_loop:
-        cmp \$32, $inl
-        jb .Lopen_avx2_short_tail_32
-        sub \$32, $inl\n";
-        # Load + hash
-        &poly_add("0*8($inp)");
-        &poly_mul();
-        &poly_add("2*8($inp)");
-        &poly_mul(); $code.="
-        # Load + decrypt
-        vpxor ($inp), $A0, $A0
-        vmovdqu $A0, ($oup)
-        lea 1*32($inp), $inp
-        lea 1*32($oup), $oup
-        # Shift stream
-        vmovdqa $B0, $A0
-        vmovdqa $C0, $B0
-        vmovdqa $D0, $C0
-        vmovdqa $A1, $D0
-        vmovdqa $B1, $A1
-        vmovdqa $C1, $B1
-        vmovdqa $D1, $C1
-        vmovdqa $A2, $D1
-        vmovdqa $B2, $A2
-    jmp .Lopen_avx2_short_hash_and_xor_loop
-.Lopen_avx2_short_tail_32:
-    cmp \$16, $inl
-    vmovdqa $A0x, $A1x
-    jb .Lopen_avx2_short_tail_32_exit
-    sub \$16, $inl\n";
-    &poly_add("0*8($inp)");
-    &poly_mul(); $code.="
-    vpxor ($inp), $A0x, $A3x
-    vmovdqu $A3x, ($oup)
-    lea 1*16($inp), $inp
-    lea 1*16($oup), $oup
-    vextracti128 \$1, $A0, $A1x
-.Lopen_avx2_short_tail_32_exit:
-    vzeroupper
-    jmp .Lopen_sse_tail_16
-###############################################################################
-.Lopen_avx2_320:
-    vmovdqa $A0, $A1
-    vmovdqa $A0, $A2
-    vmovdqa $B0, $B1
-    vmovdqa $B0, $B2
-    vmovdqa $C0, $C1
-    vmovdqa $C0, $C2
-    vpaddd .Lavx2_inc(%rip), $D0, $D1
-    vpaddd .Lavx2_inc(%rip), $D1, $D2
-    vmovdqa $B0, $T1
-    vmovdqa $C0, $T2
-    vmovdqa $D0, $ctr0_store
-    vmovdqa $D1, $ctr1_store
-    vmovdqa $D2, $ctr2_store
-    mov \$10, $acc0
-.Lopen_avx2_320_rounds:  \n";
-        &chacha_qr_avx2($A0,$B0,$C0,$D0,$T0,"left");
-        &chacha_qr_avx2($A1,$B1,$C1,$D1,$T0,"left");
-        &chacha_qr_avx2($A2,$B2,$C2,$D2,$T0,"left");
-        &chacha_qr_avx2($A0,$B0,$C0,$D0,$T0,"right");
-        &chacha_qr_avx2($A1,$B1,$C1,$D1,$T0,"right");
-        &chacha_qr_avx2($A2,$B2,$C2,$D2,$T0,"right"); $code.="
-        dec $acc0
-    jne .Lopen_avx2_320_rounds
-    vpaddd .Lchacha20_consts(%rip), $A0, $A0
-    vpaddd .Lchacha20_consts(%rip), $A1, $A1
-    vpaddd .Lchacha20_consts(%rip), $A2, $A2
-    vpaddd $T1, $B0, $B0
-    vpaddd $T1, $B1, $B1
-    vpaddd $T1, $B2, $B2
-    vpaddd $T2, $C0, $C0
-    vpaddd $T2, $C1, $C1
-    vpaddd $T2, $C2, $C2
-    vpaddd $ctr0_store, $D0, $D0
-    vpaddd $ctr1_store, $D1, $D1
-    vpaddd $ctr2_store, $D2, $D2
-    vperm2i128 \$0x02, $A0, $B0, $T0
-    # Clamp and store the key
-    vpand .Lclamp(%rip), $T0, $T0
-    vmovdqa $T0, $r_store
-    # Stream for up to 320 bytes
-    vperm2i128 \$0x13, $A0, $B0, $A0
-    vperm2i128 \$0x13, $C0, $D0, $B0
-    vperm2i128 \$0x02, $A1, $B1, $C0
-    vperm2i128 \$0x02, $C1, $D1, $D0
-    vperm2i128 \$0x13, $A1, $B1, $A1
-    vperm2i128 \$0x13, $C1, $D1, $B1
-    vperm2i128 \$0x02, $A2, $B2, $C1
-    vperm2i128 \$0x02, $C2, $D2, $D1
-    vperm2i128 \$0x13, $A2, $B2, $A2
-    vperm2i128 \$0x13, $C2, $D2, $B2
-    jmp .Lopen_avx2_short
-.size chacha20_poly1305_open_avx2, .-chacha20_poly1305_open_avx2
-.cfi_endproc
-###############################################################################
-###############################################################################
-.globl chacha20_poly1305_seal_avx2
-.type chacha20_poly1305_seal_avx2,\@function,6
-.align 64
-chacha20_poly1305_seal_avx2:
-.cfi_startproc
-    _CET_ENDBR
-    push %rbp
-.cfi_push %rbp
-    push %rbx
-.cfi_push %rbx
-    push %r12
-.cfi_push %r12
-    push %r13
-.cfi_push %r13
-    push %r14
-.cfi_push %r14
-    push %r15
-.cfi_push %r15   
-# We write the calculated authenticator back to keyp at the end, so save
-# the pointer on the stack too.
-    push $keyp
-.cfi_push $keyp
-    sub \$288 + $xmm_storage + 32, %rsp
-.cfi_adjust_cfa_offset 288 + 32
-    lea 32(%rsp), %rbp
-    and \$-32, %rbp\n";
-$code.="
-    movaps %xmm6,16*0+$xmm_store
-    movaps %xmm7,16*1+$xmm_store
-    movaps %xmm8,16*2+$xmm_store
-    movaps %xmm9,16*3+$xmm_store
-    movaps %xmm10,16*4+$xmm_store
-    movaps %xmm11,16*5+$xmm_store
-    movaps %xmm12,16*6+$xmm_store
-    movaps %xmm13,16*7+$xmm_store
-    movaps %xmm14,16*8+$xmm_store
-    movaps %xmm15,16*9+$xmm_store\n" if ($win64);
-$code.="
-    mov 56($keyp), $inl  # extra_in_len
-    addq %rdx, $inl
-    mov $adl, 0+$len_store
-    mov $inl, 8+$len_store
-    mov %rdx, $inl
-
-    vzeroupper
-    vmovdqa .Lchacha20_consts(%rip), $A0
-    vbroadcasti128 0*16($keyp), $B0
-    vbroadcasti128 1*16($keyp), $C0
-    vbroadcasti128 2*16($keyp), $D0
-    vpaddd .Lavx2_init(%rip), $D0, $D0
-    cmp \$6*32, $inl
-    jbe .Lseal_avx2_192
-    cmp \$10*32, $inl
-    jbe .Lseal_avx2_320
-    vmovdqa $A0, $A1
-    vmovdqa $A0, $A2
-    vmovdqa $A0, $A3
-    vmovdqa $B0, $B1
-    vmovdqa $B0, $B2
-    vmovdqa $B0, $B3
-    vmovdqa $B0, $state1_store
-    vmovdqa $C0, $C1
-    vmovdqa $C0, $C2
-    vmovdqa $C0, $C3
-    vmovdqa $C0, $state2_store
-    vmovdqa $D0, $D3
-    vpaddd .Lavx2_inc(%rip), $D3, $D2
-    vpaddd .Lavx2_inc(%rip), $D2, $D1
-    vpaddd .Lavx2_inc(%rip), $D1, $D0
-    vmovdqa $D0, $ctr0_store
-    vmovdqa $D1, $ctr1_store
-    vmovdqa $D2, $ctr2_store
-    vmovdqa $D3, $ctr3_store
-    mov \$10, $acc0
-.Lseal_avx2_init_rounds: \n";
-        foreach $l (@loop_body) {$code.=$l."\n";}
-        @loop_body = split /\n/, $chacha_body; $code.="
-        dec $acc0
-        jnz .Lseal_avx2_init_rounds\n";
-    &finalize_state_avx2(4); $code.="
-    vperm2i128 \$0x13, $C3, $D3, $C3
-    vperm2i128 \$0x02, $A3, $B3, $D3
-    vperm2i128 \$0x13, $A3, $B3, $A3
-    vpand .Lclamp(%rip), $D3, $D3
-    vmovdqa $D3, $r_store
-    mov $adl, $itr2
-    call poly_hash_ad_internal
-    # Safely store 320 bytes (otherwise would handle with optimized call)
-    vpxor 0*32($inp), $A3, $A3
-    vpxor 1*32($inp), $C3, $C3
-    vmovdqu $A3, 0*32($oup)
-    vmovdqu $C3, 1*32($oup)\n";
-    &xor_stream_avx2($A2,$B2,$C2,$D2,2*32,$T3);
-    &xor_stream_avx2($A1,$B1,$C1,$D1,6*32,$T3);
-    &finish_stream_avx2($A0,$B0,$C0,$D0,$T3); $code.="
-    lea 10*32($inp), $inp
-    sub \$10*32, $inl
-    mov \$10*32, $itr1
-    cmp \$4*32, $inl
-    jbe .Lseal_avx2_short_hash_remainder
-    vpxor 0*32($inp), $A0, $A0
-    vpxor 1*32($inp), $B0, $B0
-    vpxor 2*32($inp), $C0, $C0
-    vpxor 3*32($inp), $D0, $D0
-    vmovdqu $A0, 10*32($oup)
-    vmovdqu $B0, 11*32($oup)
-    vmovdqu $C0, 12*32($oup)
-    vmovdqu $D0, 13*32($oup)
-    lea 4*32($inp), $inp
-    sub \$4*32, $inl
-    mov \$8, $itr1
-    mov \$2, $itr2
-    cmp \$4*32, $inl
-    jbe .Lseal_avx2_tail_128
-    cmp \$8*32, $inl
-    jbe .Lseal_avx2_tail_256
-    cmp \$12*32, $inl
-    jbe .Lseal_avx2_tail_384
-    cmp \$16*32, $inl
-    jbe .Lseal_avx2_tail_512\n";
-    # We have 448 bytes to hash, but main loop hashes 512 bytes at a time - perform some rounds, before the main loop
-    &prep_state_avx2(4);
-    foreach $l (@loop_body) {$code.=$l."\n";}
-    @loop_body = split /\n/, $chacha_body;
-    &emit_body(41);
-    @loop_body = split /\n/, $chacha_body; $code.="
-    sub \$16, $oup
-    mov \$9, $itr1
-    jmp .Lseal_avx2_main_loop_rounds_entry
-.align 32
-.Lseal_avx2_main_loop: \n";
-        &prep_state_avx2(4); $code.="
-        mov \$10, $itr1
-.align 32
-.Lseal_avx2_main_loop_rounds: \n";
-            &poly_add("0*8($oup)");
-            &emit_body(10);
-            &poly_stage1_mulx();
-            &emit_body(9);
-            &poly_stage2_mulx();
-            &emit_body(12);
-            &poly_stage3_mulx();
-            &emit_body(10);
-            &poly_reduce_stage(); $code.="
-.Lseal_avx2_main_loop_rounds_entry: \n";
-            &emit_body(9);
-            &poly_add("2*8($oup)");
-            &emit_body(8);
-            &poly_stage1_mulx();
-            &emit_body(18);
-            &poly_stage2_mulx();
-            &emit_body(18);
-            &poly_stage3_mulx();
-            &emit_body(9);
-            &poly_reduce_stage();
-            &emit_body(8);
-            &poly_add("4*8($oup)"); $code.="
-            lea 6*8($oup), $oup\n";
-            &emit_body(18);
-            &poly_stage1_mulx();
-            &emit_body(8);
-            &poly_stage2_mulx();
-            &emit_body(8);
-            &poly_stage3_mulx();
-            &emit_body(18);
-            &poly_reduce_stage();
-            foreach $l (@loop_body) {$code.=$l."\n";}
-            @loop_body = split /\n/, $chacha_body; $code.="
-            dec $itr1
-        jne .Lseal_avx2_main_loop_rounds\n";
-        &finalize_state_avx2(4); $code.="
-        vmovdqa $A0, $tmp_store\n";
-        &poly_add("0*8($oup)");
-        &poly_mul_mulx();
-        &poly_add("2*8($oup)");
-        &poly_mul_mulx(); $code.="
-        lea 4*8($oup), $oup\n";
-        &xor_stream_avx2($A3, $B3, $C3, $D3, 0*32, $A0); $code.="
-        vmovdqa $tmp_store, $A0\n";
-        &xor_stream_avx2($A2, $B2, $C2, $D2, 4*32, $A3);
-        &xor_stream_avx2($A1, $B1, $C1, $D1, 8*32, $A3);
-        &xor_stream_avx2($A0, $B0, $C0, $D0, 12*32, $A3); $code.="
-        lea 16*32($inp), $inp
-        sub \$16*32, $inl
-        cmp \$16*32, $inl
-    jg .Lseal_avx2_main_loop
-\n";
-    &poly_add("0*8($oup)");
-    &poly_mul_mulx();
-    &poly_add("2*8($oup)");
-    &poly_mul_mulx(); $code.="
-    lea 4*8($oup), $oup
-    mov \$10, $itr1
-    xor $itr2, $itr2
-
-    cmp \$12*32, $inl
-    ja  .Lseal_avx2_tail_512
-    cmp \$8*32, $inl
-    ja  .Lseal_avx2_tail_384
-    cmp \$4*32, $inl
-    ja  .Lseal_avx2_tail_256
-###############################################################################
-.Lseal_avx2_tail_128:\n";
-    &prep_state_avx2(1); $code.="
-.Lseal_avx2_tail_128_rounds_and_3xhash: \n";
-        &poly_add("0($oup)");
-        &poly_mul_mulx(); $code.="
-        lea 2*8($oup), $oup
-.Lseal_avx2_tail_128_rounds_and_2xhash: \n";
-        &chacha_qr_avx2($A0,$B0,$C0,$D0,$T0,"left");
-        &poly_add("0*8($oup)");
-        &poly_mul_mulx();
-        &chacha_qr_avx2($A0,$B0,$C0,$D0,$T0,"right");
-        &poly_add("2*8($oup)");
-        &poly_mul_mulx(); $code.="
-        lea 4*8($oup), $oup
-        dec $itr1
-    jg  .Lseal_avx2_tail_128_rounds_and_3xhash
-        dec $itr2
-    jge .Lseal_avx2_tail_128_rounds_and_2xhash\n";
-    &finalize_state_avx2(1);
-    &finish_stream_avx2($A0,$B0,$C0,$D0,$T0); $code.="
-    jmp .Lseal_avx2_short_loop
-###############################################################################
-.Lseal_avx2_tail_256:\n";
-    &prep_state_avx2(2); $code.="
-.Lseal_avx2_tail_256_rounds_and_3xhash: \n";
-        &poly_add("0($oup)");
-        &poly_mul(); $code.="
-        lea 2*8($oup), $oup
-.Lseal_avx2_tail_256_rounds_and_2xhash: \n";
-        &chacha_qr_avx2($A0,$B0,$C0,$D0,$T0,"left");
-        &chacha_qr_avx2($A1,$B1,$C1,$D1,$T0,"left");
-        &poly_add("0*8($oup)");
-        &poly_mul();
-        &chacha_qr_avx2($A0,$B0,$C0,$D0,$T0,"right");
-        &chacha_qr_avx2($A1,$B1,$C1,$D1,$T0,"right");
-        &poly_add("2*8($oup)");
-        &poly_mul(); $code.="
-        lea 4*8($oup), $oup
-        dec $itr1
-    jg  .Lseal_avx2_tail_256_rounds_and_3xhash
-        dec $itr2
-    jge .Lseal_avx2_tail_256_rounds_and_2xhash\n";
-    &finalize_state_avx2(2);
-    &xor_stream_avx2($A1,$B1,$C1,$D1,0*32,$T0);
-    &finish_stream_avx2($A0,$B0,$C0,$D0,$T0); $code.="
-    mov \$4*32, $itr1
-    lea 4*32($inp), $inp
-    sub \$4*32, $inl
-    jmp .Lseal_avx2_short_hash_remainder
-###############################################################################
-.Lseal_avx2_tail_384:\n";
-    &prep_state_avx2(3); $code.="
-.Lseal_avx2_tail_384_rounds_and_3xhash: \n";
-        &poly_add("0($oup)");
-        &poly_mul(); $code.="
-        lea 2*8($oup), $oup
-.Lseal_avx2_tail_384_rounds_and_2xhash: \n";
-        &chacha_qr_avx2($A0,$B0,$C0,$D0,$T0,"left");
-        &chacha_qr_avx2($A1,$B1,$C1,$D1,$T0,"left");
-        &poly_add("0*8($oup)");
-        &poly_mul();
-        &chacha_qr_avx2($A2,$B2,$C2,$D2,$T0,"left");
-        &chacha_qr_avx2($A0,$B0,$C0,$D0,$T0,"right");
-        &poly_add("2*8($oup)");
-        &poly_mul();
-        &chacha_qr_avx2($A1,$B1,$C1,$D1,$T0,"right");
-        &chacha_qr_avx2($A2,$B2,$C2,$D2,$T0,"right"); $code.="
-        lea 4*8($oup), $oup
-        dec $itr1
-    jg  .Lseal_avx2_tail_384_rounds_and_3xhash
-        dec $itr2
-    jge .Lseal_avx2_tail_384_rounds_and_2xhash\n";
-    &finalize_state_avx2(3);
-    &xor_stream_avx2($A2,$B2,$C2,$D2,0*32,$T0);
-    &xor_stream_avx2($A1,$B1,$C1,$D1,4*32,$T0);
-    &finish_stream_avx2($A0,$B0,$C0,$D0,$T0); $code.="
-    mov \$8*32, $itr1
-    lea 8*32($inp), $inp
-    sub \$8*32, $inl
-    jmp .Lseal_avx2_short_hash_remainder
-###############################################################################
-.Lseal_avx2_tail_512:\n";
-    &prep_state_avx2(4); $code.="
-.Lseal_avx2_tail_512_rounds_and_3xhash: \n";
-        &poly_add("0($oup)");
-        &poly_mul_mulx(); $code.="
-        lea 2*8($oup), $oup
-.Lseal_avx2_tail_512_rounds_and_2xhash: \n";
-        &emit_body(20);
-        &poly_add("0*8($oup)");
-        &emit_body(20);
-        &poly_stage1_mulx();
-        &emit_body(20);
-        &poly_stage2_mulx();
-        &emit_body(20);
-        &poly_stage3_mulx();
-        &emit_body(20);
-        &poly_reduce_stage();
-        &emit_body(20);
-        &poly_add("2*8($oup)");
-        &emit_body(20);
-        &poly_stage1_mulx();
-        &emit_body(20);
-        &poly_stage2_mulx();
-        &emit_body(20);
-        &poly_stage3_mulx();
-        &emit_body(20);
-        &poly_reduce_stage();
-        foreach $l (@loop_body) {$code.=$l."\n";}
-        @loop_body = split /\n/, $chacha_body; $code.="
-        lea 4*8($oup), $oup
-        dec $itr1
-    jg .Lseal_avx2_tail_512_rounds_and_3xhash
-        dec $itr2
-    jge .Lseal_avx2_tail_512_rounds_and_2xhash\n";
-    &finalize_state_avx2(4); $code.="
-    vmovdqa $A0, $tmp_store\n";
-    &xor_stream_avx2($A3, $B3, $C3, $D3, 0*32, $A0); $code.="
-    vmovdqa $tmp_store, $A0\n";
-    &xor_stream_avx2($A2, $B2, $C2, $D2, 4*32, $A3);
-    &xor_stream_avx2($A1, $B1, $C1, $D1, 8*32, $A3);
-    &finish_stream_avx2($A0,$B0,$C0,$D0,$T0); $code.="
-    mov \$12*32, $itr1
-    lea 12*32($inp), $inp
-    sub \$12*32, $inl
-    jmp .Lseal_avx2_short_hash_remainder
-################################################################################
-.Lseal_avx2_320:
-    vmovdqa $A0, $A1
-    vmovdqa $A0, $A2
-    vmovdqa $B0, $B1
-    vmovdqa $B0, $B2
-    vmovdqa $C0, $C1
-    vmovdqa $C0, $C2
-    vpaddd .Lavx2_inc(%rip), $D0, $D1
-    vpaddd .Lavx2_inc(%rip), $D1, $D2
-    vmovdqa $B0, $T1
-    vmovdqa $C0, $T2
-    vmovdqa $D0, $ctr0_store
-    vmovdqa $D1, $ctr1_store
-    vmovdqa $D2, $ctr2_store
-    mov \$10, $acc0
-.Lseal_avx2_320_rounds: \n";
-        &chacha_qr_avx2($A0,$B0,$C0,$D0,$T0,"left");
-        &chacha_qr_avx2($A1,$B1,$C1,$D1,$T0,"left");
-        &chacha_qr_avx2($A2,$B2,$C2,$D2,$T0,"left");
-        &chacha_qr_avx2($A0,$B0,$C0,$D0,$T0,"right");
-        &chacha_qr_avx2($A1,$B1,$C1,$D1,$T0,"right");
-        &chacha_qr_avx2($A2,$B2,$C2,$D2,$T0,"right"); $code.="
-        dec $acc0
-    jne .Lseal_avx2_320_rounds
-    vpaddd .Lchacha20_consts(%rip), $A0, $A0
-    vpaddd .Lchacha20_consts(%rip), $A1, $A1
-    vpaddd .Lchacha20_consts(%rip), $A2, $A2
-    vpaddd $T1, $B0, $B0
-    vpaddd $T1, $B1, $B1
-    vpaddd $T1, $B2, $B2
-    vpaddd $T2, $C0, $C0
-    vpaddd $T2, $C1, $C1
-    vpaddd $T2, $C2, $C2
-    vpaddd $ctr0_store, $D0, $D0
-    vpaddd $ctr1_store, $D1, $D1
-    vpaddd $ctr2_store, $D2, $D2
-    vperm2i128 \$0x02, $A0, $B0, $T0
-    # Clamp and store the key
-    vpand .Lclamp(%rip), $T0, $T0
-    vmovdqa $T0, $r_store
-    # Stream for up to 320 bytes
-    vperm2i128 \$0x13, $A0, $B0, $A0
-    vperm2i128 \$0x13, $C0, $D0, $B0
-    vperm2i128 \$0x02, $A1, $B1, $C0
-    vperm2i128 \$0x02, $C1, $D1, $D0
-    vperm2i128 \$0x13, $A1, $B1, $A1
-    vperm2i128 \$0x13, $C1, $D1, $B1
-    vperm2i128 \$0x02, $A2, $B2, $C1
-    vperm2i128 \$0x02, $C2, $D2, $D1
-    vperm2i128 \$0x13, $A2, $B2, $A2
-    vperm2i128 \$0x13, $C2, $D2, $B2
-    jmp .Lseal_avx2_short
-################################################################################
-.Lseal_avx2_192:
-    vmovdqa $A0, $A1
-    vmovdqa $A0, $A2
-    vmovdqa $B0, $B1
-    vmovdqa $B0, $B2
-    vmovdqa $C0, $C1
-    vmovdqa $C0, $C2
-    vpaddd .Lavx2_inc(%rip), $D0, $D1
-    vmovdqa $D0, $T2
-    vmovdqa $D1, $T3
-    mov \$10, $acc0
-.Lseal_avx2_192_rounds: \n";
-        &chacha_qr_avx2($A0,$B0,$C0,$D0,$T0,"left");
-        &chacha_qr_avx2($A1,$B1,$C1,$D1,$T0,"left");
-        &chacha_qr_avx2($A0,$B0,$C0,$D0,$T0,"right");
-        &chacha_qr_avx2($A1,$B1,$C1,$D1,$T0,"right"); $code.="
-        dec $acc0
-    jne .Lseal_avx2_192_rounds
-    vpaddd $A2, $A0, $A0
-    vpaddd $A2, $A1, $A1
-    vpaddd $B2, $B0, $B0
-    vpaddd $B2, $B1, $B1
-    vpaddd $C2, $C0, $C0
-    vpaddd $C2, $C1, $C1
-    vpaddd $T2, $D0, $D0
-    vpaddd $T3, $D1, $D1
-    vperm2i128 \$0x02, $A0, $B0, $T0
-    # Clamp and store the key
-    vpand .Lclamp(%rip), $T0, $T0
-    vmovdqa $T0, $r_store
-    # Stream for up to 192 bytes
-    vperm2i128 \$0x13, $A0, $B0, $A0
-    vperm2i128 \$0x13, $C0, $D0, $B0
-    vperm2i128 \$0x02, $A1, $B1, $C0
-    vperm2i128 \$0x02, $C1, $D1, $D0
-    vperm2i128 \$0x13, $A1, $B1, $A1
-    vperm2i128 \$0x13, $C1, $D1, $B1
-.Lseal_avx2_short:
-    mov $adl, $itr2
-    call poly_hash_ad_internal
-    xor $itr1, $itr1
-.Lseal_avx2_short_hash_remainder:
-        cmp \$16, $itr1
-        jb .Lseal_avx2_short_loop\n";
-        &poly_add("0($oup)");
-        &poly_mul(); $code.="
-        sub \$16, $itr1
-        add \$16, $oup
-    jmp .Lseal_avx2_short_hash_remainder
-.Lseal_avx2_short_loop:
-        cmp \$32, $inl
-        jb .Lseal_avx2_short_tail
-        sub \$32, $inl
-        # Encrypt
-        vpxor ($inp), $A0, $A0
-        vmovdqu $A0, ($oup)
-        lea 1*32($inp), $inp
-        # Load + hash\n";
-        &poly_add("0*8($oup)");
-        &poly_mul();
-        &poly_add("2*8($oup)");
-        &poly_mul(); $code.="
-        lea 1*32($oup), $oup
-        # Shift stream
-        vmovdqa $B0, $A0
-        vmovdqa $C0, $B0
-        vmovdqa $D0, $C0
-        vmovdqa $A1, $D0
-        vmovdqa $B1, $A1
-        vmovdqa $C1, $B1
-        vmovdqa $D1, $C1
-        vmovdqa $A2, $D1
-        vmovdqa $B2, $A2
-    jmp .Lseal_avx2_short_loop
-.Lseal_avx2_short_tail:
-    cmp \$16, $inl
-    jb .Lseal_avx2_exit
-    sub \$16, $inl
-    vpxor ($inp), $A0x, $A3x
-    vmovdqu $A3x, ($oup)
-    lea 1*16($inp), $inp\n";
-    &poly_add("0*8($oup)");
-    &poly_mul(); $code.="
-    lea 1*16($oup), $oup
-    vextracti128 \$1, $A0, $A0x
-.Lseal_avx2_exit:
-    vzeroupper
-    jmp .Lseal_sse_tail_16
-.cfi_endproc
-.size chacha20_poly1305_seal_avx2, .-chacha20_poly1305_seal_avx2
-";
-}
-
-$code =~ s/\`([^\`]*)\`/eval $1/gem;
-
-print $code;
-
-close STDOUT or die "error closing STDOUT: $!";
diff --git a/src/crypto/cipher/cipher_test.cc b/src/crypto/cipher/cipher_test.cc
deleted file mode 100644
index e21a52d..0000000
--- a/src/crypto/cipher/cipher_test.cc
+++ /dev/null
@@ -1,967 +0,0 @@
-// Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved.
-//
-// 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
-//
-//     https://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 <limits.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <algorithm>
-#include <string>
-#include <vector>
-
-#include <gtest/gtest.h>
-
-#include <openssl/aes.h>
-#include <openssl/cipher.h>
-#include <openssl/err.h>
-#include <openssl/nid.h>
-#include <openssl/rand.h>
-#include <openssl/sha.h>
-#include <openssl/span.h>
-
-#include "../internal.h"
-#include "../test/file_test.h"
-#include "../test/test_util.h"
-#include "../test/wycheproof_util.h"
-#include "./internal.h"
-
-
-static const EVP_CIPHER *GetCipher(const std::string &name) {
-  if (name == "DES-CBC") {
-    return EVP_des_cbc();
-  } else if (name == "DES-ECB") {
-    return EVP_des_ecb();
-  } else if (name == "DES-EDE") {
-    return EVP_des_ede();
-  } else if (name == "DES-EDE3") {
-    return EVP_des_ede3();
-  } else if (name == "DES-EDE-CBC") {
-    return EVP_des_ede_cbc();
-  } else if (name == "DES-EDE3-CBC") {
-    return EVP_des_ede3_cbc();
-  } else if (name == "RC4") {
-    return EVP_rc4();
-  } else if (name == "AES-128-ECB") {
-    return EVP_aes_128_ecb();
-  } else if (name == "AES-256-ECB") {
-    return EVP_aes_256_ecb();
-  } else if (name == "AES-128-CBC") {
-    return EVP_aes_128_cbc();
-  } else if (name == "AES-128-GCM") {
-    return EVP_aes_128_gcm();
-  } else if (name == "AES-128-OFB") {
-    return EVP_aes_128_ofb();
-  } else if (name == "AES-192-CBC") {
-    return EVP_aes_192_cbc();
-  } else if (name == "AES-192-CTR") {
-    return EVP_aes_192_ctr();
-  } else if (name == "AES-192-ECB") {
-    return EVP_aes_192_ecb();
-  } else if (name == "AES-192-GCM") {
-    return EVP_aes_192_gcm();
-  } else if (name == "AES-192-OFB") {
-    return EVP_aes_192_ofb();
-  } else if (name == "AES-256-CBC") {
-    return EVP_aes_256_cbc();
-  } else if (name == "AES-128-CTR") {
-    return EVP_aes_128_ctr();
-  } else if (name == "AES-256-CTR") {
-    return EVP_aes_256_ctr();
-  } else if (name == "AES-256-GCM") {
-    return EVP_aes_256_gcm();
-  } else if (name == "AES-256-OFB") {
-    return EVP_aes_256_ofb();
-  }
-  return nullptr;
-}
-
-enum class Operation {
-  // kBoth tests both encryption and decryption.
-  kBoth,
-  // kEncrypt tests encryption. The result of encryption should always
-  // successfully decrypt, so this should only be used if the test file has a
-  // matching decrypt-only vector.
-  kEncrypt,
-  // kDecrypt tests decryption. This should only be used if the test file has a
-  // matching encrypt-only input, or if multiple ciphertexts are valid for
-  // a given plaintext and this is a non-canonical ciphertext.
-  kDecrypt,
-  // kInvalidDecrypt tests decryption and expects it to fail, e.g. due to
-  // invalid tag or padding.
-  kInvalidDecrypt,
-};
-
-static const char *OperationToString(Operation op) {
-  switch (op) {
-    case Operation::kBoth:
-      return "Both";
-    case Operation::kEncrypt:
-      return "Encrypt";
-    case Operation::kDecrypt:
-      return "Decrypt";
-    case Operation::kInvalidDecrypt:
-      return "InvalidDecrypt";
-  }
-  abort();
-}
-
-// MaybeCopyCipherContext, if |copy| is true, replaces |*ctx| with a, hopefully
-// equivalent, copy of it.
-static bool MaybeCopyCipherContext(bool copy,
-                                   bssl::UniquePtr<EVP_CIPHER_CTX> *ctx) {
-  if (!copy) {
-    return true;
-  }
-  bssl::UniquePtr<EVP_CIPHER_CTX> ctx2(EVP_CIPHER_CTX_new());
-  if (!ctx2 || !EVP_CIPHER_CTX_copy(ctx2.get(), ctx->get())) {
-    return false;
-  }
-  *ctx = std::move(ctx2);
-  return true;
-}
-
-static void TestCipherAPI(const EVP_CIPHER *cipher, Operation op, bool padding,
-                          bool copy, bool in_place, bool use_evp_cipher,
-                          size_t chunk_size, bssl::Span<const uint8_t> key,
-                          bssl::Span<const uint8_t> iv,
-                          bssl::Span<const uint8_t> plaintext,
-                          bssl::Span<const uint8_t> ciphertext,
-                          bssl::Span<const uint8_t> aad,
-                          bssl::Span<const uint8_t> tag) {
-  bool encrypt = op == Operation::kEncrypt;
-  bool is_custom_cipher =
-      EVP_CIPHER_flags(cipher) & EVP_CIPH_FLAG_CUSTOM_CIPHER;
-  bssl::Span<const uint8_t> in = encrypt ? plaintext : ciphertext;
-  bssl::Span<const uint8_t> expected = encrypt ? ciphertext : plaintext;
-  bool is_aead = EVP_CIPHER_mode(cipher) == EVP_CIPH_GCM_MODE;
-
-  // Some |EVP_CIPHER|s take a variable-length key, and need to first be
-  // configured with the key length, which requires configuring the cipher.
-  bssl::UniquePtr<EVP_CIPHER_CTX> ctx(EVP_CIPHER_CTX_new());
-  ASSERT_TRUE(ctx);
-  ASSERT_TRUE(EVP_CipherInit_ex(ctx.get(), cipher, /*engine=*/nullptr,
-                                /*key=*/nullptr, /*iv=*/nullptr,
-                                encrypt ? 1 : 0));
-  ASSERT_TRUE(EVP_CIPHER_CTX_set_key_length(ctx.get(), key.size()));
-  if (!padding) {
-    ASSERT_TRUE(EVP_CIPHER_CTX_set_padding(ctx.get(), 0));
-  }
-
-  // Configure the key.
-  ASSERT_TRUE(MaybeCopyCipherContext(copy, &ctx));
-  ASSERT_TRUE(EVP_CipherInit_ex(ctx.get(), /*cipher=*/nullptr,
-                                /*engine=*/nullptr, key.data(), /*iv=*/nullptr,
-                                /*enc=*/-1));
-
-  // Configure the IV to run the actual operation. Callers that wish to use a
-  // key for multiple, potentially concurrent, operations will likely copy at
-  // this point. The |EVP_CIPHER_CTX| API uses the same type to represent a
-  // pre-computed key schedule and a streaming operation.
-  ASSERT_TRUE(MaybeCopyCipherContext(copy, &ctx));
-  if (is_aead) {
-    ASSERT_LE(iv.size(), size_t{INT_MAX});
-    ASSERT_TRUE(EVP_CIPHER_CTX_ctrl(ctx.get(), EVP_CTRL_AEAD_SET_IVLEN,
-                                    static_cast<int>(iv.size()), nullptr));
-    ASSERT_EQ(EVP_CIPHER_CTX_iv_length(ctx.get()), iv.size());
-  } else {
-    ASSERT_EQ(iv.size(), EVP_CIPHER_CTX_iv_length(ctx.get()));
-  }
-  ASSERT_TRUE(EVP_CipherInit_ex(ctx.get(), /*cipher=*/nullptr,
-                                /*engine=*/nullptr,
-                                /*key=*/nullptr, iv.data(), /*enc=*/-1));
-
-  if (is_aead && !encrypt) {
-    ASSERT_TRUE(EVP_CIPHER_CTX_ctrl(ctx.get(), EVP_CTRL_AEAD_SET_TAG,
-                                    tag.size(),
-                                    const_cast<uint8_t *>(tag.data())));
-  }
-
-  // Note: the deprecated |EVP_CIPHER|-based AEAD API is sensitive to whether
-  // parameters are NULL, so it is important to skip the |in| and |aad|
-  // |EVP_CipherUpdate| calls when empty.
-  while (!aad.empty()) {
-    size_t todo =
-        chunk_size == 0 ? aad.size() : std::min(aad.size(), chunk_size);
-    if (use_evp_cipher) {
-      // AEADs always use the "custom cipher" return value convention. Passing a
-      // null output pointer triggers the AAD logic.
-      ASSERT_TRUE(is_custom_cipher);
-      ASSERT_EQ(static_cast<int>(todo),
-                EVP_Cipher(ctx.get(), nullptr, aad.data(), todo));
-    } else {
-      int len;
-      ASSERT_TRUE(EVP_CipherUpdate(ctx.get(), nullptr, &len, aad.data(), todo));
-      // Although it doesn't output anything, |EVP_CipherUpdate| should claim to
-      // output the input length.
-      EXPECT_EQ(len, static_cast<int>(todo));
-    }
-    aad = aad.subspan(todo);
-  }
-
-  // Set up the output buffer.
-  size_t max_out = in.size();
-  size_t block_size = EVP_CIPHER_CTX_block_size(ctx.get());
-  if (block_size > 1 &&
-      (EVP_CIPHER_CTX_flags(ctx.get()) & EVP_CIPH_NO_PADDING) == 0 &&
-      EVP_CIPHER_CTX_encrypting(ctx.get())) {
-    max_out += block_size - (max_out % block_size);
-  }
-  std::vector<uint8_t> result(max_out);
-  if (in_place) {
-    std::copy(in.begin(), in.end(), result.begin());
-    in = bssl::Span(result).first(in.size());
-  }
-
-  size_t total = 0;
-  int len;
-  while (!in.empty()) {
-    size_t todo = chunk_size == 0 ? in.size() : std::min(in.size(), chunk_size);
-    EXPECT_LE(todo, static_cast<size_t>(INT_MAX));
-    ASSERT_TRUE(MaybeCopyCipherContext(copy, &ctx));
-    if (use_evp_cipher) {
-      // |EVP_Cipher| sometimes returns the number of bytes written, or -1 on
-      // error, and sometimes 1 or 0, implicitly writing |in_len| bytes.
-      if (is_custom_cipher) {
-        len = EVP_Cipher(ctx.get(), result.data() + total, in.data(), todo);
-      } else {
-        ASSERT_EQ(
-            1, EVP_Cipher(ctx.get(), result.data() + total, in.data(), todo));
-        len = static_cast<int>(todo);
-      }
-    } else {
-      ASSERT_TRUE(EVP_CipherUpdate(ctx.get(), result.data() + total, &len,
-                                   in.data(), static_cast<int>(todo)));
-    }
-    ASSERT_GE(len, 0);
-    total += static_cast<size_t>(len);
-    in = in.subspan(todo);
-  }
-  if (op == Operation::kInvalidDecrypt) {
-    if (use_evp_cipher) {
-      // Only the "custom cipher" return value convention can report failures.
-      // Passing all nulls should act like |EVP_CipherFinal_ex|.
-      ASSERT_TRUE(is_custom_cipher);
-      EXPECT_EQ(-1, EVP_Cipher(ctx.get(), nullptr, nullptr, 0));
-    } else {
-      // Invalid padding and invalid tags all appear as a failed
-      // |EVP_CipherFinal_ex|.
-      EXPECT_FALSE(EVP_CipherFinal_ex(ctx.get(), result.data() + total, &len));
-    }
-  } else {
-    if (use_evp_cipher) {
-      if (is_custom_cipher) {
-        // Only the "custom cipher" convention has an |EVP_CipherFinal_ex|
-        // equivalent.
-        len = EVP_Cipher(ctx.get(), nullptr, nullptr, 0);
-      } else {
-        len = 0;
-      }
-    } else {
-      ASSERT_TRUE(EVP_CipherFinal_ex(ctx.get(), result.data() + total, &len));
-    }
-    ASSERT_GE(len, 0);
-    total += static_cast<size_t>(len);
-    result.resize(total);
-    EXPECT_EQ(Bytes(expected), Bytes(result));
-    if (encrypt && is_aead) {
-      uint8_t rtag[16];
-      ASSERT_LE(tag.size(), sizeof(rtag));
-      ASSERT_TRUE(MaybeCopyCipherContext(copy, &ctx));
-      ASSERT_TRUE(EVP_CIPHER_CTX_ctrl(ctx.get(), EVP_CTRL_AEAD_GET_TAG,
-                                      tag.size(), rtag));
-      EXPECT_EQ(Bytes(tag), Bytes(rtag, tag.size()));
-    }
-  }
-}
-
-static void TestLowLevelAPI(
-    const EVP_CIPHER *cipher, Operation op, bool in_place, size_t chunk_size,
-    bssl::Span<const uint8_t> key, bssl::Span<const uint8_t> iv,
-    bssl::Span<const uint8_t> plaintext, bssl::Span<const uint8_t> ciphertext) {
-  bool encrypt = op == Operation::kEncrypt;
-  bssl::Span<const uint8_t> in = encrypt ? plaintext : ciphertext;
-  bssl::Span<const uint8_t> expected = encrypt ? ciphertext : plaintext;
-  int nid = EVP_CIPHER_nid(cipher);
-  bool is_ctr = nid == NID_aes_128_ctr || nid == NID_aes_192_ctr ||
-                nid == NID_aes_256_ctr;
-  bool is_cbc = nid == NID_aes_128_cbc || nid == NID_aes_192_cbc ||
-                nid == NID_aes_256_cbc;
-  bool is_ofb = nid == NID_aes_128_ofb128 || nid == NID_aes_192_ofb128 ||
-                nid == NID_aes_256_ofb128;
-  if (!is_ctr && !is_cbc && !is_ofb) {
-    return;
-  }
-
-  // Invalid ciphertexts are not possible in any of the ciphers where this API
-  // applies.
-  ASSERT_NE(op, Operation::kInvalidDecrypt);
-
-  AES_KEY aes;
-  if (encrypt || !is_cbc) {
-    ASSERT_EQ(0, AES_set_encrypt_key(key.data(), key.size() * 8, &aes));
-  } else {
-    ASSERT_EQ(0, AES_set_decrypt_key(key.data(), key.size() * 8, &aes));
-  }
-
-  std::vector<uint8_t> result;
-  if (in_place) {
-    result.assign(in.begin(), in.end());
-  } else {
-    result.resize(expected.size());
-  }
-  bssl::Span<uint8_t> out = bssl::Span(result);
-  // Input and output sizes for all the low-level APIs should match.
-  ASSERT_EQ(in.size(), out.size());
-
-  // The low-level APIs all use block-size IVs.
-  ASSERT_EQ(iv.size(), size_t{AES_BLOCK_SIZE});
-  uint8_t ivec[AES_BLOCK_SIZE];
-  OPENSSL_memcpy(ivec, iv.data(), iv.size());
-
-  if (is_ctr) {
-    unsigned num = 0;
-    uint8_t ecount_buf[AES_BLOCK_SIZE];
-    if (chunk_size == 0) {
-      AES_ctr128_encrypt(in.data(), out.data(), in.size(), &aes, ivec,
-                         ecount_buf, &num);
-    } else {
-      do {
-        size_t todo = std::min(in.size(), chunk_size);
-        AES_ctr128_encrypt(in.data(), out.data(), todo, &aes, ivec, ecount_buf,
-                           &num);
-        in = in.subspan(todo);
-        out = out.subspan(todo);
-      } while (!in.empty());
-    }
-    EXPECT_EQ(Bytes(expected), Bytes(result));
-  } else if (is_cbc && chunk_size % AES_BLOCK_SIZE == 0) {
-    // Note |AES_cbc_encrypt| requires block-aligned chunks.
-    if (chunk_size == 0) {
-      AES_cbc_encrypt(in.data(), out.data(), in.size(), &aes, ivec, encrypt);
-    } else {
-      do {
-        size_t todo = std::min(in.size(), chunk_size);
-        AES_cbc_encrypt(in.data(), out.data(), todo, &aes, ivec, encrypt);
-        in = in.subspan(todo);
-        out = out.subspan(todo);
-      } while (!in.empty());
-    }
-    EXPECT_EQ(Bytes(expected), Bytes(result));
-  } else if (is_ofb) {
-    int num = 0;
-    if (chunk_size == 0) {
-      AES_ofb128_encrypt(in.data(), out.data(), in.size(), &aes, ivec, &num);
-    } else {
-      do {
-        size_t todo = std::min(in.size(), chunk_size);
-        AES_ofb128_encrypt(in.data(), out.data(), todo, &aes, ivec, &num);
-        in = in.subspan(todo);
-        out = out.subspan(todo);
-      } while (!in.empty());
-    }
-    EXPECT_EQ(Bytes(expected), Bytes(result));
-  }
-}
-
-static void TestCipher(const EVP_CIPHER *cipher, Operation input_op,
-                       bool padding, bssl::Span<const uint8_t> key,
-                       bssl::Span<const uint8_t> iv,
-                       bssl::Span<const uint8_t> plaintext,
-                       bssl::Span<const uint8_t> ciphertext,
-                       bssl::Span<const uint8_t> aad,
-                       bssl::Span<const uint8_t> tag) {
-  size_t block_size = EVP_CIPHER_block_size(cipher);
-  std::vector<Operation> ops;
-  if (input_op == Operation::kBoth) {
-    ops = {Operation::kEncrypt, Operation::kDecrypt};
-  } else {
-    ops = {input_op};
-  }
-  for (Operation op : ops) {
-    SCOPED_TRACE(OperationToString(op));
-    // Zero indicates a single-shot API.
-    static const size_t kChunkSizes[] = {0,  1,  2,  5,  7,  8,  9,  15, 16,
-                                         17, 31, 32, 33, 63, 64, 65, 512};
-    for (size_t chunk_size : kChunkSizes) {
-      SCOPED_TRACE(chunk_size);
-      if (chunk_size > plaintext.size() && chunk_size > ciphertext.size() &&
-          chunk_size > aad.size()) {
-        continue;
-      }
-      for (bool in_place : {false, true}) {
-        SCOPED_TRACE(in_place);
-        for (bool copy : {false, true}) {
-          SCOPED_TRACE(copy);
-          TestCipherAPI(cipher, op, padding, copy, in_place,
-                        /*use_evp_cipher=*/false, chunk_size, key, iv,
-                        plaintext, ciphertext, aad, tag);
-          if (!padding && chunk_size % block_size == 0) {
-            TestCipherAPI(cipher, op, padding, copy, in_place,
-                          /*use_evp_cipher=*/true, chunk_size, key, iv,
-                          plaintext, ciphertext, aad, tag);
-          }
-        }
-        if (!padding) {
-          TestLowLevelAPI(cipher, op, in_place, chunk_size, key, iv, plaintext,
-                          ciphertext);
-        }
-      }
-    }
-  }
-}
-
-static void CipherFileTest(FileTest *t) {
-  std::string cipher_str;
-  ASSERT_TRUE(t->GetAttribute(&cipher_str, "Cipher"));
-  const EVP_CIPHER *cipher = GetCipher(cipher_str);
-  ASSERT_TRUE(cipher);
-
-  std::vector<uint8_t> key, iv, plaintext, ciphertext, aad, tag;
-  ASSERT_TRUE(t->GetBytes(&key, "Key"));
-  ASSERT_TRUE(t->GetBytes(&plaintext, "Plaintext"));
-  ASSERT_TRUE(t->GetBytes(&ciphertext, "Ciphertext"));
-  if (EVP_CIPHER_iv_length(cipher) > 0) {
-    ASSERT_TRUE(t->GetBytes(&iv, "IV"));
-  }
-  if (EVP_CIPHER_mode(cipher) == EVP_CIPH_GCM_MODE) {
-    ASSERT_TRUE(t->GetBytes(&aad, "AAD"));
-    ASSERT_TRUE(t->GetBytes(&tag, "Tag"));
-  }
-
-  Operation op = Operation::kBoth;
-  if (t->HasAttribute("Operation")) {
-    const std::string &str = t->GetAttributeOrDie("Operation");
-    if (str == "Encrypt" || str == "ENCRYPT") {
-      op = Operation::kEncrypt;
-    } else if (str == "Decrypt" || str == "DECRYPT") {
-      op = Operation::kDecrypt;
-    } else if (str == "InvalidDecrypt") {
-      op = Operation::kInvalidDecrypt;
-    } else {
-      FAIL() << "Unknown operation: " << str;
-    }
-  }
-
-  TestCipher(cipher, op, /*padding=*/false, key, iv, plaintext, ciphertext, aad,
-             tag);
-}
-
-TEST(CipherTest, TestVectors) {
-  FileTestGTest("crypto/cipher/test/cipher_tests.txt", CipherFileTest);
-}
-
-TEST(CipherTest, CAVP_AES_128_CBC) {
-  FileTestGTest("crypto/cipher/test/nist_cavp/aes_128_cbc.txt", CipherFileTest);
-}
-
-TEST(CipherTest, CAVP_AES_128_CTR) {
-  FileTestGTest("crypto/cipher/test/nist_cavp/aes_128_ctr.txt", CipherFileTest);
-}
-
-TEST(CipherTest, CAVP_AES_192_CBC) {
-  FileTestGTest("crypto/cipher/test/nist_cavp/aes_192_cbc.txt", CipherFileTest);
-}
-
-TEST(CipherTest, CAVP_AES_192_CTR) {
-  FileTestGTest("crypto/cipher/test/nist_cavp/aes_192_ctr.txt", CipherFileTest);
-}
-
-TEST(CipherTest, CAVP_AES_256_CBC) {
-  FileTestGTest("crypto/cipher/test/nist_cavp/aes_256_cbc.txt", CipherFileTest);
-}
-
-TEST(CipherTest, CAVP_AES_256_CTR) {
-  FileTestGTest("crypto/cipher/test/nist_cavp/aes_256_ctr.txt", CipherFileTest);
-}
-
-TEST(CipherTest, CAVP_TDES_CBC) {
-  FileTestGTest("crypto/cipher/test/nist_cavp/tdes_cbc.txt", CipherFileTest);
-}
-
-TEST(CipherTest, CAVP_TDES_ECB) {
-  FileTestGTest("crypto/cipher/test/nist_cavp/tdes_ecb.txt", CipherFileTest);
-}
-
-TEST(CipherTest, WycheproofAESCBC) {
-  FileTestGTest("third_party/wycheproof_testvectors/aes_cbc_pkcs5_test.txt",
-                [](FileTest *t) {
-                  t->IgnoreInstruction("type");
-                  t->IgnoreInstruction("ivSize");
-
-                  std::string key_size;
-                  ASSERT_TRUE(t->GetInstruction(&key_size, "keySize"));
-                  const EVP_CIPHER *cipher;
-                  switch (atoi(key_size.c_str())) {
-                    case 128:
-                      cipher = EVP_aes_128_cbc();
-                      break;
-                    case 192:
-                      cipher = EVP_aes_192_cbc();
-                      break;
-                    case 256:
-                      cipher = EVP_aes_256_cbc();
-                      break;
-                    default:
-                      FAIL() << "Unsupported key size: " << key_size;
-                  }
-
-                  std::vector<uint8_t> key, iv, msg, ct;
-                  ASSERT_TRUE(t->GetBytes(&key, "key"));
-                  ASSERT_TRUE(t->GetBytes(&iv, "iv"));
-                  ASSERT_TRUE(t->GetBytes(&msg, "msg"));
-                  ASSERT_TRUE(t->GetBytes(&ct, "ct"));
-                  WycheproofResult result;
-                  ASSERT_TRUE(GetWycheproofResult(t, &result));
-                  TestCipher(cipher,
-                             result.IsValid() ? Operation::kBoth
-                                              : Operation::kInvalidDecrypt,
-                             /*padding=*/true, key, iv, msg, ct, /*aad=*/{},
-                             /*tag=*/{});
-                });
-}
-
-TEST(CipherTest, SHA1WithSecretSuffix) {
-  uint8_t buf[SHA_CBLOCK * 4];
-  RAND_bytes(buf, sizeof(buf));
-  // Hashing should run in time independent of the bytes.
-  CONSTTIME_SECRET(buf, sizeof(buf));
-
-  // Exhaustively testing interesting cases in this function is cubic in the
-  // block size, so we test in 3-byte increments.
-  constexpr size_t kSkip = 3;
-  // This value should be less than 8 to test the edge case when the 8-byte
-  // length wraps to the next block.
-  static_assert(kSkip < 8, "kSkip is too large");
-
-  // |EVP_sha1_final_with_secret_suffix| is sensitive to the public length of
-  // the partial block previously hashed. In TLS, this is the HMAC prefix, the
-  // header, and the public minimum padding length.
-  for (size_t prefix = 0; prefix < SHA_CBLOCK; prefix += kSkip) {
-    SCOPED_TRACE(prefix);
-    // The first block is treated differently, so we run with up to three
-    // blocks of length variability.
-    for (size_t max_len = 0; max_len < 3 * SHA_CBLOCK; max_len += kSkip) {
-      SCOPED_TRACE(max_len);
-      for (size_t len = 0; len <= max_len; len += kSkip) {
-        SCOPED_TRACE(len);
-
-        uint8_t expected[SHA_DIGEST_LENGTH];
-        SHA1(buf, prefix + len, expected);
-        CONSTTIME_DECLASSIFY(expected, sizeof(expected));
-
-        // Make a copy of the secret length to avoid interfering with the loop.
-        size_t secret_len = len;
-        CONSTTIME_SECRET(&secret_len, sizeof(secret_len));
-
-        SHA_CTX ctx;
-        SHA1_Init(&ctx);
-        SHA1_Update(&ctx, buf, prefix);
-        uint8_t computed[SHA_DIGEST_LENGTH];
-        ASSERT_TRUE(EVP_sha1_final_with_secret_suffix(
-            &ctx, computed, buf + prefix, secret_len, max_len));
-
-        CONSTTIME_DECLASSIFY(computed, sizeof(computed));
-        EXPECT_EQ(Bytes(expected), Bytes(computed));
-      }
-    }
-  }
-}
-
-TEST(CipherTest, SHA256WithSecretSuffix) {
-  uint8_t buf[SHA256_CBLOCK * 4];
-  RAND_bytes(buf, sizeof(buf));
-  // Hashing should run in time independent of the bytes.
-  CONSTTIME_SECRET(buf, sizeof(buf));
-
-  // Exhaustively testing interesting cases in this function is cubic in the
-  // block size, so we test in 3-byte increments.
-  constexpr size_t kSkip = 3;
-  // This value should be less than 8 to test the edge case when the 8-byte
-  // length wraps to the next block.
-  static_assert(kSkip < 8, "kSkip is too large");
-
-  // |EVP_sha256_final_with_secret_suffix| is sensitive to the public length of
-  // the partial block previously hashed. In TLS, this is the HMAC prefix, the
-  // header, and the public minimum padding length.
-  for (size_t prefix = 0; prefix < SHA256_CBLOCK; prefix += kSkip) {
-    SCOPED_TRACE(prefix);
-    // The first block is treated differently, so we run with up to three
-    // blocks of length variability.
-    for (size_t max_len = 0; max_len < 3 * SHA256_CBLOCK; max_len += kSkip) {
-      SCOPED_TRACE(max_len);
-      for (size_t len = 0; len <= max_len; len += kSkip) {
-        SCOPED_TRACE(len);
-
-        uint8_t expected[SHA256_DIGEST_LENGTH];
-        SHA256(buf, prefix + len, expected);
-        CONSTTIME_DECLASSIFY(expected, sizeof(expected));
-
-        // Make a copy of the secret length to avoid interfering with the loop.
-        size_t secret_len = len;
-        CONSTTIME_SECRET(&secret_len, sizeof(secret_len));
-
-        SHA256_CTX ctx;
-        SHA256_Init(&ctx);
-        SHA256_Update(&ctx, buf, prefix);
-        uint8_t computed[SHA256_DIGEST_LENGTH];
-        ASSERT_TRUE(EVP_sha256_final_with_secret_suffix(
-            &ctx, computed, buf + prefix, secret_len, max_len));
-
-        CONSTTIME_DECLASSIFY(computed, sizeof(computed));
-        EXPECT_EQ(Bytes(expected), Bytes(computed));
-      }
-    }
-  }
-}
-
-TEST(CipherTest, GetCipher) {
-  const EVP_CIPHER *cipher = EVP_get_cipherbynid(NID_aes_128_gcm);
-  ASSERT_TRUE(cipher);
-  EXPECT_EQ(NID_aes_128_gcm, EVP_CIPHER_nid(cipher));
-
-  cipher = EVP_get_cipherbyname("aes-128-gcm");
-  ASSERT_TRUE(cipher);
-  EXPECT_EQ(NID_aes_128_gcm, EVP_CIPHER_nid(cipher));
-
-  cipher = EVP_get_cipherbyname("AES-128-GCM");
-  ASSERT_TRUE(cipher);
-  EXPECT_EQ(NID_aes_128_gcm, EVP_CIPHER_nid(cipher));
-
-  // We support a tcpdump-specific alias for 3DES.
-  cipher = EVP_get_cipherbyname("3des");
-  ASSERT_TRUE(cipher);
-  EXPECT_EQ(NID_des_ede3_cbc, EVP_CIPHER_nid(cipher));
-}
-
-// Test the AES-GCM EVP_CIPHER's internal IV management APIs. OpenSSH uses these
-// APIs.
-TEST(CipherTest, GCMIncrementingIV) {
-  const EVP_CIPHER *kCipher = EVP_aes_128_gcm();
-  static const uint8_t kKey[16] = {0, 1, 2,  3,  4,  5,  6,  7,
-                                   8, 9, 10, 11, 12, 13, 14, 15};
-  static const uint8_t kInput[] = {'h', 'e', 'l', 'l', 'o'};
-
-  auto expect_iv = [&](EVP_CIPHER_CTX *ctx, bssl::Span<const uint8_t> iv,
-                       bool enc) {
-    // Make a reference ciphertext.
-    bssl::ScopedEVP_CIPHER_CTX ref;
-    ASSERT_TRUE(EVP_EncryptInit_ex(ref.get(), kCipher, /*impl=*/nullptr,
-                                   kKey, /*iv=*/nullptr));
-    ASSERT_TRUE(EVP_CIPHER_CTX_ctrl(ref.get(), EVP_CTRL_AEAD_SET_IVLEN,
-                                    static_cast<int>(iv.size()), nullptr));
-    ASSERT_TRUE(EVP_EncryptInit_ex(ref.get(), /*cipher=*/nullptr,
-                                   /*impl=*/nullptr, /*key=*/nullptr,
-                                   iv.data()));
-    uint8_t ciphertext[sizeof(kInput)];
-    int ciphertext_len;
-    ASSERT_TRUE(EVP_EncryptUpdate(ref.get(), ciphertext, &ciphertext_len,
-                                  kInput, sizeof(kInput)));
-    int extra_len;
-    ASSERT_TRUE(EVP_EncryptFinal_ex(ref.get(), nullptr, &extra_len));
-    ASSERT_EQ(extra_len, 0);
-    uint8_t tag[16];
-    ASSERT_TRUE(EVP_CIPHER_CTX_ctrl(ref.get(), EVP_CTRL_AEAD_GET_TAG,
-                                    sizeof(tag), tag));
-
-    if (enc) {
-      uint8_t actual[sizeof(kInput)];
-      int actual_len;
-      ASSERT_TRUE(
-          EVP_EncryptUpdate(ctx, actual, &actual_len, kInput, sizeof(kInput)));
-      ASSERT_TRUE(EVP_EncryptFinal_ex(ctx, nullptr, &extra_len));
-      ASSERT_EQ(extra_len, 0);
-      EXPECT_EQ(Bytes(actual, actual_len), Bytes(ciphertext, ciphertext_len));
-      uint8_t actual_tag[16];
-      ASSERT_TRUE(EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_GET_TAG,
-                                      sizeof(actual_tag), actual_tag));
-      EXPECT_EQ(Bytes(actual_tag), Bytes(tag));
-    } else {
-      ASSERT_TRUE(EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG, sizeof(tag),
-                                      const_cast<uint8_t *>(tag)));
-      uint8_t actual[sizeof(kInput)];
-      int actual_len;
-      ASSERT_TRUE(EVP_DecryptUpdate(ctx, actual, &actual_len, ciphertext,
-                                    sizeof(ciphertext)));
-      ASSERT_TRUE(EVP_DecryptFinal_ex(ctx, nullptr, &extra_len));
-      ASSERT_EQ(extra_len, 0);
-      EXPECT_EQ(Bytes(actual, actual_len), Bytes(kInput));
-    }
-  };
-
-  {
-    // Passing in a fixed IV length of -1 sets the whole IV, but then configures
-    // |EVP_CIPHER_CTX| to increment the bottom 8 bytes of the IV.
-    static const uint8_t kIV1[12] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
-    static const uint8_t kIV2[12] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13};
-    static const uint8_t kIV3[12] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 14};
-    static const uint8_t kIV4[12] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 15};
-
-    bssl::ScopedEVP_CIPHER_CTX ctx;
-    ASSERT_TRUE(EVP_EncryptInit_ex(ctx.get(), kCipher, /*impl=*/nullptr, kKey,
-                                   /*iv=*/nullptr));
-    ASSERT_TRUE(EVP_CIPHER_CTX_ctrl(ctx.get(), EVP_CTRL_AEAD_SET_IV_FIXED, -1,
-                                    const_cast<uint8_t *>(kIV1)));
-
-    // EVP_CTRL_GCM_IV_GEN both configures and returns the IV.
-    uint8_t iv[12];
-    ASSERT_TRUE(
-        EVP_CIPHER_CTX_ctrl(ctx.get(), EVP_CTRL_GCM_IV_GEN, sizeof(iv), iv));
-    EXPECT_EQ(Bytes(iv), Bytes(kIV1));
-    ASSERT_NO_FATAL_FAILURE(expect_iv(ctx.get(), kIV1, /*enc=*/true));
-
-    // Continuing to run EVP_CTRL_GCM_IV_GEN should increment the IV.
-    ASSERT_TRUE(
-        EVP_CIPHER_CTX_ctrl(ctx.get(), EVP_CTRL_GCM_IV_GEN, sizeof(iv), iv));
-    EXPECT_EQ(Bytes(iv), Bytes(kIV2));
-    ASSERT_NO_FATAL_FAILURE(expect_iv(ctx.get(), kIV2, /*enc=*/true));
-
-    // Passing in a shorter length outputs the suffix portion.
-    uint8_t suffix[8];
-    ASSERT_TRUE(EVP_CIPHER_CTX_ctrl(ctx.get(), EVP_CTRL_GCM_IV_GEN,
-                                    sizeof(suffix), suffix));
-    EXPECT_EQ(Bytes(suffix), Bytes(bssl::Span(kIV3).last(sizeof(suffix))));
-    ASSERT_NO_FATAL_FAILURE(expect_iv(ctx.get(), kIV3, /*enc=*/true));
-
-    // A length of -1 returns the whole IV.
-    ASSERT_TRUE(EVP_CIPHER_CTX_ctrl(ctx.get(), EVP_CTRL_GCM_IV_GEN, -1, iv));
-    EXPECT_EQ(Bytes(iv), Bytes(kIV4));
-    ASSERT_NO_FATAL_FAILURE(expect_iv(ctx.get(), kIV4, /*enc=*/true));
-  }
-
-  {
-    // Similar to the above, but for decrypting.
-    static const uint8_t kIV1[12] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
-    static const uint8_t kIV2[12] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13};
-
-    bssl::ScopedEVP_CIPHER_CTX ctx;
-    ASSERT_TRUE(EVP_DecryptInit_ex(ctx.get(), kCipher, /*impl=*/nullptr, kKey,
-                                   /*iv=*/nullptr));
-    ASSERT_TRUE(EVP_CIPHER_CTX_ctrl(ctx.get(), EVP_CTRL_AEAD_SET_IV_FIXED, -1,
-                                    const_cast<uint8_t *>(kIV1)));
-
-    uint8_t iv[12];
-    ASSERT_TRUE(
-        EVP_CIPHER_CTX_ctrl(ctx.get(), EVP_CTRL_GCM_IV_GEN, sizeof(iv), iv));
-    EXPECT_EQ(Bytes(iv), Bytes(kIV1));
-    ASSERT_NO_FATAL_FAILURE(expect_iv(ctx.get(), kIV1, /*enc=*/false));
-
-    ASSERT_TRUE(
-        EVP_CIPHER_CTX_ctrl(ctx.get(), EVP_CTRL_GCM_IV_GEN, sizeof(iv), iv));
-    EXPECT_EQ(Bytes(iv), Bytes(kIV2));
-    ASSERT_NO_FATAL_FAILURE(expect_iv(ctx.get(), kIV2, /*enc=*/false));
-  }
-
-  {
-    // Test that only the bottom 8 bytes are used as a counter.
-    static const uint8_t kIV1[12] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-                                     0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
-    static const uint8_t kIV2[12] = {0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
-                                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
-    static const uint8_t kIV3[12] = {0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
-                                     0x00, 0x00, 0x00, 0x00, 0x00, 0x01};
-
-    bssl::ScopedEVP_CIPHER_CTX ctx;
-    ASSERT_TRUE(EVP_EncryptInit_ex(ctx.get(), kCipher, /*impl=*/nullptr, kKey,
-                                   /*iv=*/nullptr));
-    ASSERT_TRUE(EVP_CIPHER_CTX_ctrl(ctx.get(), EVP_CTRL_AEAD_SET_IV_FIXED, -1,
-                                    const_cast<uint8_t *>(kIV1)));
-
-    uint8_t iv[12];
-    ASSERT_TRUE(
-        EVP_CIPHER_CTX_ctrl(ctx.get(), EVP_CTRL_GCM_IV_GEN, sizeof(iv), iv));
-    EXPECT_EQ(Bytes(iv), Bytes(kIV1));
-    ASSERT_NO_FATAL_FAILURE(expect_iv(ctx.get(), kIV1, /*enc=*/true));
-
-    ASSERT_TRUE(
-        EVP_CIPHER_CTX_ctrl(ctx.get(), EVP_CTRL_GCM_IV_GEN, sizeof(iv), iv));
-    EXPECT_EQ(Bytes(iv), Bytes(kIV2));
-    ASSERT_NO_FATAL_FAILURE(expect_iv(ctx.get(), kIV2, /*enc=*/true));
-
-    ASSERT_TRUE(
-        EVP_CIPHER_CTX_ctrl(ctx.get(), EVP_CTRL_GCM_IV_GEN, sizeof(iv), iv));
-    EXPECT_EQ(Bytes(iv), Bytes(kIV3));
-    ASSERT_NO_FATAL_FAILURE(expect_iv(ctx.get(), kIV3, /*enc=*/true));
-  }
-
-  {
-    // Test with a longer IV length.
-    static const uint8_t kIV1[16] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-                                     0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-                                     0xff, 0xff, 0xff, 0xff};
-    static const uint8_t kIV2[16] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-                                     0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
-                                     0x00, 0x00, 0x00, 0x00};
-    static const uint8_t kIV3[16] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-                                     0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
-                                     0x00, 0x00, 0x00, 0x01};
-
-    bssl::ScopedEVP_CIPHER_CTX ctx;
-    ASSERT_TRUE(EVP_EncryptInit_ex(ctx.get(), kCipher, /*impl=*/nullptr, kKey,
-                                   /*iv=*/nullptr));
-    ASSERT_TRUE(EVP_CIPHER_CTX_ctrl(ctx.get(), EVP_CTRL_AEAD_SET_IVLEN,
-                                    sizeof(kIV1), nullptr));
-    ASSERT_TRUE(EVP_CIPHER_CTX_ctrl(ctx.get(), EVP_CTRL_AEAD_SET_IV_FIXED, -1,
-                                    const_cast<uint8_t *>(kIV1)));
-
-    uint8_t iv[16];
-    ASSERT_TRUE(
-        EVP_CIPHER_CTX_ctrl(ctx.get(), EVP_CTRL_GCM_IV_GEN, sizeof(iv), iv));
-    EXPECT_EQ(Bytes(iv), Bytes(kIV1));
-    ASSERT_NO_FATAL_FAILURE(expect_iv(ctx.get(), kIV1, /*enc=*/true));
-
-    ASSERT_TRUE(
-        EVP_CIPHER_CTX_ctrl(ctx.get(), EVP_CTRL_GCM_IV_GEN, sizeof(iv), iv));
-    EXPECT_EQ(Bytes(iv), Bytes(kIV2));
-    ASSERT_NO_FATAL_FAILURE(expect_iv(ctx.get(), kIV2, /*enc=*/true));
-
-    ASSERT_TRUE(
-        EVP_CIPHER_CTX_ctrl(ctx.get(), EVP_CTRL_GCM_IV_GEN, sizeof(iv), iv));
-    EXPECT_EQ(Bytes(iv), Bytes(kIV3));
-    ASSERT_NO_FATAL_FAILURE(expect_iv(ctx.get(), kIV3, /*enc=*/true));
-  }
-
-  {
-    // When decrypting, callers are expected to configure the fixed half and
-    // invocation half separately. The two will get stitched together into the
-    // final IV.
-    const uint8_t kIV[12] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
-
-    bssl::ScopedEVP_CIPHER_CTX ctx;
-    ASSERT_TRUE(EVP_DecryptInit_ex(ctx.get(), kCipher, /*impl=*/nullptr, kKey,
-                                   /*iv=*/nullptr));
-    ASSERT_TRUE(EVP_CIPHER_CTX_ctrl(ctx.get(), EVP_CTRL_AEAD_SET_IV_FIXED, 4,
-                                    const_cast<uint8_t *>(kIV)));
-    ASSERT_TRUE(EVP_CIPHER_CTX_ctrl(ctx.get(), EVP_CTRL_GCM_SET_IV_INV, 8,
-                                    const_cast<uint8_t *>(kIV + 4)));
-    // EVP_CTRL_GCM_SET_IV_INV is sufficient to configure the IV. There is no
-    // need to call EVP_CTRL_GCM_IV_GEN.
-    ASSERT_NO_FATAL_FAILURE(expect_iv(ctx.get(), kIV, /*enc=*/false));
-  }
-
-  {
-    // Stitching together a decryption IV that exceeds the standard IV length.
-    const uint8_t kIV[16] = {1, 2,  3,  4,  5,  6,  7,  8,
-                             9, 10, 11, 12, 13, 14, 15, 16};
-
-    bssl::ScopedEVP_CIPHER_CTX ctx;
-    ASSERT_TRUE(EVP_DecryptInit_ex(ctx.get(), kCipher, /*impl=*/nullptr, kKey,
-                                   /*iv=*/nullptr));
-    ASSERT_TRUE(EVP_CIPHER_CTX_ctrl(ctx.get(), EVP_CTRL_AEAD_SET_IVLEN,
-                                    sizeof(kIV), nullptr));
-
-    ASSERT_TRUE(EVP_CIPHER_CTX_ctrl(ctx.get(), EVP_CTRL_AEAD_SET_IV_FIXED, 4,
-                                    const_cast<uint8_t *>(kIV)));
-    ASSERT_TRUE(EVP_CIPHER_CTX_ctrl(ctx.get(), EVP_CTRL_GCM_SET_IV_INV, 12,
-                                    const_cast<uint8_t *>(kIV + 4)));
-    // EVP_CTRL_GCM_SET_IV_INV is sufficient to configure the IV. There is no
-    // need to call EVP_CTRL_GCM_IV_GEN.
-    ASSERT_NO_FATAL_FAILURE(expect_iv(ctx.get(), kIV, /*enc=*/false));
-  }
-
-  {
-    // Fixed IVs must be at least 4 bytes and admit at least an 8 byte counter.
-    const uint8_t kIV[16] = {1, 2,  3,  4,  5,  6,  7,  8,
-                             9, 10, 11, 12, 13, 14, 15, 16};
-
-    bssl::ScopedEVP_CIPHER_CTX ctx;
-    ASSERT_TRUE(EVP_DecryptInit_ex(ctx.get(), kCipher, /*impl=*/nullptr, kKey,
-                                   /*iv=*/nullptr));
-
-    // This means the default IV length only allows a 4/8 split.
-    EXPECT_FALSE(EVP_CIPHER_CTX_ctrl(ctx.get(), EVP_CTRL_AEAD_SET_IV_FIXED, 0,
-                                     const_cast<uint8_t *>(kIV)));
-    EXPECT_FALSE(EVP_CIPHER_CTX_ctrl(ctx.get(), EVP_CTRL_AEAD_SET_IV_FIXED, 3,
-                                     const_cast<uint8_t *>(kIV)));
-    EXPECT_TRUE(EVP_CIPHER_CTX_ctrl(ctx.get(), EVP_CTRL_AEAD_SET_IV_FIXED, 4,
-                                    const_cast<uint8_t *>(kIV)));
-    EXPECT_FALSE(EVP_CIPHER_CTX_ctrl(ctx.get(), EVP_CTRL_AEAD_SET_IV_FIXED, 5,
-                                     const_cast<uint8_t *>(kIV)));
-    EXPECT_FALSE(EVP_CIPHER_CTX_ctrl(ctx.get(), EVP_CTRL_AEAD_SET_IV_FIXED, 16,
-                                     const_cast<uint8_t *>(kIV)));
-
-    // A longer IV allows a wider range.
-    ASSERT_TRUE(
-        EVP_CIPHER_CTX_ctrl(ctx.get(), EVP_CTRL_AEAD_SET_IVLEN, 16, nullptr));
-    EXPECT_FALSE(EVP_CIPHER_CTX_ctrl(ctx.get(), EVP_CTRL_AEAD_SET_IV_FIXED, 0,
-                                     const_cast<uint8_t *>(kIV)));
-    EXPECT_FALSE(EVP_CIPHER_CTX_ctrl(ctx.get(), EVP_CTRL_AEAD_SET_IV_FIXED, 3,
-                                     const_cast<uint8_t *>(kIV)));
-    EXPECT_TRUE(EVP_CIPHER_CTX_ctrl(ctx.get(), EVP_CTRL_AEAD_SET_IV_FIXED, 4,
-                                    const_cast<uint8_t *>(kIV)));
-    EXPECT_TRUE(EVP_CIPHER_CTX_ctrl(ctx.get(), EVP_CTRL_AEAD_SET_IV_FIXED, 6,
-                                    const_cast<uint8_t *>(kIV)));
-    EXPECT_TRUE(EVP_CIPHER_CTX_ctrl(ctx.get(), EVP_CTRL_AEAD_SET_IV_FIXED, 8,
-                                    const_cast<uint8_t *>(kIV)));
-    EXPECT_FALSE(EVP_CIPHER_CTX_ctrl(ctx.get(), EVP_CTRL_AEAD_SET_IV_FIXED, 9,
-                                     const_cast<uint8_t *>(kIV)));
-    EXPECT_FALSE(EVP_CIPHER_CTX_ctrl(ctx.get(), EVP_CTRL_AEAD_SET_IV_FIXED, 16,
-                                     const_cast<uint8_t *>(kIV)));
-  }
-
-  {
-    // When encrypting, setting a fixed IV randomizes the counter portion.
-    const uint8_t kFixedIV[4] = {1, 2, 3, 4};
-    bssl::ScopedEVP_CIPHER_CTX ctx;
-    ASSERT_TRUE(EVP_EncryptInit_ex(ctx.get(), kCipher, /*impl=*/nullptr, kKey,
-                                   /*iv=*/nullptr));
-    ASSERT_TRUE(EVP_CIPHER_CTX_ctrl(ctx.get(), EVP_CTRL_AEAD_SET_IV_FIXED,
-                                    sizeof(kFixedIV),
-                                    const_cast<uint8_t *>(kFixedIV)));
-    uint8_t counter[8];
-    ASSERT_TRUE(EVP_CIPHER_CTX_ctrl(ctx.get(), EVP_CTRL_GCM_IV_GEN,
-                                    sizeof(counter), counter));
-
-    uint8_t iv[12];
-    memcpy(iv, kFixedIV, sizeof(kFixedIV));
-    memcpy(iv + sizeof(kFixedIV), counter, sizeof(counter));
-    ASSERT_NO_FATAL_FAILURE(expect_iv(ctx.get(), iv, /*enc=*/true));
-
-    // The counter continues to act as a counter.
-    uint8_t counter2[8];
-    ASSERT_TRUE(EVP_CIPHER_CTX_ctrl(ctx.get(), EVP_CTRL_GCM_IV_GEN,
-                                    sizeof(counter2), counter2));
-    EXPECT_EQ(CRYPTO_load_u64_be(counter2), CRYPTO_load_u64_be(counter) + 1);
-    memcpy(iv + sizeof(kFixedIV), counter2, sizeof(counter2));
-    ASSERT_NO_FATAL_FAILURE(expect_iv(ctx.get(), iv, /*enc=*/true));
-  }
-
-    {
-    // Same as above, but with a larger IV.
-    const uint8_t kFixedIV[8] = {1, 2, 3, 4, 5, 6, 7, 8};
-    bssl::ScopedEVP_CIPHER_CTX ctx;
-    ASSERT_TRUE(EVP_EncryptInit_ex(ctx.get(), kCipher, /*impl=*/nullptr, kKey,
-                                   /*iv=*/nullptr));
-    ASSERT_TRUE(EVP_CIPHER_CTX_ctrl(ctx.get(), EVP_CTRL_AEAD_SET_IVLEN,
-                                    sizeof(kFixedIV) + 8, nullptr));
-    ASSERT_TRUE(EVP_CIPHER_CTX_ctrl(ctx.get(), EVP_CTRL_AEAD_SET_IV_FIXED,
-                                    sizeof(kFixedIV),
-                                    const_cast<uint8_t *>(kFixedIV)));
-    uint8_t counter[8];
-    ASSERT_TRUE(EVP_CIPHER_CTX_ctrl(ctx.get(), EVP_CTRL_GCM_IV_GEN,
-                                    sizeof(counter), counter));
-
-    uint8_t iv[16];
-    memcpy(iv, kFixedIV, sizeof(kFixedIV));
-    memcpy(iv + sizeof(kFixedIV), counter, sizeof(counter));
-    ASSERT_NO_FATAL_FAILURE(expect_iv(ctx.get(), iv, /*enc=*/true));
-
-    // The counter continues to act as a counter.
-    uint8_t counter2[8];
-    ASSERT_TRUE(EVP_CIPHER_CTX_ctrl(ctx.get(), EVP_CTRL_GCM_IV_GEN,
-                                    sizeof(counter2), counter2));
-    EXPECT_EQ(CRYPTO_load_u64_be(counter2), CRYPTO_load_u64_be(counter) + 1);
-    memcpy(iv + sizeof(kFixedIV), counter2, sizeof(counter2));
-    ASSERT_NO_FATAL_FAILURE(expect_iv(ctx.get(), iv, /*enc=*/true));
-  }
-}
diff --git a/src/crypto/cipher/derive_key.cc b/src/crypto/cipher/derive_key.cc
deleted file mode 100644
index ac0f284..0000000
--- a/src/crypto/cipher/derive_key.cc
+++ /dev/null
@@ -1,108 +0,0 @@
-// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
-//
-// 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
-//
-//     https://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 <openssl/cipher.h>
-
-#include <assert.h>
-
-#include <openssl/digest.h>
-#include <openssl/mem.h>
-
-
-#define PKCS5_SALT_LEN 8
-
-int EVP_BytesToKey(const EVP_CIPHER *type, const EVP_MD *md,
-                   const uint8_t *salt, const uint8_t *data, size_t data_len,
-                   unsigned count, uint8_t *key, uint8_t *iv) {
-  uint8_t md_buf[EVP_MAX_MD_SIZE];
-  unsigned addmd = 0;
-  unsigned mds = 0, i;
-  int rv = 0;
-
-  unsigned nkey = EVP_CIPHER_key_length(type);
-  unsigned niv = EVP_CIPHER_iv_length(type);
-
-  assert(nkey <= EVP_MAX_KEY_LENGTH);
-  assert(niv <= EVP_MAX_IV_LENGTH);
-
-  if (data == nullptr) {
-    return nkey;
-  }
-
-  bssl::ScopedEVP_MD_CTX c;
-  for (;;) {
-    if (!EVP_DigestInit_ex(c.get(), md, nullptr)) {
-      goto err;
-    }
-    if (addmd++) {
-      if (!EVP_DigestUpdate(c.get(), md_buf, mds)) {
-        goto err;
-      }
-    }
-    if (!EVP_DigestUpdate(c.get(), data, data_len)) {
-      goto err;
-    }
-    if (salt != nullptr) {
-      if (!EVP_DigestUpdate(c.get(), salt, PKCS5_SALT_LEN)) {
-        goto err;
-      }
-    }
-    if (!EVP_DigestFinal_ex(c.get(), md_buf, &mds)) {
-      goto err;
-    }
-
-    for (i = 1; i < count; i++) {
-      if (!EVP_DigestInit_ex(c.get(), md, nullptr) ||
-          !EVP_DigestUpdate(c.get(), md_buf, mds) ||
-          !EVP_DigestFinal_ex(c.get(), md_buf, &mds)) {
-        goto err;
-      }
-    }
-
-    i = 0;
-    if (nkey) {
-      for (;;) {
-        if (nkey == 0 || i == mds) {
-          break;
-        }
-        if (key != nullptr) {
-          *(key++) = md_buf[i];
-        }
-        nkey--;
-        i++;
-      }
-    }
-
-    if (niv && i != mds) {
-      for (;;) {
-        if (niv == 0 || i == mds) {
-          break;
-        }
-        if (iv != nullptr) {
-          *(iv++) = md_buf[i];
-        }
-        niv--;
-        i++;
-      }
-    }
-    if (nkey == 0 && niv == 0) {
-      break;
-    }
-  }
-  rv = EVP_CIPHER_key_length(type);
-
-err:
-  OPENSSL_cleanse(md_buf, EVP_MAX_MD_SIZE);
-  return rv;
-}
diff --git a/src/crypto/cipher/e_aesctrhmac.cc b/src/crypto/cipher/e_aesctrhmac.cc
deleted file mode 100644
index fc4e0c5..0000000
--- a/src/crypto/cipher/e_aesctrhmac.cc
+++ /dev/null
@@ -1,279 +0,0 @@
-// Copyright 2017 The BoringSSL Authors
-//
-// 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
-//
-//     https://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 <openssl/aead.h>
-
-#include <assert.h>
-
-#include <openssl/cipher.h>
-#include <openssl/crypto.h>
-#include <openssl/err.h>
-#include <openssl/sha.h>
-
-#include "../fipsmodule/aes/internal.h"
-#include "../fipsmodule/cipher/internal.h"
-
-
-#define EVP_AEAD_AES_CTR_HMAC_SHA256_TAG_LEN SHA256_DIGEST_LENGTH
-#define EVP_AEAD_AES_CTR_HMAC_SHA256_NONCE_LEN 12
-
-struct aead_aes_ctr_hmac_sha256_ctx {
-  union {
-    double align;
-    AES_KEY ks;
-  } ks;
-  ctr128_f ctr;
-  block128_f block;
-  SHA256_CTX inner_init_state;
-  SHA256_CTX outer_init_state;
-};
-
-static_assert(sizeof(((EVP_AEAD_CTX *)NULL)->state) >=
-                  sizeof(struct aead_aes_ctr_hmac_sha256_ctx),
-              "AEAD state is too small");
-static_assert(alignof(union evp_aead_ctx_st_state) >=
-                  alignof(struct aead_aes_ctr_hmac_sha256_ctx),
-              "AEAD state has insufficient alignment");
-
-static void hmac_init(SHA256_CTX *out_inner, SHA256_CTX *out_outer,
-                      const uint8_t hmac_key[32]) {
-  static const size_t hmac_key_len = 32;
-  uint8_t block[SHA256_CBLOCK];
-  OPENSSL_memcpy(block, hmac_key, hmac_key_len);
-  OPENSSL_memset(block + hmac_key_len, 0x36, sizeof(block) - hmac_key_len);
-
-  unsigned i;
-  for (i = 0; i < hmac_key_len; i++) {
-    block[i] ^= 0x36;
-  }
-
-  SHA256_Init(out_inner);
-  SHA256_Update(out_inner, block, sizeof(block));
-
-  OPENSSL_memset(block + hmac_key_len, 0x5c, sizeof(block) - hmac_key_len);
-  for (i = 0; i < hmac_key_len; i++) {
-    block[i] ^= (0x36 ^ 0x5c);
-  }
-
-  SHA256_Init(out_outer);
-  SHA256_Update(out_outer, block, sizeof(block));
-}
-
-static int aead_aes_ctr_hmac_sha256_init(EVP_AEAD_CTX *ctx, const uint8_t *key,
-                                         size_t key_len, size_t tag_len) {
-  struct aead_aes_ctr_hmac_sha256_ctx *aes_ctx =
-      (struct aead_aes_ctr_hmac_sha256_ctx *)&ctx->state;
-  static const size_t hmac_key_len = 32;
-
-  if (key_len < hmac_key_len) {
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BAD_KEY_LENGTH);
-    return 0;  // EVP_AEAD_CTX_init should catch this.
-  }
-
-  const size_t aes_key_len = key_len - hmac_key_len;
-  if (aes_key_len != 16 && aes_key_len != 32) {
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BAD_KEY_LENGTH);
-    return 0;  // EVP_AEAD_CTX_init should catch this.
-  }
-
-  if (tag_len == EVP_AEAD_DEFAULT_TAG_LENGTH) {
-    tag_len = EVP_AEAD_AES_CTR_HMAC_SHA256_TAG_LEN;
-  }
-
-  if (tag_len > EVP_AEAD_AES_CTR_HMAC_SHA256_TAG_LEN) {
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_TAG_TOO_LARGE);
-    return 0;
-  }
-
-  aes_ctx->ctr =
-      aes_ctr_set_key(&aes_ctx->ks.ks, NULL, &aes_ctx->block, key, aes_key_len);
-  ctx->tag_len = tag_len;
-  hmac_init(&aes_ctx->inner_init_state, &aes_ctx->outer_init_state,
-            key + aes_key_len);
-
-  return 1;
-}
-
-static void aead_aes_ctr_hmac_sha256_cleanup(EVP_AEAD_CTX *ctx) {}
-
-static void hmac_update_uint64(SHA256_CTX *sha256, uint64_t value) {
-  unsigned i;
-  uint8_t bytes[8];
-
-  for (i = 0; i < sizeof(bytes); i++) {
-    bytes[i] = value & 0xff;
-    value >>= 8;
-  }
-  SHA256_Update(sha256, bytes, sizeof(bytes));
-}
-
-static void hmac_calculate(uint8_t out[SHA256_DIGEST_LENGTH],
-                           const SHA256_CTX *inner_init_state,
-                           const SHA256_CTX *outer_init_state,
-                           const uint8_t *ad, size_t ad_len,
-                           const uint8_t *nonce, const uint8_t *ciphertext,
-                           size_t ciphertext_len) {
-  SHA256_CTX sha256;
-  OPENSSL_memcpy(&sha256, inner_init_state, sizeof(sha256));
-  hmac_update_uint64(&sha256, ad_len);
-  hmac_update_uint64(&sha256, ciphertext_len);
-  SHA256_Update(&sha256, nonce, EVP_AEAD_AES_CTR_HMAC_SHA256_NONCE_LEN);
-  SHA256_Update(&sha256, ad, ad_len);
-
-  // Pad with zeros to the end of the SHA-256 block.
-  const unsigned num_padding =
-      (SHA256_CBLOCK - ((sizeof(uint64_t)*2 +
-                         EVP_AEAD_AES_CTR_HMAC_SHA256_NONCE_LEN + ad_len) %
-                        SHA256_CBLOCK)) %
-      SHA256_CBLOCK;
-  uint8_t padding[SHA256_CBLOCK];
-  OPENSSL_memset(padding, 0, num_padding);
-  SHA256_Update(&sha256, padding, num_padding);
-
-  SHA256_Update(&sha256, ciphertext, ciphertext_len);
-
-  uint8_t inner_digest[SHA256_DIGEST_LENGTH];
-  SHA256_Final(inner_digest, &sha256);
-
-  OPENSSL_memcpy(&sha256, outer_init_state, sizeof(sha256));
-  SHA256_Update(&sha256, inner_digest, sizeof(inner_digest));
-  SHA256_Final(out, &sha256);
-}
-
-static void aead_aes_ctr_hmac_sha256_crypt(
-    const struct aead_aes_ctr_hmac_sha256_ctx *aes_ctx, uint8_t *out,
-    const uint8_t *in, size_t len, const uint8_t *nonce) {
-  // Since the AEAD operation is one-shot, keeping a buffer of unused keystream
-  // bytes is pointless. However, |CRYPTO_ctr128_encrypt_ctr32| requires it.
-  uint8_t partial_block_buffer[AES_BLOCK_SIZE];
-  unsigned partial_block_offset = 0;
-  OPENSSL_memset(partial_block_buffer, 0, sizeof(partial_block_buffer));
-
-  uint8_t counter[AES_BLOCK_SIZE];
-  OPENSSL_memcpy(counter, nonce, EVP_AEAD_AES_CTR_HMAC_SHA256_NONCE_LEN);
-  OPENSSL_memset(counter + EVP_AEAD_AES_CTR_HMAC_SHA256_NONCE_LEN, 0, 4);
-
-  CRYPTO_ctr128_encrypt_ctr32(in, out, len, &aes_ctx->ks.ks, counter,
-                              partial_block_buffer, &partial_block_offset,
-                              aes_ctx->ctr);
-}
-
-static int aead_aes_ctr_hmac_sha256_seal_scatter(
-    const EVP_AEAD_CTX *ctx, uint8_t *out, uint8_t *out_tag,
-    size_t *out_tag_len, size_t max_out_tag_len, const uint8_t *nonce,
-    size_t nonce_len, const uint8_t *in, size_t in_len, const uint8_t *extra_in,
-    size_t extra_in_len, const uint8_t *ad, size_t ad_len) {
-  const struct aead_aes_ctr_hmac_sha256_ctx *aes_ctx =
-      (struct aead_aes_ctr_hmac_sha256_ctx *) &ctx->state;
-  const uint64_t in_len_64 = in_len;
-
-  if (in_len_64 >= (UINT64_C(1) << 32) * AES_BLOCK_SIZE) {
-     // This input is so large it would overflow the 32-bit block counter.
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_TOO_LARGE);
-    return 0;
-  }
-
-  if (max_out_tag_len < ctx->tag_len) {
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BUFFER_TOO_SMALL);
-    return 0;
-  }
-
-  if (nonce_len != EVP_AEAD_AES_CTR_HMAC_SHA256_NONCE_LEN) {
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_UNSUPPORTED_NONCE_SIZE);
-    return 0;
-  }
-
-  aead_aes_ctr_hmac_sha256_crypt(aes_ctx, out, in, in_len, nonce);
-
-  uint8_t hmac_result[SHA256_DIGEST_LENGTH];
-  hmac_calculate(hmac_result, &aes_ctx->inner_init_state,
-                 &aes_ctx->outer_init_state, ad, ad_len, nonce, out, in_len);
-  OPENSSL_memcpy(out_tag, hmac_result, ctx->tag_len);
-  *out_tag_len = ctx->tag_len;
-
-  return 1;
-}
-
-static int aead_aes_ctr_hmac_sha256_open_gather(
-    const EVP_AEAD_CTX *ctx, uint8_t *out, const uint8_t *nonce,
-    size_t nonce_len, const uint8_t *in, size_t in_len, const uint8_t *in_tag,
-    size_t in_tag_len, const uint8_t *ad, size_t ad_len) {
-  const struct aead_aes_ctr_hmac_sha256_ctx *aes_ctx =
-      (struct aead_aes_ctr_hmac_sha256_ctx *) &ctx->state;
-
-  if (in_tag_len != ctx->tag_len) {
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BAD_DECRYPT);
-    return 0;
-  }
-
-  if (nonce_len != EVP_AEAD_AES_CTR_HMAC_SHA256_NONCE_LEN) {
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_UNSUPPORTED_NONCE_SIZE);
-    return 0;
-  }
-
-  uint8_t hmac_result[SHA256_DIGEST_LENGTH];
-  hmac_calculate(hmac_result, &aes_ctx->inner_init_state,
-                 &aes_ctx->outer_init_state, ad, ad_len, nonce, in,
-                 in_len);
-  if (CRYPTO_memcmp(hmac_result, in_tag, ctx->tag_len) != 0) {
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BAD_DECRYPT);
-    return 0;
-  }
-
-  aead_aes_ctr_hmac_sha256_crypt(aes_ctx, out, in, in_len, nonce);
-
-  return 1;
-}
-
-static const EVP_AEAD aead_aes_128_ctr_hmac_sha256 = {
-    16 /* AES key */ + 32 /* HMAC key */,
-    12,                                    // nonce length
-    EVP_AEAD_AES_CTR_HMAC_SHA256_TAG_LEN,  // overhead
-    EVP_AEAD_AES_CTR_HMAC_SHA256_TAG_LEN,  // max tag length
-    0,                                     // seal_scatter_supports_extra_in
-
-    aead_aes_ctr_hmac_sha256_init,
-    NULL /* init_with_direction */,
-    aead_aes_ctr_hmac_sha256_cleanup,
-    NULL /* open */,
-    aead_aes_ctr_hmac_sha256_seal_scatter,
-    aead_aes_ctr_hmac_sha256_open_gather,
-    NULL /* get_iv */,
-    NULL /* tag_len */,
-};
-
-static const EVP_AEAD aead_aes_256_ctr_hmac_sha256 = {
-    32 /* AES key */ + 32 /* HMAC key */,
-    12,                                    // nonce length
-    EVP_AEAD_AES_CTR_HMAC_SHA256_TAG_LEN,  // overhead
-    EVP_AEAD_AES_CTR_HMAC_SHA256_TAG_LEN,  // max tag length
-    0,                                     // seal_scatter_supports_extra_in
-
-    aead_aes_ctr_hmac_sha256_init,
-    NULL /* init_with_direction */,
-    aead_aes_ctr_hmac_sha256_cleanup,
-    NULL /* open */,
-    aead_aes_ctr_hmac_sha256_seal_scatter,
-    aead_aes_ctr_hmac_sha256_open_gather,
-    NULL /* get_iv */,
-    NULL /* tag_len */,
-};
-
-const EVP_AEAD *EVP_aead_aes_128_ctr_hmac_sha256(void) {
-  return &aead_aes_128_ctr_hmac_sha256;
-}
-
-const EVP_AEAD *EVP_aead_aes_256_ctr_hmac_sha256(void) {
-  return &aead_aes_256_ctr_hmac_sha256;
-}
diff --git a/src/crypto/cipher/e_aeseax.cc b/src/crypto/cipher/e_aeseax.cc
deleted file mode 100644
index e4c8781..0000000
--- a/src/crypto/cipher/e_aeseax.cc
+++ /dev/null
@@ -1,289 +0,0 @@
-// Copyright 2025 The BoringSSL Authors
-//
-// 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
-//
-//     https://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 <openssl/aead.h>
-
-#include <assert.h>
-#include <stddef.h>
-#include <stdint.h>
-#include <sys/types.h>
-
-#include <openssl/aes.h>
-#include <openssl/base.h>
-#include <openssl/cipher.h>
-#include <openssl/crypto.h>
-#include <openssl/err.h>
-#include <openssl/mem.h>
-
-#include "../fipsmodule/cipher/internal.h"
-#include "../internal.h"
-
-// Implementation of AES-EAX defined in
-// https://www.iacr.org/archive/fse2004/30170391/30170391.pdf.
-
-#define EVP_AEAD_AES_EAX_TAG_LEN AES_BLOCK_SIZE
-
-struct aead_aes_eax_ctx {
-  union {
-    double align;
-    AES_KEY ks;
-  } ks;
-  uint8_t b[AES_BLOCK_SIZE];
-  uint8_t p[AES_BLOCK_SIZE];
-};
-
-static void mult_by_X(uint8_t out[AES_BLOCK_SIZE],
-                      const uint8_t in[AES_BLOCK_SIZE]) {
-  const crypto_word_t in_hi = CRYPTO_load_word_be(in);
-  for (size_t i = 0; i < AES_BLOCK_SIZE - 1; ++i) {
-    out[i] = (in[i] << 1) | (in[i + 1] >> 7);
-  }
-  // Carry over 0x87 if msb is 1, 0x00 if msb is 0.
-  out[AES_BLOCK_SIZE - 1] = in[AES_BLOCK_SIZE - 1] << 1;
-  const uint8_t p = 0x87;
-  constant_time_conditional_memxor(out + AES_BLOCK_SIZE - 1, &p, /*n=*/1,
-                                   constant_time_msb_w(in_hi));
-}
-
-static int aead_aes_eax_init(EVP_AEAD_CTX *ctx, const uint8_t *key,
-                             size_t key_len, size_t tag_len) {
-  struct aead_aes_eax_ctx *aes_ctx = (struct aead_aes_eax_ctx *)&ctx->state;
-
-  if (key_len != 16 && key_len != 32) {
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BAD_KEY_LENGTH);
-    return 0;
-  }
-
-  if (tag_len == EVP_AEAD_DEFAULT_TAG_LENGTH) {
-    tag_len = EVP_AEAD_AES_EAX_TAG_LEN;
-  }
-
-  if (tag_len != EVP_AEAD_AES_EAX_TAG_LEN) {
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_UNSUPPORTED_TAG_SIZE);
-    return 0;
-  }
-
-  if (AES_set_encrypt_key(key, /*bits=*/key_len * 8, &aes_ctx->ks.ks) != 0) {
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_AES_KEY_SETUP_FAILED);
-    return 0;
-  }
-  ctx->tag_len = tag_len;
-
-  // L <- Ek(0^n).
-  OPENSSL_memset(aes_ctx->b, 0, sizeof(aes_ctx->b));
-  AES_encrypt(aes_ctx->b, aes_ctx->b, &aes_ctx->ks.ks);
-  // B <- 2L.
-  mult_by_X(aes_ctx->b, aes_ctx->b);
-  // P <- 4L = 2B.
-  mult_by_X(aes_ctx->p, aes_ctx->b);
-  return 1;
-}
-
-static void aead_aes_eax_cleanup(EVP_AEAD_CTX *ctx) {}
-
-// Implements the CBK function in the paper.
-static void cbk_block(const struct aead_aes_eax_ctx *aes_ctx,
-                      const uint8_t in[AES_BLOCK_SIZE],
-                      uint8_t out[AES_BLOCK_SIZE]) {
-  CRYPTO_xor16(out, in, out);
-  AES_encrypt(out, out, &aes_ctx->ks.ks);
-}
-
-// Precondition: in_len <= AES_BLOCK_SIZE.
-static void pad(const struct aead_aes_eax_ctx *aes_ctx,
-                uint8_t out[AES_BLOCK_SIZE], const uint8_t *in, size_t in_len) {
-  assert(in_len <= AES_BLOCK_SIZE);
-  if (in_len == AES_BLOCK_SIZE) {
-    CRYPTO_xor16(out, aes_ctx->b, in);
-    return;
-  }
-  OPENSSL_memset(out, 0, AES_BLOCK_SIZE);
-  OPENSSL_memcpy(out, in, in_len);
-  out[in_len] = 0x80;
-  CRYPTO_xor16(out, aes_ctx->p, out);
-}
-
-static void omac(const struct aead_aes_eax_ctx *aes_ctx,
-                 uint8_t out[AES_BLOCK_SIZE], const uint8_t *in,
-                 size_t in_len) {
-  if (in_len == 0) {
-    // CBK(pad(M;B,P)) = CBK(B). Avoiding padding to skip a copy.
-    cbk_block(aes_ctx, aes_ctx->b, out);
-    return;
-  }
-  // CBK(M1) = Ek(M1 ^ 0^n)
-  AES_encrypt(out, out, &aes_ctx->ks.ks);
-  while (in_len > AES_BLOCK_SIZE) {
-    // Full blocks, no padding needed.
-    cbk_block(aes_ctx, in, out);
-    in += AES_BLOCK_SIZE;
-    in_len -= AES_BLOCK_SIZE;
-  }
-  // Last block to be padded.
-  uint8_t padded_block[AES_BLOCK_SIZE];
-  pad(aes_ctx, padded_block, in, in_len);
-  cbk_block(aes_ctx, padded_block, out);
-}
-
-static void omac_with_tag(const struct aead_aes_eax_ctx *aes_ctx,
-                          uint8_t out[AES_BLOCK_SIZE], const uint8_t *in,
-                          size_t in_len, int tag) {
-  OPENSSL_memset(out, 0, AES_BLOCK_SIZE);
-  out[AES_BLOCK_SIZE - 1] = tag;
-  omac(aes_ctx, out, in, in_len);
-}
-
-// Encrypts/decrypts |in_len| bytes from |in| to |out| using AES-CTR with |n| as
-// the IV.
-static void aes_ctr(const struct aead_aes_eax_ctx *aes_ctx, uint8_t *out,
-                    const uint8_t n[AES_BLOCK_SIZE], const uint8_t *in,
-                    size_t in_len) {
-  uint8_t ivec[AES_BLOCK_SIZE];
-  OPENSSL_memcpy(ivec, n, AES_BLOCK_SIZE);
-
-  uint8_t unused_ecount_buf[AES_BLOCK_SIZE];
-  unsigned int unused_num = 0;
-  AES_ctr128_encrypt(in, out, in_len, &aes_ctx->ks.ks, ivec, unused_ecount_buf,
-                     &unused_num);
-}
-
-static int aead_aes_eax_seal_scatter(
-    const EVP_AEAD_CTX *ctx, uint8_t *out, uint8_t *out_tag,
-    size_t *out_tag_len, size_t max_out_tag_len, const uint8_t *nonce,
-    size_t nonce_len, const uint8_t *in, size_t in_len, const uint8_t *extra_in,
-    size_t extra_in_len, const uint8_t *ad, size_t ad_len) {
-  assert(extra_in_len == 0);
-  // We use the full 128 bits of the nonce as counter, so no need to check the
-  // plaintext size.
-
-  if (max_out_tag_len < ctx->tag_len) {
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BUFFER_TOO_SMALL);
-    return 0;
-  }
-
-  if (nonce_len != 12 && nonce_len != 16) {
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_UNSUPPORTED_NONCE_SIZE);
-    return 0;
-  }
-
-  const struct aead_aes_eax_ctx *aes_ctx =
-      (struct aead_aes_eax_ctx *)&ctx->state;
-
-  // N <- OMAC(0 || nonce)
-  uint8_t n[AES_BLOCK_SIZE];
-  omac_with_tag(aes_ctx, n, nonce, nonce_len, /*tag=*/0);
-  // H <- OMAC(1 || ad)
-  uint8_t h[AES_BLOCK_SIZE];
-  omac_with_tag(aes_ctx, h, ad, ad_len, /*tag=*/1);
-
-  // C <- CTR^{N}_{K}(M)
-  aes_ctr(aes_ctx, out, n, in, in_len);
-
-  // MAC <- OMAC(2 || C)
-  omac_with_tag(aes_ctx, out_tag, out, in_len, /*tag=*/2);
-  // MAC <- N ^ C ^ H
-  CRYPTO_xor16(out_tag, n, out_tag);
-  CRYPTO_xor16(out_tag, h, out_tag);
-
-  *out_tag_len = ctx->tag_len;
-  return 1;
-}
-
-static int aead_aes_eax_open_gather(const EVP_AEAD_CTX *ctx, uint8_t *out,
-                                    const uint8_t *nonce, size_t nonce_len,
-                                    const uint8_t *in, size_t in_len,
-                                    const uint8_t *in_tag, size_t in_tag_len,
-                                    const uint8_t *ad, size_t ad_len) {
-  const uint64_t ad_len_64 = ad_len;
-  if (ad_len_64 >= (UINT64_C(1) << 61)) {
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_TOO_LARGE);
-    return 0;
-  }
-
-  const uint64_t in_len_64 = in_len;
-  if (in_tag_len != EVP_AEAD_AES_EAX_TAG_LEN ||
-      in_len_64 > (UINT64_C(1) << 36) + AES_BLOCK_SIZE) {
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BAD_DECRYPT);
-    return 0;
-  }
-
-  if (nonce_len != 12 && nonce_len != 16) {
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_UNSUPPORTED_NONCE_SIZE);
-    return 0;
-  }
-
-  const struct aead_aes_eax_ctx *aes_ctx =
-      (struct aead_aes_eax_ctx *)&ctx->state;
-
-  // N <- OMAC(0 || nonce)
-  uint8_t n[AES_BLOCK_SIZE];
-  omac_with_tag(aes_ctx, n, nonce, nonce_len, /*tag=*/0);
-  // H <- OMAC(1 || ad)
-  uint8_t h[AES_BLOCK_SIZE];
-  omac_with_tag(aes_ctx, h, ad, ad_len, /*tag=*/1);
-
-  // MAC <- OMAC(2 || C)
-  uint8_t mac[AES_BLOCK_SIZE];
-  omac_with_tag(aes_ctx, mac, in, in_len, /*tag=*/2);
-  // MAC <- N ^ C ^ H
-  CRYPTO_xor16(mac, n, mac);
-  CRYPTO_xor16(mac, h, mac);
-
-  if (CRYPTO_memcmp(mac, in_tag, in_tag_len) != 0) {
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BAD_DECRYPT);
-    return 0;
-  }
-
-  // M <- CTR^{N}_{K}(C)
-  aes_ctr(aes_ctx, out, n, in, in_len);
-  return 1;
-}
-
-static const EVP_AEAD aead_aes_128_eax = {
-    16,                        // AES key size
-    16,                        // nonce length
-    EVP_AEAD_AES_EAX_TAG_LEN,  // overhead
-    EVP_AEAD_AES_EAX_TAG_LEN,  // max tag length
-    0,                         // seal_scatter_supports_extra_in
-
-    aead_aes_eax_init,
-    NULL,  // init_with_direction
-    aead_aes_eax_cleanup,
-    NULL,  // open
-    aead_aes_eax_seal_scatter,
-    aead_aes_eax_open_gather,
-    NULL,  // get_iv
-    NULL,  // tag_len
-};
-
-static const EVP_AEAD aead_aes_256_eax = {
-    32,                        // AES key size
-    16,                        // nonce length
-    EVP_AEAD_AES_EAX_TAG_LEN,  // overhead
-    EVP_AEAD_AES_EAX_TAG_LEN,  // max tag length
-    0,                         // seal_scatter_supports_extra_in
-
-    aead_aes_eax_init,
-    NULL,  // init_with_direction
-    aead_aes_eax_cleanup,
-    NULL,  // open
-    aead_aes_eax_seal_scatter,
-    aead_aes_eax_open_gather,
-    NULL,  // get_iv
-    NULL,  // tag_len
-};
-
-const EVP_AEAD *EVP_aead_aes_128_eax(void) { return &aead_aes_128_eax; }
-
-const EVP_AEAD *EVP_aead_aes_256_eax(void) { return &aead_aes_256_eax; }
diff --git a/src/crypto/cipher/e_aesgcmsiv.cc b/src/crypto/cipher/e_aesgcmsiv.cc
deleted file mode 100644
index a7b38c6..0000000
--- a/src/crypto/cipher/e_aesgcmsiv.cc
+++ /dev/null
@@ -1,922 +0,0 @@
-// Copyright 2017 The BoringSSL Authors
-//
-// 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
-//
-//     https://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 <openssl/aead.h>
-
-#include <assert.h>
-
-#include <openssl/cipher.h>
-#include <openssl/crypto.h>
-#include <openssl/err.h>
-
-#include "../fipsmodule/aes/internal.h"
-#include "../fipsmodule/cipher/internal.h"
-#include "../internal.h"
-
-
-#define EVP_AEAD_AES_GCM_SIV_NONCE_LEN 12
-#define EVP_AEAD_AES_GCM_SIV_TAG_LEN 16
-
-namespace {
-// TODO(davidben): AES-GCM-SIV assembly is not correct for Windows. It must save
-// and restore xmm6 through xmm15.
-#if defined(OPENSSL_X86_64) && !defined(OPENSSL_NO_ASM) && \
-    !defined(OPENSSL_WINDOWS)
-#define AES_GCM_SIV_ASM
-
-// Optimised AES-GCM-SIV
-
-struct aead_aes_gcm_siv_asm_ctx {
-  alignas(16) uint8_t key[16 * 15];
-  int is_128_bit;
-};
-
-// The assembly code assumes 8-byte alignment of the EVP_AEAD_CTX's state, and
-// aligns to 16 bytes itself.
-static_assert(sizeof(((EVP_AEAD_CTX *)NULL)->state) + 8 >=
-                  sizeof(struct aead_aes_gcm_siv_asm_ctx),
-              "AEAD state is too small");
-static_assert(alignof(union evp_aead_ctx_st_state) >= 8,
-              "AEAD state has insufficient alignment");
-
-extern "C" {
-// aes128gcmsiv_aes_ks writes an AES-128 key schedule for |key| to
-// |out_expanded_key|.
-extern void aes128gcmsiv_aes_ks(const uint8_t key[16],
-                                uint8_t out_expanded_key[16 * 15]);
-
-// aes256gcmsiv_aes_ks writes an AES-256 key schedule for |key| to
-// |out_expanded_key|.
-extern void aes256gcmsiv_aes_ks(const uint8_t key[32],
-                                uint8_t out_expanded_key[16 * 15]);
-
-// aesgcmsiv_polyval_horner updates the POLYVAL value in |in_out_poly| to
-// include a number (|in_blocks|) of 16-byte blocks of data from |in|, given
-// the POLYVAL key in |key|.
-extern void aesgcmsiv_polyval_horner(const uint8_t in_out_poly[16],
-                                     const uint8_t key[16], const uint8_t *in,
-                                     size_t in_blocks);
-
-// aesgcmsiv_htable_init writes powers 1..8 of |auth_key| to |out_htable|.
-extern void aesgcmsiv_htable_init(uint8_t out_htable[16 * 8],
-                                  const uint8_t auth_key[16]);
-
-// aesgcmsiv_htable6_init writes powers 1..6 of |auth_key| to |out_htable|.
-extern void aesgcmsiv_htable6_init(uint8_t out_htable[16 * 6],
-                                   const uint8_t auth_key[16]);
-
-// aesgcmsiv_htable_polyval updates the POLYVAL value in |in_out_poly| to
-// include |in_len| bytes of data from |in|. (Where |in_len| must be a multiple
-// of 16.) It uses the precomputed powers of the key given in |htable|.
-extern void aesgcmsiv_htable_polyval(const uint8_t htable[16 * 8],
-                                     const uint8_t *in, size_t in_len,
-                                     uint8_t in_out_poly[16]);
-
-// aes128gcmsiv_dec decrypts |in_len| & ~15 bytes from |out| and writes them to
-// |in|. |in| and |out| may be equal, but must not otherwise alias.
-//
-// |in_out_calculated_tag_and_scratch|, on entry, must contain:
-//    1. The current value of the calculated tag, which will be updated during
-//       decryption and written back to the beginning of this buffer on exit.
-//    2. The claimed tag, which is needed to derive counter values.
-//
-// While decrypting, the whole of |in_out_calculated_tag_and_scratch| may be
-// used for other purposes. In order to decrypt and update the POLYVAL value, it
-// uses the expanded key from |key| and the table of powers in |htable|.
-extern void aes128gcmsiv_dec(const uint8_t *in, uint8_t *out,
-                             uint8_t in_out_calculated_tag_and_scratch[16 * 8],
-                             const uint8_t htable[16 * 6],
-                             const struct aead_aes_gcm_siv_asm_ctx *key,
-                             size_t in_len);
-
-// aes256gcmsiv_dec acts like |aes128gcmsiv_dec|, but for AES-256.
-extern void aes256gcmsiv_dec(const uint8_t *in, uint8_t *out,
-                             uint8_t in_out_calculated_tag_and_scratch[16 * 8],
-                             const uint8_t htable[16 * 6],
-                             const struct aead_aes_gcm_siv_asm_ctx *key,
-                             size_t in_len);
-
-// aes128gcmsiv_kdf performs the AES-GCM-SIV KDF given the expanded key from
-// |key_schedule| and the nonce in |nonce|. Note that, while only 12 bytes of
-// the nonce are used, 16 bytes are read and so the value must be
-// right-padded.
-extern void aes128gcmsiv_kdf(const uint8_t nonce[16],
-                             uint64_t out_key_material[8],
-                             const uint8_t *key_schedule);
-
-// aes256gcmsiv_kdf acts like |aes128gcmsiv_kdf|, but for AES-256.
-extern void aes256gcmsiv_kdf(const uint8_t nonce[16],
-                             uint64_t out_key_material[12],
-                             const uint8_t *key_schedule);
-
-// aes128gcmsiv_aes_ks_enc_x1 performs a key expansion of the AES-128 key in
-// |key|, writes the expanded key to |out_expanded_key| and encrypts a single
-// block from |in| to |out|.
-extern void aes128gcmsiv_aes_ks_enc_x1(const uint8_t in[16], uint8_t out[16],
-                                       uint8_t out_expanded_key[16 * 15],
-                                       const uint64_t key[2]);
-
-// aes256gcmsiv_aes_ks_enc_x1 acts like |aes128gcmsiv_aes_ks_enc_x1|, but for
-// AES-256.
-extern void aes256gcmsiv_aes_ks_enc_x1(const uint8_t in[16], uint8_t out[16],
-                                       uint8_t out_expanded_key[16 * 15],
-                                       const uint64_t key[4]);
-
-// aes128gcmsiv_ecb_enc_block encrypts a single block from |in| to |out| using
-// the expanded key in |expanded_key|.
-extern void aes128gcmsiv_ecb_enc_block(
-    const uint8_t in[16], uint8_t out[16],
-    const struct aead_aes_gcm_siv_asm_ctx *expanded_key);
-
-// aes256gcmsiv_ecb_enc_block acts like |aes128gcmsiv_ecb_enc_block|, but for
-// AES-256.
-extern void aes256gcmsiv_ecb_enc_block(
-    const uint8_t in[16], uint8_t out[16],
-    const struct aead_aes_gcm_siv_asm_ctx *expanded_key);
-
-// aes128gcmsiv_enc_msg_x4 encrypts |in_len| bytes from |in| to |out| using the
-// expanded key from |key|. (The value of |in_len| must be a multiple of 16.)
-// The |in| and |out| buffers may be equal but must not otherwise overlap. The
-// initial counter is constructed from the given |tag| as required by
-// AES-GCM-SIV.
-extern void aes128gcmsiv_enc_msg_x4(const uint8_t *in, uint8_t *out,
-                                    const uint8_t *tag,
-                                    const struct aead_aes_gcm_siv_asm_ctx *key,
-                                    size_t in_len);
-
-// aes256gcmsiv_enc_msg_x4 acts like |aes128gcmsiv_enc_msg_x4|, but for
-// AES-256.
-extern void aes256gcmsiv_enc_msg_x4(const uint8_t *in, uint8_t *out,
-                                    const uint8_t *tag,
-                                    const struct aead_aes_gcm_siv_asm_ctx *key,
-                                    size_t in_len);
-
-// aes128gcmsiv_enc_msg_x8 acts like |aes128gcmsiv_enc_msg_x4|, but is
-// optimised for longer messages.
-extern void aes128gcmsiv_enc_msg_x8(const uint8_t *in, uint8_t *out,
-                                    const uint8_t *tag,
-                                    const struct aead_aes_gcm_siv_asm_ctx *key,
-                                    size_t in_len);
-
-// aes256gcmsiv_enc_msg_x8 acts like |aes256gcmsiv_enc_msg_x4|, but is
-// optimised for longer messages.
-extern void aes256gcmsiv_enc_msg_x8(const uint8_t *in, uint8_t *out,
-                                    const uint8_t *tag,
-                                    const struct aead_aes_gcm_siv_asm_ctx *key,
-                                    size_t in_len);
-}
-
-// asm_ctx_from_ctx returns a 16-byte aligned context pointer from |ctx|.
-struct aead_aes_gcm_siv_asm_ctx *asm_ctx_from_ctx(const EVP_AEAD_CTX *ctx) {
-  // ctx->state must already be 8-byte aligned. Thus, at most, we may need to
-  // add eight to align it to 16 bytes.
-  const uintptr_t offset = ((uintptr_t)&ctx->state) & 8;
-  return (struct aead_aes_gcm_siv_asm_ctx *)(&ctx->state.opaque[offset]);
-}
-
-int aead_aes_gcm_siv_asm_init(EVP_AEAD_CTX *ctx, const uint8_t *key,
-                              size_t key_len, size_t tag_len) {
-  const size_t key_bits = key_len * 8;
-
-  if (key_bits != 128 && key_bits != 256) {
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BAD_KEY_LENGTH);
-    return 0;  // EVP_AEAD_CTX_init should catch this.
-  }
-
-  if (tag_len == EVP_AEAD_DEFAULT_TAG_LENGTH) {
-    tag_len = EVP_AEAD_AES_GCM_SIV_TAG_LEN;
-  }
-
-  if (tag_len != EVP_AEAD_AES_GCM_SIV_TAG_LEN) {
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_TAG_TOO_LARGE);
-    return 0;
-  }
-
-  struct aead_aes_gcm_siv_asm_ctx *gcm_siv_ctx = asm_ctx_from_ctx(ctx);
-  assert((((uintptr_t)gcm_siv_ctx) & 15) == 0);
-
-  if (key_bits == 128) {
-    aes128gcmsiv_aes_ks(key, &gcm_siv_ctx->key[0]);
-    gcm_siv_ctx->is_128_bit = 1;
-  } else {
-    aes256gcmsiv_aes_ks(key, &gcm_siv_ctx->key[0]);
-    gcm_siv_ctx->is_128_bit = 0;
-  }
-
-  ctx->tag_len = tag_len;
-
-  return 1;
-}
-
-void aead_aes_gcm_siv_asm_cleanup(EVP_AEAD_CTX *ctx) {}
-
-// gcm_siv_asm_polyval evaluates POLYVAL at |auth_key| on the given plaintext
-// and AD. The result is written to |out_tag|.
-void gcm_siv_asm_polyval(uint8_t out_tag[16], const uint8_t *in, size_t in_len,
-                         const uint8_t *ad, size_t ad_len,
-                         const uint8_t auth_key[16], const uint8_t nonce[12]) {
-  OPENSSL_memset(out_tag, 0, 16);
-  const size_t ad_blocks = ad_len / 16;
-  const size_t in_blocks = in_len / 16;
-  int htable_init = 0;
-  alignas(16) uint8_t htable[16 * 8];
-
-  if (ad_blocks > 8 || in_blocks > 8) {
-    htable_init = 1;
-    aesgcmsiv_htable_init(htable, auth_key);
-  }
-
-  if (htable_init) {
-    aesgcmsiv_htable_polyval(htable, ad, ad_len & ~15, out_tag);
-  } else {
-    aesgcmsiv_polyval_horner(out_tag, auth_key, ad, ad_blocks);
-  }
-
-  uint8_t scratch[16];
-  if (ad_len & 15) {
-    OPENSSL_memset(scratch, 0, sizeof(scratch));
-    OPENSSL_memcpy(scratch, &ad[ad_len & ~15], ad_len & 15);
-    aesgcmsiv_polyval_horner(out_tag, auth_key, scratch, 1);
-  }
-
-  if (htable_init) {
-    aesgcmsiv_htable_polyval(htable, in, in_len & ~15, out_tag);
-  } else {
-    aesgcmsiv_polyval_horner(out_tag, auth_key, in, in_blocks);
-  }
-
-  if (in_len & 15) {
-    OPENSSL_memset(scratch, 0, sizeof(scratch));
-    OPENSSL_memcpy(scratch, &in[in_len & ~15], in_len & 15);
-    aesgcmsiv_polyval_horner(out_tag, auth_key, scratch, 1);
-  }
-
-  uint8_t length_block[16];
-  CRYPTO_store_u64_le(length_block, ad_len * 8);
-  CRYPTO_store_u64_le(length_block + 8, in_len * 8);
-  aesgcmsiv_polyval_horner(out_tag, auth_key, length_block, 1);
-
-  for (size_t i = 0; i < 12; i++) {
-    out_tag[i] ^= nonce[i];
-  }
-
-  out_tag[15] &= 0x7f;
-}
-
-// aead_aes_gcm_siv_asm_crypt_last_block handles the encryption/decryption
-// (same thing in CTR mode) of the final block of a plaintext/ciphertext. It
-// writes |in_len| & 15 bytes to |out| + |in_len|, based on an initial counter
-// derived from |tag|.
-void aead_aes_gcm_siv_asm_crypt_last_block(
-    int is_128_bit, uint8_t *out, const uint8_t *in, size_t in_len,
-    const uint8_t tag[16],
-    const struct aead_aes_gcm_siv_asm_ctx *enc_key_expanded) {
-  alignas(16) uint8_t counter[16];
-  OPENSSL_memcpy(&counter, tag, sizeof(counter));
-  counter[15] |= 0x80;
-  CRYPTO_store_u32_le(counter, CRYPTO_load_u32_le(counter) + in_len / 16);
-
-  if (is_128_bit) {
-    aes128gcmsiv_ecb_enc_block(counter, counter, enc_key_expanded);
-  } else {
-    aes256gcmsiv_ecb_enc_block(counter, counter, enc_key_expanded);
-  }
-
-  const size_t last_bytes_offset = in_len & ~15;
-  const size_t last_bytes_len = in_len & 15;
-  uint8_t *last_bytes_out = &out[last_bytes_offset];
-  const uint8_t *last_bytes_in = &in[last_bytes_offset];
-  for (size_t i = 0; i < last_bytes_len; i++) {
-    last_bytes_out[i] = last_bytes_in[i] ^ counter[i];
-  }
-}
-
-// aead_aes_gcm_siv_kdf calculates the record encryption and authentication
-// keys given the |nonce|.
-void aead_aes_gcm_siv_kdf(int is_128_bit,
-                          const struct aead_aes_gcm_siv_asm_ctx *gcm_siv_ctx,
-                          uint64_t out_record_auth_key[2],
-                          uint64_t out_record_enc_key[4],
-                          const uint8_t nonce[12]) {
-  alignas(16) uint8_t padded_nonce[16];
-  OPENSSL_memcpy(padded_nonce, nonce, 12);
-
-  alignas(16) uint64_t key_material[12];
-  if (is_128_bit) {
-    aes128gcmsiv_kdf(padded_nonce, key_material, &gcm_siv_ctx->key[0]);
-    out_record_enc_key[0] = key_material[4];
-    out_record_enc_key[1] = key_material[6];
-  } else {
-    aes256gcmsiv_kdf(padded_nonce, key_material, &gcm_siv_ctx->key[0]);
-    out_record_enc_key[0] = key_material[4];
-    out_record_enc_key[1] = key_material[6];
-    out_record_enc_key[2] = key_material[8];
-    out_record_enc_key[3] = key_material[10];
-  }
-
-  out_record_auth_key[0] = key_material[0];
-  out_record_auth_key[1] = key_material[2];
-}
-
-int aead_aes_gcm_siv_asm_seal_scatter(
-    const EVP_AEAD_CTX *ctx, uint8_t *out, uint8_t *out_tag,
-    size_t *out_tag_len, size_t max_out_tag_len, const uint8_t *nonce,
-    size_t nonce_len, const uint8_t *in, size_t in_len, const uint8_t *extra_in,
-    size_t extra_in_len, const uint8_t *ad, size_t ad_len) {
-  const struct aead_aes_gcm_siv_asm_ctx *gcm_siv_ctx = asm_ctx_from_ctx(ctx);
-  const uint64_t in_len_64 = in_len;
-  const uint64_t ad_len_64 = ad_len;
-
-  if (in_len_64 > (UINT64_C(1) << 36) || ad_len_64 >= (UINT64_C(1) << 61)) {
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_TOO_LARGE);
-    return 0;
-  }
-
-  if (max_out_tag_len < EVP_AEAD_AES_GCM_SIV_TAG_LEN) {
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BUFFER_TOO_SMALL);
-    return 0;
-  }
-
-  if (nonce_len != EVP_AEAD_AES_GCM_SIV_NONCE_LEN) {
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_UNSUPPORTED_NONCE_SIZE);
-    return 0;
-  }
-
-  alignas(16) uint64_t record_auth_key[2];
-  alignas(16) uint64_t record_enc_key[4];
-  aead_aes_gcm_siv_kdf(gcm_siv_ctx->is_128_bit, gcm_siv_ctx, record_auth_key,
-                       record_enc_key, nonce);
-
-  alignas(16) uint8_t tag[16] = {0};
-  gcm_siv_asm_polyval(tag, in, in_len, ad, ad_len,
-                      (const uint8_t *)record_auth_key, nonce);
-
-  struct aead_aes_gcm_siv_asm_ctx enc_key_expanded;
-
-  if (gcm_siv_ctx->is_128_bit) {
-    aes128gcmsiv_aes_ks_enc_x1(tag, tag, &enc_key_expanded.key[0],
-                               record_enc_key);
-
-    if (in_len < 128) {
-      aes128gcmsiv_enc_msg_x4(in, out, tag, &enc_key_expanded, in_len & ~15);
-    } else {
-      aes128gcmsiv_enc_msg_x8(in, out, tag, &enc_key_expanded, in_len & ~15);
-    }
-  } else {
-    aes256gcmsiv_aes_ks_enc_x1(tag, tag, &enc_key_expanded.key[0],
-                               record_enc_key);
-
-    if (in_len < 128) {
-      aes256gcmsiv_enc_msg_x4(in, out, tag, &enc_key_expanded, in_len & ~15);
-    } else {
-      aes256gcmsiv_enc_msg_x8(in, out, tag, &enc_key_expanded, in_len & ~15);
-    }
-  }
-
-  if (in_len & 15) {
-    aead_aes_gcm_siv_asm_crypt_last_block(gcm_siv_ctx->is_128_bit, out, in,
-                                          in_len, tag, &enc_key_expanded);
-  }
-
-  OPENSSL_memcpy(out_tag, tag, sizeof(tag));
-  *out_tag_len = EVP_AEAD_AES_GCM_SIV_TAG_LEN;
-
-  return 1;
-}
-
-int aead_aes_gcm_siv_asm_open_gather(const EVP_AEAD_CTX *ctx, uint8_t *out,
-                                     const uint8_t *nonce, size_t nonce_len,
-                                     const uint8_t *in, size_t in_len,
-                                     const uint8_t *in_tag, size_t in_tag_len,
-                                     const uint8_t *ad, size_t ad_len) {
-  const uint64_t ad_len_64 = ad_len;
-  if (ad_len_64 >= (UINT64_C(1) << 61)) {
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_TOO_LARGE);
-    return 0;
-  }
-
-  const uint64_t in_len_64 = in_len;
-  if (in_len_64 > UINT64_C(1) << 36 ||
-      in_tag_len != EVP_AEAD_AES_GCM_SIV_TAG_LEN) {
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BAD_DECRYPT);
-    return 0;
-  }
-
-  if (nonce_len != EVP_AEAD_AES_GCM_SIV_NONCE_LEN) {
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_UNSUPPORTED_NONCE_SIZE);
-    return 0;
-  }
-
-  const struct aead_aes_gcm_siv_asm_ctx *gcm_siv_ctx = asm_ctx_from_ctx(ctx);
-
-  alignas(16) uint64_t record_auth_key[2];
-  alignas(16) uint64_t record_enc_key[4];
-  aead_aes_gcm_siv_kdf(gcm_siv_ctx->is_128_bit, gcm_siv_ctx, record_auth_key,
-                       record_enc_key, nonce);
-
-  struct aead_aes_gcm_siv_asm_ctx expanded_key;
-  if (gcm_siv_ctx->is_128_bit) {
-    aes128gcmsiv_aes_ks((const uint8_t *)record_enc_key, &expanded_key.key[0]);
-  } else {
-    aes256gcmsiv_aes_ks((const uint8_t *)record_enc_key, &expanded_key.key[0]);
-  }
-  // calculated_tag is 16*8 bytes, rather than 16 bytes, because
-  // aes[128|256]gcmsiv_dec uses the extra as scratch space.
-  alignas(16) uint8_t calculated_tag[16 * 8] = {0};
-
-  OPENSSL_memset(calculated_tag, 0, EVP_AEAD_AES_GCM_SIV_TAG_LEN);
-  const size_t ad_blocks = ad_len / 16;
-  aesgcmsiv_polyval_horner(calculated_tag, (const uint8_t *)record_auth_key, ad,
-                           ad_blocks);
-
-  uint8_t scratch[16];
-  if (ad_len & 15) {
-    OPENSSL_memset(scratch, 0, sizeof(scratch));
-    OPENSSL_memcpy(scratch, &ad[ad_len & ~15], ad_len & 15);
-    aesgcmsiv_polyval_horner(calculated_tag, (const uint8_t *)record_auth_key,
-                             scratch, 1);
-  }
-
-  alignas(16) uint8_t htable[16 * 6];
-  aesgcmsiv_htable6_init(htable, (const uint8_t *)record_auth_key);
-
-  // aes[128|256]gcmsiv_dec needs access to the claimed tag. So it's put into
-  // its scratch space.
-  memcpy(calculated_tag + 16, in_tag, EVP_AEAD_AES_GCM_SIV_TAG_LEN);
-  if (gcm_siv_ctx->is_128_bit) {
-    aes128gcmsiv_dec(in, out, calculated_tag, htable, &expanded_key, in_len);
-  } else {
-    aes256gcmsiv_dec(in, out, calculated_tag, htable, &expanded_key, in_len);
-  }
-
-  if (in_len & 15) {
-    aead_aes_gcm_siv_asm_crypt_last_block(gcm_siv_ctx->is_128_bit, out, in,
-                                          in_len, in_tag, &expanded_key);
-    OPENSSL_memset(scratch, 0, sizeof(scratch));
-    OPENSSL_memcpy(scratch, out + (in_len & ~15), in_len & 15);
-    aesgcmsiv_polyval_horner(calculated_tag, (const uint8_t *)record_auth_key,
-                             scratch, 1);
-  }
-
-  uint8_t length_block[16];
-  CRYPTO_store_u64_le(length_block, ad_len * 8);
-  CRYPTO_store_u64_le(length_block + 8, in_len * 8);
-  aesgcmsiv_polyval_horner(calculated_tag, (const uint8_t *)record_auth_key,
-                           length_block, 1);
-
-  for (size_t i = 0; i < 12; i++) {
-    calculated_tag[i] ^= nonce[i];
-  }
-
-  calculated_tag[15] &= 0x7f;
-
-  if (gcm_siv_ctx->is_128_bit) {
-    aes128gcmsiv_ecb_enc_block(calculated_tag, calculated_tag, &expanded_key);
-  } else {
-    aes256gcmsiv_ecb_enc_block(calculated_tag, calculated_tag, &expanded_key);
-  }
-
-  if (CRYPTO_memcmp(calculated_tag, in_tag, EVP_AEAD_AES_GCM_SIV_TAG_LEN) !=
-      0) {
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BAD_DECRYPT);
-    return 0;
-  }
-
-  return 1;
-}
-
-const EVP_AEAD aead_aes_128_gcm_siv_asm = {
-    16,                              // key length
-    EVP_AEAD_AES_GCM_SIV_NONCE_LEN,  // nonce length
-    EVP_AEAD_AES_GCM_SIV_TAG_LEN,    // overhead
-    EVP_AEAD_AES_GCM_SIV_TAG_LEN,    // max tag length
-    0,                               // seal_scatter_supports_extra_in
-
-    aead_aes_gcm_siv_asm_init,
-    NULL /* init_with_direction */,
-    aead_aes_gcm_siv_asm_cleanup,
-    NULL /* open */,
-    aead_aes_gcm_siv_asm_seal_scatter,
-    aead_aes_gcm_siv_asm_open_gather,
-    NULL /* get_iv */,
-    NULL /* tag_len */,
-};
-
-const EVP_AEAD aead_aes_256_gcm_siv_asm = {
-    32,                              // key length
-    EVP_AEAD_AES_GCM_SIV_NONCE_LEN,  // nonce length
-    EVP_AEAD_AES_GCM_SIV_TAG_LEN,    // overhead
-    EVP_AEAD_AES_GCM_SIV_TAG_LEN,    // max tag length
-    0,                               // seal_scatter_supports_extra_in
-
-    aead_aes_gcm_siv_asm_init,
-    NULL /* init_with_direction */,
-    aead_aes_gcm_siv_asm_cleanup,
-    NULL /* open */,
-    aead_aes_gcm_siv_asm_seal_scatter,
-    aead_aes_gcm_siv_asm_open_gather,
-    NULL /* get_iv */,
-    NULL /* tag_len */,
-};
-
-#endif  // X86_64 && !NO_ASM && !WINDOWS
-
-
-struct aead_aes_gcm_siv_ctx {
-  union {
-    double align;
-    AES_KEY ks;
-  } ks;
-  block128_f kgk_block;
-  unsigned is_256 : 1;
-};
-
-static_assert(sizeof(((EVP_AEAD_CTX *)NULL)->state) >=
-                  sizeof(struct aead_aes_gcm_siv_ctx),
-              "AEAD state is too small");
-static_assert(alignof(union evp_aead_ctx_st_state) >=
-                  alignof(struct aead_aes_gcm_siv_ctx),
-              "AEAD state has insufficient alignment");
-
-int aead_aes_gcm_siv_init(EVP_AEAD_CTX *ctx, const uint8_t *key, size_t key_len,
-                          size_t tag_len) {
-  const size_t key_bits = key_len * 8;
-
-  if (key_bits != 128 && key_bits != 256) {
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BAD_KEY_LENGTH);
-    return 0;  // EVP_AEAD_CTX_init should catch this.
-  }
-
-  if (tag_len == EVP_AEAD_DEFAULT_TAG_LENGTH) {
-    tag_len = EVP_AEAD_AES_GCM_SIV_TAG_LEN;
-  }
-  if (tag_len != EVP_AEAD_AES_GCM_SIV_TAG_LEN) {
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_TAG_TOO_LARGE);
-    return 0;
-  }
-
-  struct aead_aes_gcm_siv_ctx *gcm_siv_ctx =
-      (struct aead_aes_gcm_siv_ctx *)&ctx->state;
-  OPENSSL_memset(gcm_siv_ctx, 0, sizeof(struct aead_aes_gcm_siv_ctx));
-
-  aes_ctr_set_key(&gcm_siv_ctx->ks.ks, NULL, &gcm_siv_ctx->kgk_block, key,
-                  key_len);
-  gcm_siv_ctx->is_256 = (key_len == 32);
-  ctx->tag_len = tag_len;
-
-  return 1;
-}
-
-void aead_aes_gcm_siv_cleanup(EVP_AEAD_CTX *ctx) {}
-
-// gcm_siv_crypt encrypts (or decrypts—it's the same thing) |in_len| bytes from
-// |in| to |out|, using the block function |enc_block| with |key| in counter
-// mode, starting at |initial_counter|. This differs from the traditional
-// counter mode code in that the counter is handled little-endian, only the
-// first four bytes are used and the GCM-SIV tweak to the final byte is
-// applied. The |in| and |out| pointers may be equal but otherwise must not
-// alias.
-void gcm_siv_crypt(uint8_t *out, const uint8_t *in, size_t in_len,
-                   const uint8_t initial_counter[AES_BLOCK_SIZE],
-                   block128_f enc_block, const AES_KEY *key) {
-  uint8_t counter[16];
-
-  OPENSSL_memcpy(counter, initial_counter, AES_BLOCK_SIZE);
-  counter[15] |= 0x80;
-
-  for (size_t done = 0; done < in_len;) {
-    uint8_t keystream[AES_BLOCK_SIZE];
-    enc_block(counter, keystream, key);
-    CRYPTO_store_u32_le(counter, CRYPTO_load_u32_le(counter) + 1);
-
-    size_t todo = AES_BLOCK_SIZE;
-    if (in_len - done < todo) {
-      todo = in_len - done;
-    }
-
-    for (size_t i = 0; i < todo; i++) {
-      out[done + i] = keystream[i] ^ in[done + i];
-    }
-
-    done += todo;
-  }
-}
-
-
-// POLYVAL.
-//
-// POLYVAL is a polynomial authenticator that operates over a field very
-// similar to the one that GHASH uses. See
-// https://www.rfc-editor.org/rfc/rfc8452.html#section-3.
-
-// POLYVAL(H, X_1, ..., X_n) =
-// ByteReverse(GHASH(mulX_GHASH(ByteReverse(H)), ByteReverse(X_1), ...,
-// ByteReverse(X_n))).
-//
-// See https://www.rfc-editor.org/rfc/rfc8452.html#appendix-A.
-
-struct polyval_ctx {
-  uint8_t S[16];
-  u128 Htable[16];
-  gmult_func gmult;
-  ghash_func ghash;
-};
-
-// byte_reverse reverses the order of the bytes in |b->c|.
-void byte_reverse(uint8_t b[16]) {
-  uint64_t hi = CRYPTO_load_u64_le(b);
-  uint64_t lo = CRYPTO_load_u64_le(b + 8);
-  CRYPTO_store_u64_le(b, CRYPTO_bswap8(lo));
-  CRYPTO_store_u64_le(b + 8, CRYPTO_bswap8(hi));
-}
-
-// reverse_and_mulX_ghash interprets |b| as a reversed element of the GHASH
-// field, multiplies that by 'x' and serialises the result back into |b|, but
-// with GHASH's backwards bit ordering.
-void reverse_and_mulX_ghash(uint8_t b[16]) {
-  uint64_t hi = CRYPTO_load_u64_le(b);
-  uint64_t lo = CRYPTO_load_u64_le(b + 8);
-  const crypto_word_t carry = constant_time_eq_w(hi & 1, 1);
-  hi >>= 1;
-  hi |= lo << 63;
-  lo >>= 1;
-  lo ^= ((uint64_t)constant_time_select_w(carry, 0xe1, 0)) << 56;
-
-  CRYPTO_store_u64_le(b, CRYPTO_bswap8(lo));
-  CRYPTO_store_u64_le(b + 8, CRYPTO_bswap8(hi));
-}
-
-void crypto_polyval_init(struct polyval_ctx *ctx, const uint8_t key[16]) {
-  alignas(8) uint8_t H[16];
-  OPENSSL_memcpy(H, key, 16);
-  reverse_and_mulX_ghash(H);
-
-  CRYPTO_ghash_init(&ctx->gmult, &ctx->ghash, ctx->Htable, H);
-  OPENSSL_memset(&ctx->S, 0, sizeof(ctx->S));
-}
-
-void crypto_polyval_update_blocks(struct polyval_ctx *ctx, const uint8_t *in,
-                                  size_t in_len) {
-  assert((in_len & 15) == 0);
-  alignas(8) uint8_t buf[32 * 16];
-
-  while (in_len > 0) {
-    size_t todo = in_len;
-    if (todo > sizeof(buf)) {
-      todo = sizeof(buf);
-    }
-    OPENSSL_memcpy(buf, in, todo);
-    in += todo;
-    in_len -= todo;
-
-    size_t blocks = todo / 16;
-    for (size_t i = 0; i < blocks; i++) {
-      byte_reverse(buf + 16 * i);
-    }
-
-    ctx->ghash(ctx->S, ctx->Htable, buf, todo);
-  }
-}
-
-void crypto_polyval_finish(const struct polyval_ctx *ctx, uint8_t out[16]) {
-  OPENSSL_memcpy(out, &ctx->S, 16);
-  byte_reverse(out);
-}
-
-// gcm_siv_polyval evaluates POLYVAL at |auth_key| on the given plaintext and
-// AD. The result is written to |out_tag|.
-void gcm_siv_polyval(uint8_t out_tag[16], const uint8_t *in, size_t in_len,
-                     const uint8_t *ad, size_t ad_len,
-                     const uint8_t auth_key[16],
-                     const uint8_t nonce[EVP_AEAD_AES_GCM_SIV_NONCE_LEN]) {
-  struct polyval_ctx polyval_ctx;
-  crypto_polyval_init(&polyval_ctx, auth_key);
-
-  crypto_polyval_update_blocks(&polyval_ctx, ad, ad_len & ~15);
-
-  uint8_t scratch[16];
-  if (ad_len & 15) {
-    OPENSSL_memset(scratch, 0, sizeof(scratch));
-    OPENSSL_memcpy(scratch, &ad[ad_len & ~15], ad_len & 15);
-    crypto_polyval_update_blocks(&polyval_ctx, scratch, sizeof(scratch));
-  }
-
-  crypto_polyval_update_blocks(&polyval_ctx, in, in_len & ~15);
-  if (in_len & 15) {
-    OPENSSL_memset(scratch, 0, sizeof(scratch));
-    OPENSSL_memcpy(scratch, &in[in_len & ~15], in_len & 15);
-    crypto_polyval_update_blocks(&polyval_ctx, scratch, sizeof(scratch));
-  }
-
-  uint8_t length_block[16];
-  CRYPTO_store_u64_le(length_block, ((uint64_t)ad_len) * 8);
-  CRYPTO_store_u64_le(length_block + 8, ((uint64_t)in_len) * 8);
-  crypto_polyval_update_blocks(&polyval_ctx, length_block,
-                               sizeof(length_block));
-
-  crypto_polyval_finish(&polyval_ctx, out_tag);
-  for (size_t i = 0; i < EVP_AEAD_AES_GCM_SIV_NONCE_LEN; i++) {
-    out_tag[i] ^= nonce[i];
-  }
-  out_tag[15] &= 0x7f;
-}
-
-// gcm_siv_record_keys contains the keys used for a specific GCM-SIV record.
-struct gcm_siv_record_keys {
-  uint8_t auth_key[16];
-  union {
-    double align;
-    AES_KEY ks;
-  } enc_key;
-  block128_f enc_block;
-};
-
-// gcm_siv_keys calculates the keys for a specific GCM-SIV record with the
-// given nonce and writes them to |*out_keys|.
-void gcm_siv_keys(const struct aead_aes_gcm_siv_ctx *gcm_siv_ctx,
-                  struct gcm_siv_record_keys *out_keys,
-                  const uint8_t nonce[EVP_AEAD_AES_GCM_SIV_NONCE_LEN]) {
-  const AES_KEY *const key = &gcm_siv_ctx->ks.ks;
-  uint8_t key_material[(128 /* POLYVAL key */ + 256 /* max AES key */) / 8];
-  const size_t blocks_needed = gcm_siv_ctx->is_256 ? 6 : 4;
-
-  uint8_t counter[AES_BLOCK_SIZE];
-  OPENSSL_memset(counter, 0, AES_BLOCK_SIZE - EVP_AEAD_AES_GCM_SIV_NONCE_LEN);
-  OPENSSL_memcpy(counter + AES_BLOCK_SIZE - EVP_AEAD_AES_GCM_SIV_NONCE_LEN,
-                 nonce, EVP_AEAD_AES_GCM_SIV_NONCE_LEN);
-  for (size_t i = 0; i < blocks_needed; i++) {
-    counter[0] = i;
-
-    uint8_t ciphertext[AES_BLOCK_SIZE];
-    gcm_siv_ctx->kgk_block(counter, ciphertext, key);
-    OPENSSL_memcpy(&key_material[i * 8], ciphertext, 8);
-  }
-
-  OPENSSL_memcpy(out_keys->auth_key, key_material, 16);
-  // Note the |ctr128_f| function uses a big-endian couner, while AES-GCM-SIV
-  // uses a little-endian counter. We ignore the return value and only use
-  // |block128_f|. This has a significant performance cost for the fallback
-  // bitsliced AES implementations (bsaes and aes_nohw).
-  //
-  // We currently do not consider AES-GCM-SIV to be performance-sensitive on
-  // client hardware. If this changes, we can write little-endian |ctr128_f|
-  // functions.
-  aes_ctr_set_key(&out_keys->enc_key.ks, NULL, &out_keys->enc_block,
-                  key_material + 16, gcm_siv_ctx->is_256 ? 32 : 16);
-}
-
-int aead_aes_gcm_siv_seal_scatter(const EVP_AEAD_CTX *ctx, uint8_t *out,
-                                  uint8_t *out_tag, size_t *out_tag_len,
-                                  size_t max_out_tag_len, const uint8_t *nonce,
-                                  size_t nonce_len, const uint8_t *in,
-                                  size_t in_len, const uint8_t *extra_in,
-                                  size_t extra_in_len, const uint8_t *ad,
-                                  size_t ad_len) {
-  const struct aead_aes_gcm_siv_ctx *gcm_siv_ctx =
-      (struct aead_aes_gcm_siv_ctx *)&ctx->state;
-  const uint64_t in_len_64 = in_len;
-  const uint64_t ad_len_64 = ad_len;
-
-  if (in_len + EVP_AEAD_AES_GCM_SIV_TAG_LEN < in_len ||
-      in_len_64 > (UINT64_C(1) << 36) || ad_len_64 >= (UINT64_C(1) << 61)) {
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_TOO_LARGE);
-    return 0;
-  }
-
-  if (max_out_tag_len < EVP_AEAD_AES_GCM_SIV_TAG_LEN) {
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BUFFER_TOO_SMALL);
-    return 0;
-  }
-
-  if (nonce_len != EVP_AEAD_AES_GCM_SIV_NONCE_LEN) {
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_UNSUPPORTED_NONCE_SIZE);
-    return 0;
-  }
-
-  struct gcm_siv_record_keys keys;
-  gcm_siv_keys(gcm_siv_ctx, &keys, nonce);
-
-  uint8_t tag[16];
-  gcm_siv_polyval(tag, in, in_len, ad, ad_len, keys.auth_key, nonce);
-  keys.enc_block(tag, tag, &keys.enc_key.ks);
-
-  gcm_siv_crypt(out, in, in_len, tag, keys.enc_block, &keys.enc_key.ks);
-
-  OPENSSL_memcpy(out_tag, tag, EVP_AEAD_AES_GCM_SIV_TAG_LEN);
-  *out_tag_len = EVP_AEAD_AES_GCM_SIV_TAG_LEN;
-
-  return 1;
-}
-
-int aead_aes_gcm_siv_open_gather(const EVP_AEAD_CTX *ctx, uint8_t *out,
-                                 const uint8_t *nonce, size_t nonce_len,
-                                 const uint8_t *in, size_t in_len,
-                                 const uint8_t *in_tag, size_t in_tag_len,
-                                 const uint8_t *ad, size_t ad_len) {
-  const uint64_t ad_len_64 = ad_len;
-  if (ad_len_64 >= (UINT64_C(1) << 61)) {
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_TOO_LARGE);
-    return 0;
-  }
-
-  const uint64_t in_len_64 = in_len;
-  if (in_tag_len != EVP_AEAD_AES_GCM_SIV_TAG_LEN ||
-      in_len_64 > (UINT64_C(1) << 36) + AES_BLOCK_SIZE) {
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BAD_DECRYPT);
-    return 0;
-  }
-
-  if (nonce_len != EVP_AEAD_AES_GCM_SIV_NONCE_LEN) {
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_UNSUPPORTED_NONCE_SIZE);
-    return 0;
-  }
-
-  const struct aead_aes_gcm_siv_ctx *gcm_siv_ctx =
-      (struct aead_aes_gcm_siv_ctx *)&ctx->state;
-
-  struct gcm_siv_record_keys keys;
-  gcm_siv_keys(gcm_siv_ctx, &keys, nonce);
-
-  gcm_siv_crypt(out, in, in_len, in_tag, keys.enc_block, &keys.enc_key.ks);
-
-  uint8_t expected_tag[EVP_AEAD_AES_GCM_SIV_TAG_LEN];
-  gcm_siv_polyval(expected_tag, out, in_len, ad, ad_len, keys.auth_key, nonce);
-  keys.enc_block(expected_tag, expected_tag, &keys.enc_key.ks);
-
-  if (CRYPTO_memcmp(expected_tag, in_tag, sizeof(expected_tag)) != 0) {
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BAD_DECRYPT);
-    return 0;
-  }
-
-  return 1;
-}
-
-const EVP_AEAD aead_aes_128_gcm_siv = {
-    16,                              // key length
-    EVP_AEAD_AES_GCM_SIV_NONCE_LEN,  // nonce length
-    EVP_AEAD_AES_GCM_SIV_TAG_LEN,    // overhead
-    EVP_AEAD_AES_GCM_SIV_TAG_LEN,    // max tag length
-    0,                               // seal_scatter_supports_extra_in
-
-    aead_aes_gcm_siv_init,
-    NULL /* init_with_direction */,
-    aead_aes_gcm_siv_cleanup,
-    NULL /* open */,
-    aead_aes_gcm_siv_seal_scatter,
-    aead_aes_gcm_siv_open_gather,
-    NULL /* get_iv */,
-    NULL /* tag_len */,
-};
-
-const EVP_AEAD aead_aes_256_gcm_siv = {
-    32,                              // key length
-    EVP_AEAD_AES_GCM_SIV_NONCE_LEN,  // nonce length
-    EVP_AEAD_AES_GCM_SIV_TAG_LEN,    // overhead
-    EVP_AEAD_AES_GCM_SIV_TAG_LEN,    // max tag length
-    0,                               // seal_scatter_supports_extra_in
-
-    aead_aes_gcm_siv_init,
-    NULL /* init_with_direction */,
-    aead_aes_gcm_siv_cleanup,
-    NULL /* open */,
-    aead_aes_gcm_siv_seal_scatter,
-    aead_aes_gcm_siv_open_gather,
-    NULL /* get_iv */,
-    NULL /* tag_len */,
-};
-}  // namespace
-
-#if defined(AES_GCM_SIV_ASM)
-
-const EVP_AEAD *EVP_aead_aes_128_gcm_siv(void) {
-  if (CRYPTO_is_AVX_capable() && CRYPTO_is_AESNI_capable()) {
-    return &aead_aes_128_gcm_siv_asm;
-  }
-  return &aead_aes_128_gcm_siv;
-}
-
-const EVP_AEAD *EVP_aead_aes_256_gcm_siv(void) {
-  if (CRYPTO_is_AVX_capable() && CRYPTO_is_AESNI_capable()) {
-    return &aead_aes_256_gcm_siv_asm;
-  }
-  return &aead_aes_256_gcm_siv;
-}
-
-#else
-
-const EVP_AEAD *EVP_aead_aes_128_gcm_siv(void) { return &aead_aes_128_gcm_siv; }
-
-const EVP_AEAD *EVP_aead_aes_256_gcm_siv(void) { return &aead_aes_256_gcm_siv; }
-
-#endif  // AES_GCM_SIV_ASM
diff --git a/src/crypto/cipher/e_chacha20poly1305.cc b/src/crypto/cipher/e_chacha20poly1305.cc
deleted file mode 100644
index d1a9b34..0000000
--- a/src/crypto/cipher/e_chacha20poly1305.cc
+++ /dev/null
@@ -1,341 +0,0 @@
-// Copyright 2014 The BoringSSL Authors
-//
-// 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
-//
-//     https://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 <openssl/aead.h>
-
-#include <assert.h>
-#include <string.h>
-
-#include <openssl/chacha.h>
-#include <openssl/cipher.h>
-#include <openssl/err.h>
-#include <openssl/mem.h>
-#include <openssl/poly1305.h>
-
-#include "internal.h"
-#include "../chacha/internal.h"
-#include "../fipsmodule/cipher/internal.h"
-#include "../internal.h"
-
-struct aead_chacha20_poly1305_ctx {
-  uint8_t key[32];
-};
-
-static_assert(sizeof(((EVP_AEAD_CTX *)NULL)->state) >=
-                  sizeof(struct aead_chacha20_poly1305_ctx),
-              "AEAD state is too small");
-static_assert(alignof(union evp_aead_ctx_st_state) >=
-                  alignof(struct aead_chacha20_poly1305_ctx),
-              "AEAD state has insufficient alignment");
-
-static int aead_chacha20_poly1305_init(EVP_AEAD_CTX *ctx, const uint8_t *key,
-                                       size_t key_len, size_t tag_len) {
-  struct aead_chacha20_poly1305_ctx *c20_ctx =
-      (struct aead_chacha20_poly1305_ctx *)&ctx->state;
-
-  if (tag_len == 0) {
-    tag_len = POLY1305_TAG_LEN;
-  }
-
-  if (tag_len > POLY1305_TAG_LEN) {
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_TOO_LARGE);
-    return 0;
-  }
-
-  if (key_len != sizeof(c20_ctx->key)) {
-    return 0;  // internal error - EVP_AEAD_CTX_init should catch this.
-  }
-
-  OPENSSL_memcpy(c20_ctx->key, key, key_len);
-  ctx->tag_len = tag_len;
-
-  return 1;
-}
-
-static void aead_chacha20_poly1305_cleanup(EVP_AEAD_CTX *ctx) {}
-
-static void poly1305_update_length(poly1305_state *poly1305, size_t data_len) {
-  uint8_t length_bytes[8];
-
-  for (unsigned i = 0; i < sizeof(length_bytes); i++) {
-    length_bytes[i] = data_len;
-    data_len >>= 8;
-  }
-
-  CRYPTO_poly1305_update(poly1305, length_bytes, sizeof(length_bytes));
-}
-
-// calc_tag fills |tag| with the authentication tag for the given inputs.
-static void calc_tag(uint8_t tag[POLY1305_TAG_LEN], const uint8_t *key,
-                     const uint8_t nonce[12], const uint8_t *ad, size_t ad_len,
-                     const uint8_t *ciphertext, size_t ciphertext_len,
-                     const uint8_t *ciphertext_extra,
-                     size_t ciphertext_extra_len) {
-  alignas(16) uint8_t poly1305_key[32];
-  OPENSSL_memset(poly1305_key, 0, sizeof(poly1305_key));
-  CRYPTO_chacha_20(poly1305_key, poly1305_key, sizeof(poly1305_key), key, nonce,
-                   0);
-
-  static const uint8_t padding[16] = { 0 };  // Padding is all zeros.
-  poly1305_state ctx;
-  CRYPTO_poly1305_init(&ctx, poly1305_key);
-  CRYPTO_poly1305_update(&ctx, ad, ad_len);
-  if (ad_len % 16 != 0) {
-    CRYPTO_poly1305_update(&ctx, padding, sizeof(padding) - (ad_len % 16));
-  }
-  CRYPTO_poly1305_update(&ctx, ciphertext, ciphertext_len);
-  CRYPTO_poly1305_update(&ctx, ciphertext_extra, ciphertext_extra_len);
-  const size_t ciphertext_total = ciphertext_len + ciphertext_extra_len;
-  if (ciphertext_total % 16 != 0) {
-    CRYPTO_poly1305_update(&ctx, padding,
-                           sizeof(padding) - (ciphertext_total % 16));
-  }
-  poly1305_update_length(&ctx, ad_len);
-  poly1305_update_length(&ctx, ciphertext_total);
-  CRYPTO_poly1305_finish(&ctx, tag);
-}
-
-static int chacha20_poly1305_seal_scatter(
-    const uint8_t *key, uint8_t *out, uint8_t *out_tag,
-    size_t *out_tag_len, size_t max_out_tag_len, const uint8_t *nonce,
-    size_t nonce_len, const uint8_t *in, size_t in_len, const uint8_t *extra_in,
-    size_t extra_in_len, const uint8_t *ad, size_t ad_len, size_t tag_len) {
-  if (extra_in_len + tag_len < tag_len) {
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_TOO_LARGE);
-    return 0;
-  }
-  if (max_out_tag_len < tag_len + extra_in_len) {
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BUFFER_TOO_SMALL);
-    return 0;
-  }
-  if (nonce_len != 12) {
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_UNSUPPORTED_NONCE_SIZE);
-    return 0;
-  }
-
-  // |CRYPTO_chacha_20| uses a 32-bit block counter. Therefore we disallow
-  // individual operations that work on more than 256GB at a time.
-  // |in_len_64| is needed because, on 32-bit platforms, size_t is only
-  // 32-bits and this produces a warning because it's always false.
-  // Casting to uint64_t inside the conditional is not sufficient to stop
-  // the warning.
-  const uint64_t in_len_64 = in_len;
-  if (in_len_64 >= (UINT64_C(1) << 32) * 64 - 64) {
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_TOO_LARGE);
-    return 0;
-  }
-
-  if (max_out_tag_len < tag_len) {
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BUFFER_TOO_SMALL);
-    return 0;
-  }
-
-  // The the extra input is given, it is expected to be very short and so is
-  // encrypted byte-by-byte first.
-  if (extra_in_len) {
-    static const size_t kChaChaBlockSize = 64;
-    uint32_t block_counter = (uint32_t)(1 + (in_len / kChaChaBlockSize));
-    size_t offset = in_len % kChaChaBlockSize;
-    uint8_t block[64 /* kChaChaBlockSize */];
-
-    for (size_t done = 0; done < extra_in_len; block_counter++) {
-      memset(block, 0, sizeof(block));
-      CRYPTO_chacha_20(block, block, sizeof(block), key, nonce,
-                       block_counter);
-      for (size_t i = offset; i < sizeof(block) && done < extra_in_len;
-           i++, done++) {
-        out_tag[done] = extra_in[done] ^ block[i];
-      }
-      offset = 0;
-    }
-  }
-
-  union chacha20_poly1305_seal_data data;
-  if (chacha20_poly1305_asm_capable()) {
-    OPENSSL_memcpy(data.in.key, key, 32);
-    data.in.counter = 0;
-    OPENSSL_memcpy(data.in.nonce, nonce, 12);
-    data.in.extra_ciphertext = out_tag;
-    data.in.extra_ciphertext_len = extra_in_len;
-    chacha20_poly1305_seal(out, in, in_len, ad, ad_len, &data);
-  } else {
-    CRYPTO_chacha_20(out, in, in_len, key, nonce, 1);
-    calc_tag(data.out.tag, key, nonce, ad, ad_len, out, in_len, out_tag,
-             extra_in_len);
-  }
-
-  OPENSSL_memcpy(out_tag + extra_in_len, data.out.tag, tag_len);
-  *out_tag_len = extra_in_len + tag_len;
-  return 1;
-}
-
-static int aead_chacha20_poly1305_seal_scatter(
-    const EVP_AEAD_CTX *ctx, uint8_t *out, uint8_t *out_tag,
-    size_t *out_tag_len, size_t max_out_tag_len, const uint8_t *nonce,
-    size_t nonce_len, const uint8_t *in, size_t in_len, const uint8_t *extra_in,
-    size_t extra_in_len, const uint8_t *ad, size_t ad_len) {
-  const struct aead_chacha20_poly1305_ctx *c20_ctx =
-      (struct aead_chacha20_poly1305_ctx *)&ctx->state;
-
-  return chacha20_poly1305_seal_scatter(
-      c20_ctx->key, out, out_tag, out_tag_len, max_out_tag_len, nonce,
-      nonce_len, in, in_len, extra_in, extra_in_len, ad, ad_len, ctx->tag_len);
-}
-
-static int aead_xchacha20_poly1305_seal_scatter(
-    const EVP_AEAD_CTX *ctx, uint8_t *out, uint8_t *out_tag,
-    size_t *out_tag_len, size_t max_out_tag_len, const uint8_t *nonce,
-    size_t nonce_len, const uint8_t *in, size_t in_len, const uint8_t *extra_in,
-    size_t extra_in_len, const uint8_t *ad, size_t ad_len) {
-  const struct aead_chacha20_poly1305_ctx *c20_ctx =
-      (struct aead_chacha20_poly1305_ctx *)&ctx->state;
-
-  if (nonce_len != 24) {
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_UNSUPPORTED_NONCE_SIZE);
-    return 0;
-  }
-
-  alignas(4) uint8_t derived_key[32];
-  alignas(4) uint8_t derived_nonce[12];
-  CRYPTO_hchacha20(derived_key, c20_ctx->key, nonce);
-  OPENSSL_memset(derived_nonce, 0, 4);
-  OPENSSL_memcpy(&derived_nonce[4], &nonce[16], 8);
-
-  return chacha20_poly1305_seal_scatter(
-      derived_key, out, out_tag, out_tag_len, max_out_tag_len,
-      derived_nonce, sizeof(derived_nonce), in, in_len, extra_in, extra_in_len,
-      ad, ad_len, ctx->tag_len);
-}
-
-static int chacha20_poly1305_open_gather(
-    const uint8_t *key, uint8_t *out, const uint8_t *nonce,
-    size_t nonce_len, const uint8_t *in, size_t in_len, const uint8_t *in_tag,
-    size_t in_tag_len, const uint8_t *ad, size_t ad_len, size_t tag_len) {
-  if (nonce_len != 12) {
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_UNSUPPORTED_NONCE_SIZE);
-    return 0;
-  }
-
-  if (in_tag_len != tag_len) {
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BAD_DECRYPT);
-    return 0;
-  }
-
-  // |CRYPTO_chacha_20| uses a 32-bit block counter. Therefore we disallow
-  // individual operations that work on more than 256GB at a time.
-  // |in_len_64| is needed because, on 32-bit platforms, size_t is only
-  // 32-bits and this produces a warning because it's always false.
-  // Casting to uint64_t inside the conditional is not sufficient to stop
-  // the warning.
-  const uint64_t in_len_64 = in_len;
-  if (in_len_64 >= (UINT64_C(1) << 32) * 64 - 64) {
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_TOO_LARGE);
-    return 0;
-  }
-
-  union chacha20_poly1305_open_data data;
-  if (chacha20_poly1305_asm_capable()) {
-    OPENSSL_memcpy(data.in.key, key, 32);
-    data.in.counter = 0;
-    OPENSSL_memcpy(data.in.nonce, nonce, 12);
-    chacha20_poly1305_open(out, in, in_len, ad, ad_len, &data);
-  } else {
-    calc_tag(data.out.tag, key, nonce, ad, ad_len, in, in_len, NULL, 0);
-    CRYPTO_chacha_20(out, in, in_len, key, nonce, 1);
-  }
-
-  if (CRYPTO_memcmp(data.out.tag, in_tag, tag_len) != 0) {
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BAD_DECRYPT);
-    return 0;
-  }
-
-  return 1;
-}
-
-static int aead_chacha20_poly1305_open_gather(
-    const EVP_AEAD_CTX *ctx, uint8_t *out, const uint8_t *nonce,
-    size_t nonce_len, const uint8_t *in, size_t in_len, const uint8_t *in_tag,
-    size_t in_tag_len, const uint8_t *ad, size_t ad_len) {
-  const struct aead_chacha20_poly1305_ctx *c20_ctx =
-      (struct aead_chacha20_poly1305_ctx *)&ctx->state;
-
-  return chacha20_poly1305_open_gather(c20_ctx->key, out, nonce, nonce_len, in,
-                                       in_len, in_tag, in_tag_len, ad, ad_len,
-                                       ctx->tag_len);
-}
-
-static int aead_xchacha20_poly1305_open_gather(
-    const EVP_AEAD_CTX *ctx, uint8_t *out, const uint8_t *nonce,
-    size_t nonce_len, const uint8_t *in, size_t in_len, const uint8_t *in_tag,
-    size_t in_tag_len, const uint8_t *ad, size_t ad_len) {
-  const struct aead_chacha20_poly1305_ctx *c20_ctx =
-      (struct aead_chacha20_poly1305_ctx *)&ctx->state;
-
-  if (nonce_len != 24) {
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_UNSUPPORTED_NONCE_SIZE);
-    return 0;
-  }
-
-  alignas(4) uint8_t derived_key[32];
-  alignas(4) uint8_t derived_nonce[12];
-  CRYPTO_hchacha20(derived_key, c20_ctx->key, nonce);
-  OPENSSL_memset(derived_nonce, 0, 4);
-  OPENSSL_memcpy(&derived_nonce[4], &nonce[16], 8);
-
-  return chacha20_poly1305_open_gather(
-      derived_key, out, derived_nonce, sizeof(derived_nonce), in, in_len,
-      in_tag, in_tag_len, ad, ad_len, ctx->tag_len);
-}
-
-static const EVP_AEAD aead_chacha20_poly1305 = {
-    32,                // key len
-    12,                // nonce len
-    POLY1305_TAG_LEN,  // overhead
-    POLY1305_TAG_LEN,  // max tag length
-    1,                 // seal_scatter_supports_extra_in
-
-    aead_chacha20_poly1305_init,
-    NULL,  // init_with_direction
-    aead_chacha20_poly1305_cleanup,
-    NULL /* open */,
-    aead_chacha20_poly1305_seal_scatter,
-    aead_chacha20_poly1305_open_gather,
-    NULL,  // get_iv
-    NULL,  // tag_len
-};
-
-static const EVP_AEAD aead_xchacha20_poly1305 = {
-    32,                // key len
-    24,                // nonce len
-    POLY1305_TAG_LEN,  // overhead
-    POLY1305_TAG_LEN,  // max tag length
-    1,                 // seal_scatter_supports_extra_in
-
-    aead_chacha20_poly1305_init,
-    NULL,  // init_with_direction
-    aead_chacha20_poly1305_cleanup,
-    NULL /* open */,
-    aead_xchacha20_poly1305_seal_scatter,
-    aead_xchacha20_poly1305_open_gather,
-    NULL,  // get_iv
-    NULL,  // tag_len
-};
-
-const EVP_AEAD *EVP_aead_chacha20_poly1305(void) {
-  return &aead_chacha20_poly1305;
-}
-
-const EVP_AEAD *EVP_aead_xchacha20_poly1305(void) {
-  return &aead_xchacha20_poly1305;
-}
diff --git a/src/crypto/cipher/e_des.cc b/src/crypto/cipher/e_des.cc
deleted file mode 100644
index cf85371..0000000
--- a/src/crypto/cipher/e_des.cc
+++ /dev/null
@@ -1,198 +0,0 @@
-// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
-//
-// 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
-//
-//     https://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 <openssl/cipher.h>
-#include <openssl/des.h>
-#include <openssl/nid.h>
-
-#include "../des/internal.h"
-#include "../fipsmodule/cipher/internal.h"
-#include "internal.h"
-
-
-typedef struct {
-  union {
-    double align;
-    DES_key_schedule ks;
-  } ks;
-} EVP_DES_KEY;
-
-static int des_init_key(EVP_CIPHER_CTX *ctx, const uint8_t *key,
-                        const uint8_t *iv, int enc) {
-  EVP_DES_KEY *dat = (EVP_DES_KEY *)ctx->cipher_data;
-  DES_set_key_ex(key, &dat->ks.ks);
-  return 1;
-}
-
-static int des_cbc_cipher(EVP_CIPHER_CTX *ctx, uint8_t *out, const uint8_t *in,
-                          size_t in_len) {
-  EVP_DES_KEY *dat = (EVP_DES_KEY *)ctx->cipher_data;
-  DES_ncbc_encrypt_ex(in, out, in_len, &dat->ks.ks, ctx->iv, ctx->encrypt);
-  return 1;
-}
-
-static const EVP_CIPHER evp_des_cbc = {
-    /*nid=*/NID_des_cbc,
-    /*block_size=*/8,
-    /*key_len=*/8,
-    /*iv_len=*/8,
-    /*ctx_size=*/sizeof(EVP_DES_KEY),
-    /*flags=*/EVP_CIPH_CBC_MODE,
-    /*init=*/des_init_key,
-    /*cipher=*/des_cbc_cipher,
-    /*cleanup=*/nullptr,
-    /*ctrl=*/nullptr,
-};
-
-const EVP_CIPHER *EVP_des_cbc(void) { return &evp_des_cbc; }
-
-static int des_ecb_cipher(EVP_CIPHER_CTX *ctx, uint8_t *out, const uint8_t *in,
-                          size_t in_len) {
-  if (in_len < ctx->cipher->block_size) {
-    return 1;
-  }
-  in_len -= ctx->cipher->block_size;
-
-  EVP_DES_KEY *dat = (EVP_DES_KEY *)ctx->cipher_data;
-  for (size_t i = 0; i <= in_len; i += ctx->cipher->block_size) {
-    DES_ecb_encrypt_ex(in + i, out + i, &dat->ks.ks, ctx->encrypt);
-  }
-  return 1;
-}
-
-static const EVP_CIPHER evp_des_ecb = {
-    /*nid=*/NID_des_ecb,
-    /*block_size=*/8,
-    /*key_len=*/8,
-    /*iv_len=*/0,
-    /*ctx_size=*/sizeof(EVP_DES_KEY),
-    /*flags=*/EVP_CIPH_ECB_MODE,
-    /*init=*/des_init_key,
-    /*cipher=*/des_ecb_cipher,
-    /*cleanup=*/nullptr,
-    /*ctrl=*/nullptr,
-};
-
-const EVP_CIPHER *EVP_des_ecb(void) { return &evp_des_ecb; }
-
-typedef struct {
-  union {
-    double align;
-    DES_key_schedule ks[3];
-  } ks;
-} DES_EDE_KEY;
-
-static int des_ede3_init_key(EVP_CIPHER_CTX *ctx, const uint8_t *key,
-                             const uint8_t *iv, int enc) {
-  DES_EDE_KEY *dat = (DES_EDE_KEY *)ctx->cipher_data;
-  DES_set_key_ex(key, &dat->ks.ks[0]);
-  DES_set_key_ex(key + 8, &dat->ks.ks[1]);
-  DES_set_key_ex(key + 16, &dat->ks.ks[2]);
-  return 1;
-}
-
-static int des_ede3_cbc_cipher(EVP_CIPHER_CTX *ctx, uint8_t *out,
-                               const uint8_t *in, size_t in_len) {
-  DES_EDE_KEY *dat = (DES_EDE_KEY *)ctx->cipher_data;
-  DES_ede3_cbc_encrypt_ex(in, out, in_len, &dat->ks.ks[0], &dat->ks.ks[1],
-                          &dat->ks.ks[2], ctx->iv, ctx->encrypt);
-  return 1;
-}
-
-static const EVP_CIPHER evp_des_ede3_cbc = {
-    /*nid=*/NID_des_ede3_cbc,
-    /*block_size=*/8,
-    /*key_len=*/24,
-    /*iv_len=*/8,
-    /*ctx_size=*/sizeof(DES_EDE_KEY),
-    /*flags=*/EVP_CIPH_CBC_MODE,
-    /*init=*/des_ede3_init_key,
-    /*cipher=*/des_ede3_cbc_cipher,
-    /*cleanup=*/nullptr,
-    /*ctrl=*/nullptr,
-};
-
-const EVP_CIPHER *EVP_des_ede3_cbc(void) { return &evp_des_ede3_cbc; }
-
-static int des_ede_init_key(EVP_CIPHER_CTX *ctx, const uint8_t *key,
-                            const uint8_t *iv, int enc) {
-  DES_EDE_KEY *dat = (DES_EDE_KEY *)ctx->cipher_data;
-  // 2-DES is 3-DES with the first key used twice.
-  DES_set_key_ex(key, &dat->ks.ks[0]);
-  DES_set_key_ex(key + 8, &dat->ks.ks[1]);
-  DES_set_key_ex(key, &dat->ks.ks[2]);
-  return 1;
-}
-
-static const EVP_CIPHER evp_des_ede_cbc = {
-    /*nid=*/NID_des_ede_cbc,
-    /*block_size=*/8,
-    /*key_len=*/16,
-    /*iv_len=*/8,
-    /*ctx_size=*/sizeof(DES_EDE_KEY),
-    /*flags=*/EVP_CIPH_CBC_MODE,
-    /*init=*/des_ede_init_key,
-    /*cipher=*/des_ede3_cbc_cipher,
-    /*cleanup=*/nullptr,
-    /*ctrl=*/nullptr,
-};
-
-const EVP_CIPHER *EVP_des_ede_cbc(void) { return &evp_des_ede_cbc; }
-
-static int des_ede_ecb_cipher(EVP_CIPHER_CTX *ctx, uint8_t *out,
-                              const uint8_t *in, size_t in_len) {
-  if (in_len < ctx->cipher->block_size) {
-    return 1;
-  }
-  in_len -= ctx->cipher->block_size;
-
-  DES_EDE_KEY *dat = (DES_EDE_KEY *)ctx->cipher_data;
-  for (size_t i = 0; i <= in_len; i += ctx->cipher->block_size) {
-    DES_ecb3_encrypt_ex(in + i, out + i, &dat->ks.ks[0], &dat->ks.ks[1],
-                        &dat->ks.ks[2], ctx->encrypt);
-  }
-  return 1;
-}
-
-static const EVP_CIPHER evp_des_ede = {
-    /*nid=*/NID_des_ede_ecb,
-    /*block_size=*/8,
-    /*key_len=*/16,
-    /*iv_len=*/0,
-    /*ctx_size=*/sizeof(DES_EDE_KEY),
-    /*flags=*/EVP_CIPH_ECB_MODE,
-    /*init=*/des_ede_init_key,
-    /*cipher=*/des_ede_ecb_cipher,
-    /*cleanup=*/nullptr,
-    /*ctrl=*/nullptr,
-};
-
-const EVP_CIPHER *EVP_des_ede(void) { return &evp_des_ede; }
-
-static const EVP_CIPHER evp_des_ede3 = {
-    /*nid=*/NID_des_ede3_ecb,
-    /*block_size=*/8,
-    /*key_len=*/24,
-    /*iv_len=*/0,
-    /*ctx_size=*/sizeof(DES_EDE_KEY),
-    /*flags=*/EVP_CIPH_ECB_MODE,
-    /*init=*/des_ede3_init_key,
-    /*cipher=*/des_ede_ecb_cipher,
-    /*cleanup=*/nullptr,
-    /*ctrl=*/nullptr,
-};
-
-const EVP_CIPHER *EVP_des_ede3(void) { return &evp_des_ede3; }
-
-const EVP_CIPHER *EVP_des_ede3_ecb(void) { return EVP_des_ede3(); }
diff --git a/src/crypto/cipher/e_null.cc b/src/crypto/cipher/e_null.cc
deleted file mode 100644
index 4e59448..0000000
--- a/src/crypto/cipher/e_null.cc
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
-//
-// 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
-//
-//     https://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 <openssl/cipher.h>
-
-#include <string.h>
-
-#include <openssl/nid.h>
-
-#include "../fipsmodule/cipher/internal.h"
-#include "../internal.h"
-
-
-static int null_init_key(EVP_CIPHER_CTX *ctx, const uint8_t *key,
-                         const uint8_t *iv, int enc) {
-  return 1;
-}
-
-static int null_cipher(EVP_CIPHER_CTX *ctx, uint8_t *out, const uint8_t *in,
-                       size_t in_len) {
-  if (in != out) {
-    OPENSSL_memcpy(out, in, in_len);
-  }
-  return 1;
-}
-
-static const EVP_CIPHER n_cipher = {
-    /*nid=*/NID_undef,
-    /*block_size=*/1,
-    /*key_len=*/0,
-    /*iv_len=*/0,
-    /*ctx_size=*/0,
-    /*flags=*/0,
-    /*init=*/null_init_key,
-    /*cipher=*/null_cipher,
-    /*cleanup=*/nullptr,
-    /*ctrl=*/nullptr,
-};
-
-const EVP_CIPHER *EVP_enc_null(void) { return &n_cipher; }
diff --git a/src/crypto/cipher/e_rc2.cc b/src/crypto/cipher/e_rc2.cc
deleted file mode 100644
index 250351a..0000000
--- a/src/crypto/cipher/e_rc2.cc
+++ /dev/null
@@ -1,417 +0,0 @@
-// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
-//
-// 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
-//
-//     https://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 <openssl/cipher.h>
-#include <openssl/nid.h>
-
-#include "../fipsmodule/cipher/internal.h"
-#include "../internal.h"
-
-
-#define c2l(c, l)                         \
-  do {                                    \
-    (l) = ((uint32_t)(*((c)++)));         \
-    (l) |= ((uint32_t)(*((c)++))) << 8L;  \
-    (l) |= ((uint32_t)(*((c)++))) << 16L; \
-    (l) |= ((uint32_t)(*((c)++))) << 24L; \
-  } while (0)
-
-#define c2ln(c, l1, l2, n)                     \
-  do {                                         \
-    (c) += (n);                                \
-    (l1) = (l2) = 0;                           \
-    switch (n) {                               \
-      case 8:                                  \
-        (l2) = ((uint32_t)(*(--(c)))) << 24L;  \
-        [[fallthrough]];                       \
-      case 7:                                  \
-        (l2) |= ((uint32_t)(*(--(c)))) << 16L; \
-        [[fallthrough]];                       \
-      case 6:                                  \
-        (l2) |= ((uint32_t)(*(--(c)))) << 8L;  \
-        [[fallthrough]];                       \
-      case 5:                                  \
-        (l2) |= ((uint32_t)(*(--(c))));        \
-        [[fallthrough]];                       \
-      case 4:                                  \
-        (l1) = ((uint32_t)(*(--(c)))) << 24L;  \
-        [[fallthrough]];                       \
-      case 3:                                  \
-        (l1) |= ((uint32_t)(*(--(c)))) << 16L; \
-        [[fallthrough]];                       \
-      case 2:                                  \
-        (l1) |= ((uint32_t)(*(--(c)))) << 8L;  \
-        [[fallthrough]];                       \
-      case 1:                                  \
-        (l1) |= ((uint32_t)(*(--(c))));        \
-    }                                          \
-  } while (0)
-
-#define l2c(l, c)                              \
-  do {                                         \
-    *((c)++) = (uint8_t)(((l)) & 0xff);        \
-    *((c)++) = (uint8_t)(((l) >> 8L) & 0xff);  \
-    *((c)++) = (uint8_t)(((l) >> 16L) & 0xff); \
-    *((c)++) = (uint8_t)(((l) >> 24L) & 0xff); \
-  } while (0)
-
-#define l2cn(l1, l2, c, n)                          \
-  do {                                              \
-    (c) += (n);                                     \
-    switch (n) {                                    \
-      case 8:                                       \
-        *(--(c)) = (uint8_t)(((l2) >> 24L) & 0xff); \
-        [[fallthrough]];                            \
-      case 7:                                       \
-        *(--(c)) = (uint8_t)(((l2) >> 16L) & 0xff); \
-        [[fallthrough]];                            \
-      case 6:                                       \
-        *(--(c)) = (uint8_t)(((l2) >> 8L) & 0xff);  \
-        [[fallthrough]];                            \
-      case 5:                                       \
-        *(--(c)) = (uint8_t)(((l2)) & 0xff);        \
-        [[fallthrough]];                            \
-      case 4:                                       \
-        *(--(c)) = (uint8_t)(((l1) >> 24L) & 0xff); \
-        [[fallthrough]];                            \
-      case 3:                                       \
-        *(--(c)) = (uint8_t)(((l1) >> 16L) & 0xff); \
-        [[fallthrough]];                            \
-      case 2:                                       \
-        *(--(c)) = (uint8_t)(((l1) >> 8L) & 0xff);  \
-        [[fallthrough]];                            \
-      case 1:                                       \
-        *(--(c)) = (uint8_t)(((l1)) & 0xff);        \
-    }                                               \
-  } while (0)
-
-typedef struct rc2_key_st {
-  uint16_t data[64];
-} RC2_KEY;
-
-static void RC2_encrypt(uint32_t *d, RC2_KEY *key) {
-  int i, n;
-  uint16_t *p0, *p1;
-  uint16_t x0, x1, x2, x3, t;
-  uint32_t l;
-
-  l = d[0];
-  x0 = (uint16_t)l & 0xffff;
-  x1 = (uint16_t)(l >> 16L);
-  l = d[1];
-  x2 = (uint16_t)l & 0xffff;
-  x3 = (uint16_t)(l >> 16L);
-
-  n = 3;
-  i = 5;
-
-  p0 = p1 = &key->data[0];
-  for (;;) {
-    t = (x0 + (x1 & ~x3) + (x2 & x3) + *(p0++)) & 0xffff;
-    x0 = (t << 1) | (t >> 15);
-    t = (x1 + (x2 & ~x0) + (x3 & x0) + *(p0++)) & 0xffff;
-    x1 = (t << 2) | (t >> 14);
-    t = (x2 + (x3 & ~x1) + (x0 & x1) + *(p0++)) & 0xffff;
-    x2 = (t << 3) | (t >> 13);
-    t = (x3 + (x0 & ~x2) + (x1 & x2) + *(p0++)) & 0xffff;
-    x3 = (t << 5) | (t >> 11);
-
-    if (--i == 0) {
-      if (--n == 0) {
-        break;
-      }
-      i = (n == 2) ? 6 : 5;
-
-      x0 += p1[x3 & 0x3f];
-      x1 += p1[x0 & 0x3f];
-      x2 += p1[x1 & 0x3f];
-      x3 += p1[x2 & 0x3f];
-    }
-  }
-
-  d[0] = (uint32_t)(x0 & 0xffff) | ((uint32_t)(x1 & 0xffff) << 16L);
-  d[1] = (uint32_t)(x2 & 0xffff) | ((uint32_t)(x3 & 0xffff) << 16L);
-}
-
-static void RC2_decrypt(uint32_t *d, RC2_KEY *key) {
-  int i, n;
-  uint16_t *p0, *p1;
-  uint16_t x0, x1, x2, x3, t;
-  uint32_t l;
-
-  l = d[0];
-  x0 = (uint16_t)l & 0xffff;
-  x1 = (uint16_t)(l >> 16L);
-  l = d[1];
-  x2 = (uint16_t)l & 0xffff;
-  x3 = (uint16_t)(l >> 16L);
-
-  n = 3;
-  i = 5;
-
-  p0 = &key->data[63];
-  p1 = &key->data[0];
-  for (;;) {
-    t = ((x3 << 11) | (x3 >> 5)) & 0xffff;
-    x3 = (t - (x0 & ~x2) - (x1 & x2) - *(p0--)) & 0xffff;
-    t = ((x2 << 13) | (x2 >> 3)) & 0xffff;
-    x2 = (t - (x3 & ~x1) - (x0 & x1) - *(p0--)) & 0xffff;
-    t = ((x1 << 14) | (x1 >> 2)) & 0xffff;
-    x1 = (t - (x2 & ~x0) - (x3 & x0) - *(p0--)) & 0xffff;
-    t = ((x0 << 15) | (x0 >> 1)) & 0xffff;
-    x0 = (t - (x1 & ~x3) - (x2 & x3) - *(p0--)) & 0xffff;
-
-    if (--i == 0) {
-      if (--n == 0) {
-        break;
-      }
-      i = (n == 2) ? 6 : 5;
-
-      x3 = (x3 - p1[x2 & 0x3f]) & 0xffff;
-      x2 = (x2 - p1[x1 & 0x3f]) & 0xffff;
-      x1 = (x1 - p1[x0 & 0x3f]) & 0xffff;
-      x0 = (x0 - p1[x3 & 0x3f]) & 0xffff;
-    }
-  }
-
-  d[0] = (uint32_t)(x0 & 0xffff) | ((uint32_t)(x1 & 0xffff) << 16L);
-  d[1] = (uint32_t)(x2 & 0xffff) | ((uint32_t)(x3 & 0xffff) << 16L);
-}
-
-static void RC2_cbc_encrypt(const uint8_t *in, uint8_t *out, size_t length,
-                            RC2_KEY *ks, uint8_t *iv, int encrypt) {
-  uint32_t tin0, tin1;
-  uint32_t tout0, tout1, xor0, xor1;
-  long l = length;
-  uint32_t tin[2];
-
-  if (encrypt) {
-    c2l(iv, tout0);
-    c2l(iv, tout1);
-    iv -= 8;
-    for (l -= 8; l >= 0; l -= 8) {
-      c2l(in, tin0);
-      c2l(in, tin1);
-      tin0 ^= tout0;
-      tin1 ^= tout1;
-      tin[0] = tin0;
-      tin[1] = tin1;
-      RC2_encrypt(tin, ks);
-      tout0 = tin[0];
-      l2c(tout0, out);
-      tout1 = tin[1];
-      l2c(tout1, out);
-    }
-    if (l != -8) {
-      c2ln(in, tin0, tin1, l + 8);
-      tin0 ^= tout0;
-      tin1 ^= tout1;
-      tin[0] = tin0;
-      tin[1] = tin1;
-      RC2_encrypt(tin, ks);
-      tout0 = tin[0];
-      l2c(tout0, out);
-      tout1 = tin[1];
-      l2c(tout1, out);
-    }
-    l2c(tout0, iv);
-    l2c(tout1, iv);
-  } else {
-    c2l(iv, xor0);
-    c2l(iv, xor1);
-    iv -= 8;
-    for (l -= 8; l >= 0; l -= 8) {
-      c2l(in, tin0);
-      tin[0] = tin0;
-      c2l(in, tin1);
-      tin[1] = tin1;
-      RC2_decrypt(tin, ks);
-      tout0 = tin[0] ^ xor0;
-      tout1 = tin[1] ^ xor1;
-      l2c(tout0, out);
-      l2c(tout1, out);
-      xor0 = tin0;
-      xor1 = tin1;
-    }
-    if (l != -8) {
-      c2l(in, tin0);
-      tin[0] = tin0;
-      c2l(in, tin1);
-      tin[1] = tin1;
-      RC2_decrypt(tin, ks);
-      tout0 = tin[0] ^ xor0;
-      tout1 = tin[1] ^ xor1;
-      l2cn(tout0, tout1, out, l + 8);
-      xor0 = tin0;
-      xor1 = tin1;
-    }
-    l2c(xor0, iv);
-    l2c(xor1, iv);
-  }
-  tin[0] = tin[1] = 0;
-}
-
-static const uint8_t key_table[256] = {
-    0xd9, 0x78, 0xf9, 0xc4, 0x19, 0xdd, 0xb5, 0xed, 0x28, 0xe9, 0xfd, 0x79,
-    0x4a, 0xa0, 0xd8, 0x9d, 0xc6, 0x7e, 0x37, 0x83, 0x2b, 0x76, 0x53, 0x8e,
-    0x62, 0x4c, 0x64, 0x88, 0x44, 0x8b, 0xfb, 0xa2, 0x17, 0x9a, 0x59, 0xf5,
-    0x87, 0xb3, 0x4f, 0x13, 0x61, 0x45, 0x6d, 0x8d, 0x09, 0x81, 0x7d, 0x32,
-    0xbd, 0x8f, 0x40, 0xeb, 0x86, 0xb7, 0x7b, 0x0b, 0xf0, 0x95, 0x21, 0x22,
-    0x5c, 0x6b, 0x4e, 0x82, 0x54, 0xd6, 0x65, 0x93, 0xce, 0x60, 0xb2, 0x1c,
-    0x73, 0x56, 0xc0, 0x14, 0xa7, 0x8c, 0xf1, 0xdc, 0x12, 0x75, 0xca, 0x1f,
-    0x3b, 0xbe, 0xe4, 0xd1, 0x42, 0x3d, 0xd4, 0x30, 0xa3, 0x3c, 0xb6, 0x26,
-    0x6f, 0xbf, 0x0e, 0xda, 0x46, 0x69, 0x07, 0x57, 0x27, 0xf2, 0x1d, 0x9b,
-    0xbc, 0x94, 0x43, 0x03, 0xf8, 0x11, 0xc7, 0xf6, 0x90, 0xef, 0x3e, 0xe7,
-    0x06, 0xc3, 0xd5, 0x2f, 0xc8, 0x66, 0x1e, 0xd7, 0x08, 0xe8, 0xea, 0xde,
-    0x80, 0x52, 0xee, 0xf7, 0x84, 0xaa, 0x72, 0xac, 0x35, 0x4d, 0x6a, 0x2a,
-    0x96, 0x1a, 0xd2, 0x71, 0x5a, 0x15, 0x49, 0x74, 0x4b, 0x9f, 0xd0, 0x5e,
-    0x04, 0x18, 0xa4, 0xec, 0xc2, 0xe0, 0x41, 0x6e, 0x0f, 0x51, 0xcb, 0xcc,
-    0x24, 0x91, 0xaf, 0x50, 0xa1, 0xf4, 0x70, 0x39, 0x99, 0x7c, 0x3a, 0x85,
-    0x23, 0xb8, 0xb4, 0x7a, 0xfc, 0x02, 0x36, 0x5b, 0x25, 0x55, 0x97, 0x31,
-    0x2d, 0x5d, 0xfa, 0x98, 0xe3, 0x8a, 0x92, 0xae, 0x05, 0xdf, 0x29, 0x10,
-    0x67, 0x6c, 0xba, 0xc9, 0xd3, 0x00, 0xe6, 0xcf, 0xe1, 0x9e, 0xa8, 0x2c,
-    0x63, 0x16, 0x01, 0x3f, 0x58, 0xe2, 0x89, 0xa9, 0x0d, 0x38, 0x34, 0x1b,
-    0xab, 0x33, 0xff, 0xb0, 0xbb, 0x48, 0x0c, 0x5f, 0xb9, 0xb1, 0xcd, 0x2e,
-    0xc5, 0xf3, 0xdb, 0x47, 0xe5, 0xa5, 0x9c, 0x77, 0x0a, 0xa6, 0x20, 0x68,
-    0xfe, 0x7f, 0xc1, 0xad,
-};
-
-static void RC2_set_key(RC2_KEY *key, int len, const uint8_t *data, int bits) {
-  int i, j;
-  uint8_t *k;
-  uint16_t *ki;
-  unsigned int c, d;
-
-  k = (uint8_t *)&key->data[0];
-  *k = 0;  // for if there is a zero length key
-
-  if (len > 128) {
-    len = 128;
-  }
-  if (bits <= 0) {
-    bits = 1024;
-  }
-  if (bits > 1024) {
-    bits = 1024;
-  }
-
-  for (i = 0; i < len; i++) {
-    k[i] = data[i];
-  }
-
-  // expand table
-  d = k[len - 1];
-  j = 0;
-  for (i = len; i < 128; i++, j++) {
-    d = key_table[(k[j] + d) & 0xff];
-    k[i] = d;
-  }
-
-  // hmm.... key reduction to 'bits' bits
-
-  j = (bits + 7) >> 3;
-  i = 128 - j;
-  c = (0xff >> (-bits & 0x07));
-
-  d = key_table[k[i] & c];
-  k[i] = d;
-  while (i--) {
-    d = key_table[k[i + j] ^ d];
-    k[i] = d;
-  }
-
-  // copy from bytes into uint16_t's
-  ki = &(key->data[63]);
-  for (i = 127; i >= 0; i -= 2) {
-    *(ki--) = ((k[i] << 8) | k[i - 1]) & 0xffff;
-  }
-}
-
-typedef struct {
-  int key_bits;  // effective key bits
-  RC2_KEY ks;    // key schedule
-} EVP_RC2_KEY;
-
-static int rc2_init_key(EVP_CIPHER_CTX *ctx, const uint8_t *key,
-                        const uint8_t *iv, int enc) {
-  EVP_RC2_KEY *rc2_key = (EVP_RC2_KEY *)ctx->cipher_data;
-  RC2_set_key(&rc2_key->ks, EVP_CIPHER_CTX_key_length(ctx), key,
-              rc2_key->key_bits);
-  return 1;
-}
-
-static int rc2_cbc_cipher(EVP_CIPHER_CTX *ctx, uint8_t *out, const uint8_t *in,
-                          size_t inl) {
-  EVP_RC2_KEY *key = (EVP_RC2_KEY *)ctx->cipher_data;
-  static const size_t kChunkSize = 0x10000;
-
-  while (inl >= kChunkSize) {
-    RC2_cbc_encrypt(in, out, kChunkSize, &key->ks, ctx->iv, ctx->encrypt);
-    inl -= kChunkSize;
-    in += kChunkSize;
-    out += kChunkSize;
-  }
-  if (inl) {
-    RC2_cbc_encrypt(in, out, inl, &key->ks, ctx->iv, ctx->encrypt);
-  }
-  return 1;
-}
-
-static int rc2_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr) {
-  EVP_RC2_KEY *key = (EVP_RC2_KEY *)ctx->cipher_data;
-
-  switch (type) {
-    case EVP_CTRL_INIT:
-      key->key_bits = EVP_CIPHER_CTX_key_length(ctx) * 8;
-      return 1;
-    case EVP_CTRL_SET_RC2_KEY_BITS:
-      // Should be overridden by later call to |EVP_CTRL_INIT|, but
-      // people call it, so it may as well work.
-      key->key_bits = arg;
-      return 1;
-
-    default:
-      return -1;
-  }
-}
-
-static const EVP_CIPHER rc2_40_cbc = {
-    /*nid=*/NID_rc2_40_cbc,
-    /*block_size=*/8,
-    /*key_len=*/5 /* 40 bit */,
-    /*iv_len=*/8,
-    /*ctx_size=*/sizeof(EVP_RC2_KEY),
-    /*flags=*/EVP_CIPH_CBC_MODE | EVP_CIPH_VARIABLE_LENGTH | EVP_CIPH_CTRL_INIT,
-    /*init=*/rc2_init_key,
-    /*cipher=*/rc2_cbc_cipher,
-    /*cleanup=*/nullptr,
-    /*ctrl=*/rc2_ctrl,
-};
-
-const EVP_CIPHER *EVP_rc2_40_cbc(void) { return &rc2_40_cbc; }
-
-static const EVP_CIPHER rc2_cbc = {
-    /*nid=*/NID_rc2_cbc,
-    /*block_size=*/8,
-    /*key_len=*/16 /* 128 bit */,
-    /*iv_len=*/8,
-    /*ctx_size=*/sizeof(EVP_RC2_KEY),
-    /*flags=*/EVP_CIPH_CBC_MODE | EVP_CIPH_VARIABLE_LENGTH | EVP_CIPH_CTRL_INIT,
-    /*init=*/rc2_init_key,
-    /*cipher=*/rc2_cbc_cipher,
-    /*cleanup=*/nullptr,
-    /*ctrl=*/rc2_ctrl,
-};
-
-const EVP_CIPHER *EVP_rc2_cbc(void) { return &rc2_cbc; }
diff --git a/src/crypto/cipher/e_rc4.cc b/src/crypto/cipher/e_rc4.cc
deleted file mode 100644
index 2450a73..0000000
--- a/src/crypto/cipher/e_rc4.cc
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
-//
-// 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
-//
-//     https://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 <assert.h>
-#include <string.h>
-
-#include <openssl/cipher.h>
-#include <openssl/nid.h>
-#include <openssl/rc4.h>
-
-#include "../fipsmodule/cipher/internal.h"
-
-
-static int rc4_init_key(EVP_CIPHER_CTX *ctx, const uint8_t *key,
-                        const uint8_t *iv, int enc) {
-  RC4_KEY *rc4key = (RC4_KEY *)ctx->cipher_data;
-
-  RC4_set_key(rc4key, EVP_CIPHER_CTX_key_length(ctx), key);
-  return 1;
-}
-
-static int rc4_cipher(EVP_CIPHER_CTX *ctx, uint8_t *out, const uint8_t *in,
-                      size_t in_len) {
-  RC4_KEY *rc4key = (RC4_KEY *)ctx->cipher_data;
-
-  RC4(rc4key, in_len, in, out);
-  return 1;
-}
-
-static const EVP_CIPHER rc4 = {
-    /*nid=*/NID_rc4,
-    /*block_size=*/1,
-    /*key_len=*/16,
-    /*iv_len=*/0,
-    /*ctx_size=*/sizeof(RC4_KEY),
-    /*flags=*/EVP_CIPH_VARIABLE_LENGTH,
-    /*init=*/rc4_init_key,
-    /*cipher=*/rc4_cipher,
-    /*cleanup=*/nullptr,
-    /*ctrl=*/nullptr,
-};
-
-const EVP_CIPHER *EVP_rc4(void) { return &rc4; }
diff --git a/src/crypto/cipher/e_tls.cc b/src/crypto/cipher/e_tls.cc
deleted file mode 100644
index ccb677b..0000000
--- a/src/crypto/cipher/e_tls.cc
+++ /dev/null
@@ -1,599 +0,0 @@
-// Copyright 2014 The BoringSSL Authors
-//
-// 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
-//
-//     https://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 <assert.h>
-#include <limits.h>
-#include <string.h>
-
-#include <openssl/aead.h>
-#include <openssl/cipher.h>
-#include <openssl/err.h>
-#include <openssl/hmac.h>
-#include <openssl/md5.h>
-#include <openssl/mem.h>
-#include <openssl/sha.h>
-
-#include "../fipsmodule/cipher/internal.h"
-#include "../internal.h"
-#include "internal.h"
-
-
-typedef struct {
-  EVP_CIPHER_CTX cipher_ctx;
-  HMAC_CTX hmac_ctx;
-  // mac_key is the portion of the key used for the MAC. It is retained
-  // separately for the constant-time CBC code.
-  uint8_t mac_key[EVP_MAX_MD_SIZE];
-  uint8_t mac_key_len;
-  // implicit_iv is one iff this is a pre-TLS-1.1 CBC cipher without an explicit
-  // IV.
-  char implicit_iv;
-} AEAD_TLS_CTX;
-
-static_assert(EVP_MAX_MD_SIZE < 256, "mac_key_len does not fit in uint8_t");
-
-static_assert(sizeof(((EVP_AEAD_CTX *)NULL)->state) >= sizeof(AEAD_TLS_CTX),
-              "AEAD state is too small");
-static_assert(alignof(union evp_aead_ctx_st_state) >= alignof(AEAD_TLS_CTX),
-              "AEAD state has insufficient alignment");
-
-static void aead_tls_cleanup(EVP_AEAD_CTX *ctx) {
-  AEAD_TLS_CTX *tls_ctx = (AEAD_TLS_CTX *)&ctx->state;
-  EVP_CIPHER_CTX_cleanup(&tls_ctx->cipher_ctx);
-  HMAC_CTX_cleanup(&tls_ctx->hmac_ctx);
-}
-
-static int aead_tls_init(EVP_AEAD_CTX *ctx, const uint8_t *key, size_t key_len,
-                         size_t tag_len, enum evp_aead_direction_t dir,
-                         const EVP_CIPHER *cipher, const EVP_MD *md,
-                         char implicit_iv) {
-  if (tag_len != EVP_AEAD_DEFAULT_TAG_LENGTH &&
-      tag_len != EVP_MD_size(md)) {
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_UNSUPPORTED_TAG_SIZE);
-    return 0;
-  }
-
-  if (key_len != EVP_AEAD_key_length(ctx->aead)) {
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BAD_KEY_LENGTH);
-    return 0;
-  }
-
-  size_t mac_key_len = EVP_MD_size(md);
-  size_t enc_key_len = EVP_CIPHER_key_length(cipher);
-  assert(mac_key_len + enc_key_len +
-         (implicit_iv ? EVP_CIPHER_iv_length(cipher) : 0) == key_len);
-
-  AEAD_TLS_CTX *tls_ctx = (AEAD_TLS_CTX *)&ctx->state;
-  EVP_CIPHER_CTX_init(&tls_ctx->cipher_ctx);
-  HMAC_CTX_init(&tls_ctx->hmac_ctx);
-  assert(mac_key_len <= EVP_MAX_MD_SIZE);
-  OPENSSL_memcpy(tls_ctx->mac_key, key, mac_key_len);
-  tls_ctx->mac_key_len = (uint8_t)mac_key_len;
-  tls_ctx->implicit_iv = implicit_iv;
-
-  if (!EVP_CipherInit_ex(&tls_ctx->cipher_ctx, cipher, NULL, &key[mac_key_len],
-                         implicit_iv ? &key[mac_key_len + enc_key_len] : NULL,
-                         dir == evp_aead_seal) ||
-      !HMAC_Init_ex(&tls_ctx->hmac_ctx, key, mac_key_len, md, NULL)) {
-    aead_tls_cleanup(ctx);
-    return 0;
-  }
-  EVP_CIPHER_CTX_set_padding(&tls_ctx->cipher_ctx, 0);
-
-  return 1;
-}
-
-static size_t aead_tls_tag_len(const EVP_AEAD_CTX *ctx, const size_t in_len,
-                               const size_t extra_in_len) {
-  assert(extra_in_len == 0);
-  const AEAD_TLS_CTX *tls_ctx = (AEAD_TLS_CTX *)&ctx->state;
-
-  const size_t hmac_len = HMAC_size(&tls_ctx->hmac_ctx);
-  if (EVP_CIPHER_CTX_mode(&tls_ctx->cipher_ctx) != EVP_CIPH_CBC_MODE) {
-    // The NULL cipher.
-    return hmac_len;
-  }
-
-  const size_t block_size = EVP_CIPHER_CTX_block_size(&tls_ctx->cipher_ctx);
-  // An overflow of |in_len + hmac_len| doesn't affect the result mod
-  // |block_size|, provided that |block_size| is a smaller power of two.
-  assert(block_size != 0 && (block_size & (block_size - 1)) == 0);
-  const size_t pad_len = block_size - (in_len + hmac_len) % block_size;
-  return hmac_len + pad_len;
-}
-
-static int aead_tls_seal_scatter(const EVP_AEAD_CTX *ctx, uint8_t *out,
-                                 uint8_t *out_tag, size_t *out_tag_len,
-                                 const size_t max_out_tag_len,
-                                 const uint8_t *nonce, const size_t nonce_len,
-                                 const uint8_t *in, const size_t in_len,
-                                 const uint8_t *extra_in,
-                                 const size_t extra_in_len, const uint8_t *ad,
-                                 const size_t ad_len) {
-  AEAD_TLS_CTX *tls_ctx = (AEAD_TLS_CTX *)&ctx->state;
-
-  if (!tls_ctx->cipher_ctx.encrypt) {
-    // Unlike a normal AEAD, a TLS AEAD may only be used in one direction.
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_INVALID_OPERATION);
-    return 0;
-  }
-
-  if (in_len > INT_MAX) {
-    // EVP_CIPHER takes int as input.
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_TOO_LARGE);
-    return 0;
-  }
-
-  if (max_out_tag_len < aead_tls_tag_len(ctx, in_len, extra_in_len)) {
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BUFFER_TOO_SMALL);
-    return 0;
-  }
-
-  if (nonce_len != EVP_AEAD_nonce_length(ctx->aead)) {
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_INVALID_NONCE_SIZE);
-    return 0;
-  }
-
-  if (ad_len != 13 - 2 /* length bytes */) {
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_INVALID_AD_SIZE);
-    return 0;
-  }
-
-  // To allow for CBC mode which changes cipher length, |ad| doesn't include the
-  // length for legacy ciphers.
-  uint8_t ad_extra[2];
-  ad_extra[0] = (uint8_t)(in_len >> 8);
-  ad_extra[1] = (uint8_t)(in_len & 0xff);
-
-  // Compute the MAC. This must be first in case the operation is being done
-  // in-place.
-  uint8_t mac[EVP_MAX_MD_SIZE];
-  unsigned mac_len;
-  if (!HMAC_Init_ex(&tls_ctx->hmac_ctx, NULL, 0, NULL, NULL) ||
-      !HMAC_Update(&tls_ctx->hmac_ctx, ad, ad_len) ||
-      !HMAC_Update(&tls_ctx->hmac_ctx, ad_extra, sizeof(ad_extra)) ||
-      !HMAC_Update(&tls_ctx->hmac_ctx, in, in_len) ||
-      !HMAC_Final(&tls_ctx->hmac_ctx, mac, &mac_len)) {
-    return 0;
-  }
-
-  // Configure the explicit IV.
-  if (EVP_CIPHER_CTX_mode(&tls_ctx->cipher_ctx) == EVP_CIPH_CBC_MODE &&
-      !tls_ctx->implicit_iv &&
-      !EVP_EncryptInit_ex(&tls_ctx->cipher_ctx, NULL, NULL, NULL, nonce)) {
-    return 0;
-  }
-
-  // Encrypt the input.
-  int len;
-  if (!EVP_EncryptUpdate(&tls_ctx->cipher_ctx, out, &len, in, (int)in_len)) {
-    return 0;
-  }
-
-  unsigned block_size = EVP_CIPHER_CTX_block_size(&tls_ctx->cipher_ctx);
-
-  // Feed the MAC into the cipher in two steps. First complete the final partial
-  // block from encrypting the input and split the result between |out| and
-  // |out_tag|. Then feed the rest.
-
-  const size_t early_mac_len = (block_size - (in_len % block_size)) % block_size;
-  if (early_mac_len != 0) {
-    assert(len + block_size - early_mac_len == in_len);
-    uint8_t buf[EVP_MAX_BLOCK_LENGTH];
-    int buf_len;
-    if (!EVP_EncryptUpdate(&tls_ctx->cipher_ctx, buf, &buf_len, mac,
-                           (int)early_mac_len)) {
-      return 0;
-    }
-    assert(buf_len == (int)block_size);
-    OPENSSL_memcpy(out + len, buf, block_size - early_mac_len);
-    OPENSSL_memcpy(out_tag, buf + block_size - early_mac_len, early_mac_len);
-  }
-  size_t tag_len = early_mac_len;
-
-  if (!EVP_EncryptUpdate(&tls_ctx->cipher_ctx, out_tag + tag_len, &len,
-                         mac + tag_len, mac_len - tag_len)) {
-    return 0;
-  }
-  tag_len += len;
-
-  if (block_size > 1) {
-    assert(block_size <= 256);
-    assert(EVP_CIPHER_CTX_mode(&tls_ctx->cipher_ctx) == EVP_CIPH_CBC_MODE);
-
-    // Compute padding and feed that into the cipher.
-    uint8_t padding[256];
-    unsigned padding_len = block_size - ((in_len + mac_len) % block_size);
-    OPENSSL_memset(padding, padding_len - 1, padding_len);
-    if (!EVP_EncryptUpdate(&tls_ctx->cipher_ctx, out_tag + tag_len, &len,
-                           padding, (int)padding_len)) {
-      return 0;
-    }
-    tag_len += len;
-  }
-
-  if (!EVP_EncryptFinal_ex(&tls_ctx->cipher_ctx, out_tag + tag_len, &len)) {
-    return 0;
-  }
-  assert(len == 0);  // Padding is explicit.
-  assert(tag_len == aead_tls_tag_len(ctx, in_len, extra_in_len));
-
-  *out_tag_len = tag_len;
-  return 1;
-}
-
-static int aead_tls_open(const EVP_AEAD_CTX *ctx, uint8_t *out, size_t *out_len,
-                         size_t max_out_len, const uint8_t *nonce,
-                         size_t nonce_len, const uint8_t *in, size_t in_len,
-                         const uint8_t *ad, size_t ad_len) {
-  AEAD_TLS_CTX *tls_ctx = (AEAD_TLS_CTX *)&ctx->state;
-
-  if (tls_ctx->cipher_ctx.encrypt) {
-    // Unlike a normal AEAD, a TLS AEAD may only be used in one direction.
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_INVALID_OPERATION);
-    return 0;
-  }
-
-  if (in_len < HMAC_size(&tls_ctx->hmac_ctx)) {
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BAD_DECRYPT);
-    return 0;
-  }
-
-  if (max_out_len < in_len) {
-    // This requires that the caller provide space for the MAC, even though it
-    // will always be removed on return.
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BUFFER_TOO_SMALL);
-    return 0;
-  }
-
-  if (nonce_len != EVP_AEAD_nonce_length(ctx->aead)) {
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_INVALID_NONCE_SIZE);
-    return 0;
-  }
-
-  if (ad_len != 13 - 2 /* length bytes */) {
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_INVALID_AD_SIZE);
-    return 0;
-  }
-
-  if (in_len > INT_MAX) {
-    // EVP_CIPHER takes int as input.
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_TOO_LARGE);
-    return 0;
-  }
-
-  // Configure the explicit IV.
-  if (EVP_CIPHER_CTX_mode(&tls_ctx->cipher_ctx) == EVP_CIPH_CBC_MODE &&
-      !tls_ctx->implicit_iv &&
-      !EVP_DecryptInit_ex(&tls_ctx->cipher_ctx, NULL, NULL, NULL, nonce)) {
-    return 0;
-  }
-
-  // Decrypt to get the plaintext + MAC + padding.
-  size_t total = 0;
-  int len;
-  if (!EVP_DecryptUpdate(&tls_ctx->cipher_ctx, out, &len, in, (int)in_len)) {
-    return 0;
-  }
-  total += len;
-  if (!EVP_DecryptFinal_ex(&tls_ctx->cipher_ctx, out + total, &len)) {
-    return 0;
-  }
-  total += len;
-  assert(total == in_len);
-
-  CONSTTIME_SECRET(out, total);
-
-  // Remove CBC padding. Code from here on is timing-sensitive with respect to
-  // |padding_ok| and |data_plus_mac_len| for CBC ciphers.
-  size_t data_plus_mac_len;
-  crypto_word_t padding_ok;
-  if (EVP_CIPHER_CTX_mode(&tls_ctx->cipher_ctx) == EVP_CIPH_CBC_MODE) {
-    if (!EVP_tls_cbc_remove_padding(
-            &padding_ok, &data_plus_mac_len, out, total,
-            EVP_CIPHER_CTX_block_size(&tls_ctx->cipher_ctx),
-            HMAC_size(&tls_ctx->hmac_ctx))) {
-      // Publicly invalid. This can be rejected in non-constant time.
-      OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BAD_DECRYPT);
-      return 0;
-    }
-  } else {
-    padding_ok = CONSTTIME_TRUE_W;
-    data_plus_mac_len = total;
-    // |data_plus_mac_len| = |total| = |in_len| at this point. |in_len| has
-    // already been checked against the MAC size at the top of the function.
-    assert(data_plus_mac_len >= HMAC_size(&tls_ctx->hmac_ctx));
-  }
-  size_t data_len = data_plus_mac_len - HMAC_size(&tls_ctx->hmac_ctx);
-
-  // At this point, if the padding is valid, the first |data_plus_mac_len| bytes
-  // after |out| are the plaintext and MAC. Otherwise, |data_plus_mac_len| is
-  // still large enough to extract a MAC, but it will be irrelevant.
-
-  // To allow for CBC mode which changes cipher length, |ad| doesn't include the
-  // length for legacy ciphers.
-  uint8_t ad_fixed[13];
-  OPENSSL_memcpy(ad_fixed, ad, 11);
-  ad_fixed[11] = (uint8_t)(data_len >> 8);
-  ad_fixed[12] = (uint8_t)(data_len & 0xff);
-  ad_len += 2;
-
-  // Compute the MAC and extract the one in the record.
-  uint8_t mac[EVP_MAX_MD_SIZE];
-  size_t mac_len;
-  uint8_t record_mac_tmp[EVP_MAX_MD_SIZE];
-  uint8_t *record_mac;
-  if (EVP_CIPHER_CTX_mode(&tls_ctx->cipher_ctx) == EVP_CIPH_CBC_MODE &&
-      EVP_tls_cbc_record_digest_supported(tls_ctx->hmac_ctx.md)) {
-    if (!EVP_tls_cbc_digest_record(tls_ctx->hmac_ctx.md, mac, &mac_len,
-                                   ad_fixed, out, data_len, total,
-                                   tls_ctx->mac_key, tls_ctx->mac_key_len)) {
-      OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BAD_DECRYPT);
-      return 0;
-    }
-    assert(mac_len == HMAC_size(&tls_ctx->hmac_ctx));
-
-    record_mac = record_mac_tmp;
-    EVP_tls_cbc_copy_mac(record_mac, mac_len, out, data_plus_mac_len, total);
-  } else {
-    // We should support the constant-time path for all CBC-mode ciphers
-    // implemented.
-    assert(EVP_CIPHER_CTX_mode(&tls_ctx->cipher_ctx) != EVP_CIPH_CBC_MODE);
-
-    unsigned mac_len_u;
-    if (!HMAC_Init_ex(&tls_ctx->hmac_ctx, NULL, 0, NULL, NULL) ||
-        !HMAC_Update(&tls_ctx->hmac_ctx, ad_fixed, ad_len) ||
-        !HMAC_Update(&tls_ctx->hmac_ctx, out, data_len) ||
-        !HMAC_Final(&tls_ctx->hmac_ctx, mac, &mac_len_u)) {
-      return 0;
-    }
-    mac_len = mac_len_u;
-
-    assert(mac_len == HMAC_size(&tls_ctx->hmac_ctx));
-    record_mac = &out[data_len];
-  }
-
-  // Perform the MAC check and the padding check in constant-time. It should be
-  // safe to simply perform the padding check first, but it would not be under a
-  // different choice of MAC location on padding failure. See
-  // EVP_tls_cbc_remove_padding.
-  crypto_word_t good =
-      constant_time_eq_int(CRYPTO_memcmp(record_mac, mac, mac_len), 0);
-  good &= padding_ok;
-  CONSTTIME_DECLASSIFY(&good, sizeof(good));
-  if (!good) {
-    OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BAD_DECRYPT);
-    return 0;
-  }
-
-  CONSTTIME_DECLASSIFY(&data_len, sizeof(data_len));
-  CONSTTIME_DECLASSIFY(out, data_len);
-
-  // End of timing-sensitive code.
-
-  *out_len = data_len;
-  return 1;
-}
-
-static int aead_aes_128_cbc_sha1_tls_init(EVP_AEAD_CTX *ctx, const uint8_t *key,
-                                          size_t key_len, size_t tag_len,
-                                          enum evp_aead_direction_t dir) {
-  return aead_tls_init(ctx, key, key_len, tag_len, dir, EVP_aes_128_cbc(),
-                       EVP_sha1(), 0);
-}
-
-static int aead_aes_128_cbc_sha1_tls_implicit_iv_init(
-    EVP_AEAD_CTX *ctx, const uint8_t *key, size_t key_len, size_t tag_len,
-    enum evp_aead_direction_t dir) {
-  return aead_tls_init(ctx, key, key_len, tag_len, dir, EVP_aes_128_cbc(),
-                       EVP_sha1(), 1);
-}
-
-static int aead_aes_128_cbc_sha256_tls_init(EVP_AEAD_CTX *ctx,
-                                            const uint8_t *key, size_t key_len,
-                                            size_t tag_len,
-                                            enum evp_aead_direction_t dir) {
-  return aead_tls_init(ctx, key, key_len, tag_len, dir, EVP_aes_128_cbc(),
-                       EVP_sha256(), 0);
-}
-
-static int aead_aes_256_cbc_sha1_tls_init(EVP_AEAD_CTX *ctx, const uint8_t *key,
-                                          size_t key_len, size_t tag_len,
-                                          enum evp_aead_direction_t dir) {
-  return aead_tls_init(ctx, key, key_len, tag_len, dir, EVP_aes_256_cbc(),
-                       EVP_sha1(), 0);
-}
-
-static int aead_aes_256_cbc_sha1_tls_implicit_iv_init(
-    EVP_AEAD_CTX *ctx, const uint8_t *key, size_t key_len, size_t tag_len,
-    enum evp_aead_direction_t dir) {
-  return aead_tls_init(ctx, key, key_len, tag_len, dir, EVP_aes_256_cbc(),
-                       EVP_sha1(), 1);
-}
-
-static int aead_des_ede3_cbc_sha1_tls_init(EVP_AEAD_CTX *ctx,
-                                           const uint8_t *key, size_t key_len,
-                                           size_t tag_len,
-                                           enum evp_aead_direction_t dir) {
-  return aead_tls_init(ctx, key, key_len, tag_len, dir, EVP_des_ede3_cbc(),
-                       EVP_sha1(), 0);
-}
-
-static int aead_des_ede3_cbc_sha1_tls_implicit_iv_init(
-    EVP_AEAD_CTX *ctx, const uint8_t *key, size_t key_len, size_t tag_len,
-    enum evp_aead_direction_t dir) {
-  return aead_tls_init(ctx, key, key_len, tag_len, dir, EVP_des_ede3_cbc(),
-                       EVP_sha1(), 1);
-}
-
-static int aead_tls_get_iv(const EVP_AEAD_CTX *ctx, const uint8_t **out_iv,
-                           size_t *out_iv_len) {
-  const AEAD_TLS_CTX *tls_ctx = (AEAD_TLS_CTX *)&ctx->state;
-  const size_t iv_len = EVP_CIPHER_CTX_iv_length(&tls_ctx->cipher_ctx);
-  if (iv_len <= 1) {
-    OPENSSL_PUT_ERROR(CIPHER, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
-    return 0;
-  }
-
-  *out_iv = tls_ctx->cipher_ctx.iv;
-  *out_iv_len = iv_len;
-  return 1;
-}
-
-static const EVP_AEAD aead_aes_128_cbc_sha1_tls = {
-    SHA_DIGEST_LENGTH + 16,  // key len (SHA1 + AES128)
-    16,                      // nonce len (IV)
-    16 + SHA_DIGEST_LENGTH,  // overhead (padding + SHA1)
-    SHA_DIGEST_LENGTH,       // max tag length
-    0,                       // seal_scatter_supports_extra_in
-
-    NULL,  // init
-    aead_aes_128_cbc_sha1_tls_init,
-    aead_tls_cleanup,
-    aead_tls_open,
-    aead_tls_seal_scatter,
-    NULL,  // open_gather
-    NULL,  // get_iv
-    aead_tls_tag_len,
-};
-
-static const EVP_AEAD aead_aes_128_cbc_sha1_tls_implicit_iv = {
-    SHA_DIGEST_LENGTH + 16 + 16,  // key len (SHA1 + AES128 + IV)
-    0,                            // nonce len
-    16 + SHA_DIGEST_LENGTH,       // overhead (padding + SHA1)
-    SHA_DIGEST_LENGTH,            // max tag length
-    0,                            // seal_scatter_supports_extra_in
-
-    NULL,  // init
-    aead_aes_128_cbc_sha1_tls_implicit_iv_init,
-    aead_tls_cleanup,
-    aead_tls_open,
-    aead_tls_seal_scatter,
-    NULL,             // open_gather
-    aead_tls_get_iv,  // get_iv
-    aead_tls_tag_len,
-};
-
-static const EVP_AEAD aead_aes_128_cbc_sha256_tls = {
-    SHA256_DIGEST_LENGTH + 16,  // key len (SHA256 + AES128)
-    16,                         // nonce len (IV)
-    16 + SHA256_DIGEST_LENGTH,  // overhead (padding + SHA256)
-    SHA256_DIGEST_LENGTH,       // max tag length
-    0,                          // seal_scatter_supports_extra_in
-
-    NULL,  // init
-    aead_aes_128_cbc_sha256_tls_init,
-    aead_tls_cleanup,
-    aead_tls_open,
-    aead_tls_seal_scatter,
-    NULL,  // open_gather
-    NULL,  // get_iv
-    aead_tls_tag_len,
-};
-
-static const EVP_AEAD aead_aes_256_cbc_sha1_tls = {
-    SHA_DIGEST_LENGTH + 32,  // key len (SHA1 + AES256)
-    16,                      // nonce len (IV)
-    16 + SHA_DIGEST_LENGTH,  // overhead (padding + SHA1)
-    SHA_DIGEST_LENGTH,       // max tag length
-    0,                       // seal_scatter_supports_extra_in
-
-    NULL,  // init
-    aead_aes_256_cbc_sha1_tls_init,
-    aead_tls_cleanup,
-    aead_tls_open,
-    aead_tls_seal_scatter,
-    NULL,  // open_gather
-    NULL,  // get_iv
-    aead_tls_tag_len,
-};
-
-static const EVP_AEAD aead_aes_256_cbc_sha1_tls_implicit_iv = {
-    SHA_DIGEST_LENGTH + 32 + 16,  // key len (SHA1 + AES256 + IV)
-    0,                            // nonce len
-    16 + SHA_DIGEST_LENGTH,       // overhead (padding + SHA1)
-    SHA_DIGEST_LENGTH,            // max tag length
-    0,                            // seal_scatter_supports_extra_in
-
-    NULL,  // init
-    aead_aes_256_cbc_sha1_tls_implicit_iv_init,
-    aead_tls_cleanup,
-    aead_tls_open,
-    aead_tls_seal_scatter,
-    NULL,             // open_gather
-    aead_tls_get_iv,  // get_iv
-    aead_tls_tag_len,
-};
-
-static const EVP_AEAD aead_des_ede3_cbc_sha1_tls = {
-    SHA_DIGEST_LENGTH + 24,  // key len (SHA1 + 3DES)
-    8,                       // nonce len (IV)
-    8 + SHA_DIGEST_LENGTH,   // overhead (padding + SHA1)
-    SHA_DIGEST_LENGTH,       // max tag length
-    0,                       // seal_scatter_supports_extra_in
-
-    NULL,  // init
-    aead_des_ede3_cbc_sha1_tls_init,
-    aead_tls_cleanup,
-    aead_tls_open,
-    aead_tls_seal_scatter,
-    NULL,  // open_gather
-    NULL,  // get_iv
-    aead_tls_tag_len,
-};
-
-static const EVP_AEAD aead_des_ede3_cbc_sha1_tls_implicit_iv = {
-    SHA_DIGEST_LENGTH + 24 + 8,  // key len (SHA1 + 3DES + IV)
-    0,                           // nonce len
-    8 + SHA_DIGEST_LENGTH,       // overhead (padding + SHA1)
-    SHA_DIGEST_LENGTH,           // max tag length
-    0,                           // seal_scatter_supports_extra_in
-
-    NULL,  // init
-    aead_des_ede3_cbc_sha1_tls_implicit_iv_init,
-    aead_tls_cleanup,
-    aead_tls_open,
-    aead_tls_seal_scatter,
-    NULL,             // open_gather
-    aead_tls_get_iv,  // get_iv
-    aead_tls_tag_len,
-};
-
-const EVP_AEAD *EVP_aead_aes_128_cbc_sha1_tls(void) {
-  return &aead_aes_128_cbc_sha1_tls;
-}
-
-const EVP_AEAD *EVP_aead_aes_128_cbc_sha1_tls_implicit_iv(void) {
-  return &aead_aes_128_cbc_sha1_tls_implicit_iv;
-}
-
-const EVP_AEAD *EVP_aead_aes_128_cbc_sha256_tls(void) {
-  return &aead_aes_128_cbc_sha256_tls;
-}
-
-const EVP_AEAD *EVP_aead_aes_256_cbc_sha1_tls(void) {
-  return &aead_aes_256_cbc_sha1_tls;
-}
-
-const EVP_AEAD *EVP_aead_aes_256_cbc_sha1_tls_implicit_iv(void) {
-  return &aead_aes_256_cbc_sha1_tls_implicit_iv;
-}
-
-const EVP_AEAD *EVP_aead_des_ede3_cbc_sha1_tls(void) {
-  return &aead_des_ede3_cbc_sha1_tls;
-}
-
-const EVP_AEAD *EVP_aead_des_ede3_cbc_sha1_tls_implicit_iv(void) {
-  return &aead_des_ede3_cbc_sha1_tls_implicit_iv;
-}
diff --git a/src/crypto/cipher/get_cipher.cc b/src/crypto/cipher/get_cipher.cc
deleted file mode 100644
index 2622dc7..0000000
--- a/src/crypto/cipher/get_cipher.cc
+++ /dev/null
@@ -1,85 +0,0 @@
-// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
-//
-// 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
-//
-//     https://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 <openssl/cipher.h>
-
-#include <assert.h>
-#include <string.h>
-
-#include <openssl/err.h>
-#include <openssl/mem.h>
-#include <openssl/nid.h>
-
-#include "internal.h"
-#include "../internal.h"
-
-
-static const struct {
-  int nid;
-  const char *name;
-  const EVP_CIPHER *(*func)(void);
-} kCiphers[] = {
-    {NID_aes_128_cbc, "aes-128-cbc", EVP_aes_128_cbc},
-    {NID_aes_128_ctr, "aes-128-ctr", EVP_aes_128_ctr},
-    {NID_aes_128_ecb, "aes-128-ecb", EVP_aes_128_ecb},
-    {NID_aes_128_gcm, "aes-128-gcm", EVP_aes_128_gcm},
-    {NID_aes_128_ofb128, "aes-128-ofb", EVP_aes_128_ofb},
-    {NID_aes_192_cbc, "aes-192-cbc", EVP_aes_192_cbc},
-    {NID_aes_192_ctr, "aes-192-ctr", EVP_aes_192_ctr},
-    {NID_aes_192_ecb, "aes-192-ecb", EVP_aes_192_ecb},
-    {NID_aes_192_gcm, "aes-192-gcm", EVP_aes_192_gcm},
-    {NID_aes_192_ofb128, "aes-192-ofb", EVP_aes_192_ofb},
-    {NID_aes_256_cbc, "aes-256-cbc", EVP_aes_256_cbc},
-    {NID_aes_256_ctr, "aes-256-ctr", EVP_aes_256_ctr},
-    {NID_aes_256_ecb, "aes-256-ecb", EVP_aes_256_ecb},
-    {NID_aes_256_gcm, "aes-256-gcm", EVP_aes_256_gcm},
-    {NID_aes_256_ofb128, "aes-256-ofb", EVP_aes_256_ofb},
-    {NID_des_cbc, "des-cbc", EVP_des_cbc},
-    {NID_des_ecb, "des-ecb", EVP_des_ecb},
-    {NID_des_ede_cbc, "des-ede-cbc", EVP_des_ede_cbc},
-    {NID_des_ede_ecb, "des-ede", EVP_des_ede},
-    {NID_des_ede3_cbc, "des-ede3-cbc", EVP_des_ede3_cbc},
-    {NID_rc2_cbc, "rc2-cbc", EVP_rc2_cbc},
-    {NID_rc4, "rc4", EVP_rc4},
-};
-
-const EVP_CIPHER *EVP_get_cipherbynid(int nid) {
-  for (size_t i = 0; i < OPENSSL_ARRAY_SIZE(kCiphers); i++) {
-    if (kCiphers[i].nid == nid) {
-      return kCiphers[i].func();
-    }
-  }
-  return NULL;
-}
-
-const EVP_CIPHER *EVP_get_cipherbyname(const char *name) {
-  if (name == NULL) {
-    return NULL;
-  }
-
-  // This is not a name used by OpenSSL, but tcpdump registers it with
-  // |EVP_add_cipher_alias|. Our |EVP_add_cipher_alias| is a no-op, so we
-  // support the name here.
-  if (OPENSSL_strcasecmp(name, "3des") == 0) {
-    name = "des-ede3-cbc";
-  }
-
-  for (size_t i = 0; i < OPENSSL_ARRAY_SIZE(kCiphers); i++) {
-    if (OPENSSL_strcasecmp(kCiphers[i].name, name) == 0) {
-      return kCiphers[i].func();
-    }
-  }
-
-  return NULL;
-}
diff --git a/src/crypto/cipher/internal.h b/src/crypto/cipher/internal.h
deleted file mode 100644
index 3b0fb7c..0000000
--- a/src/crypto/cipher/internal.h
+++ /dev/null
@@ -1,240 +0,0 @@
-// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
-//
-// 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
-//
-//     https://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 OPENSSL_HEADER_CRYPTO_CIPHER_INTERNAL_H
-#define OPENSSL_HEADER_CRYPTO_CIPHER_INTERNAL_H
-
-#include <assert.h>
-#include <stdlib.h>
-
-#include <openssl/base.h>
-
-#include "../internal.h"
-
-#if defined(__cplusplus)
-extern "C" {
-#endif
-
-
-// EVP_tls_cbc_get_padding determines the padding from the decrypted, TLS, CBC
-// record in |in|. This decrypted record should not include any "decrypted"
-// explicit IV. If the record is publicly invalid, it returns zero. Otherwise,
-// it returns one and sets |*out_padding_ok| to all ones (0xfff..f) if the
-// padding is valid and zero otherwise. It then sets |*out_len| to the length
-// with the padding removed or |in_len| if invalid.
-//
-// If the function returns one, it runs in time independent of the contents of
-// |in|. It is also guaranteed that |*out_len| >= |mac_size|, satisfying
-// |EVP_tls_cbc_copy_mac|'s precondition.
-int EVP_tls_cbc_remove_padding(crypto_word_t *out_padding_ok, size_t *out_len,
-                               const uint8_t *in, size_t in_len,
-                               size_t block_size, size_t mac_size);
-
-// EVP_tls_cbc_copy_mac copies |md_size| bytes from the end of the first
-// |in_len| bytes of |in| to |out| in constant time (independent of the concrete
-// value of |in_len|, which may vary within a 256-byte window). |in| must point
-// to a buffer of |orig_len| bytes.
-//
-// On entry:
-//   orig_len >= in_len >= md_size
-//   md_size <= EVP_MAX_MD_SIZE
-void EVP_tls_cbc_copy_mac(uint8_t *out, size_t md_size, const uint8_t *in,
-                          size_t in_len, size_t orig_len);
-
-// EVP_tls_cbc_record_digest_supported returns 1 iff |md| is a hash function
-// which EVP_tls_cbc_digest_record supports.
-int EVP_tls_cbc_record_digest_supported(const EVP_MD *md);
-
-// EVP_sha1_final_with_secret_suffix computes the result of hashing |len| bytes
-// from |in| to |ctx| and writes the resulting hash to |out|. |len| is treated
-// as secret and must be at most |max_len|, which is treated as public. |in|
-// must point to a buffer of at least |max_len| bytes. It returns one on success
-// and zero if inputs are too long.
-//
-// This function is exported for unit tests.
-OPENSSL_EXPORT int EVP_sha1_final_with_secret_suffix(
-    SHA_CTX *ctx, uint8_t out[SHA_DIGEST_LENGTH], const uint8_t *in, size_t len,
-    size_t max_len);
-
-// EVP_sha256_final_with_secret_suffix acts like
-// |EVP_sha1_final_with_secret_suffix|, but for SHA-256.
-//
-// This function is exported for unit tests.
-OPENSSL_EXPORT int EVP_sha256_final_with_secret_suffix(
-    SHA256_CTX *ctx, uint8_t out[SHA256_DIGEST_LENGTH], const uint8_t *in,
-    size_t len, size_t max_len);
-
-// EVP_tls_cbc_digest_record computes the MAC of a decrypted, padded TLS
-// record.
-//
-//   md: the hash function used in the HMAC.
-//     EVP_tls_cbc_record_digest_supported must return true for this hash.
-//   md_out: the digest output. At most EVP_MAX_MD_SIZE bytes will be written.
-//   md_out_size: the number of output bytes is written here.
-//   header: the 13-byte, TLS record header.
-//   data: the record data itself
-//   data_size: the secret, reported length of the data once the padding and MAC
-//     have been removed.
-//   data_plus_mac_plus_padding_size: the public length of the whole
-//     record, including padding.
-//
-// On entry: by virtue of having been through one of the remove_padding
-// functions, above, we know that data_plus_mac_size is large enough to contain
-// a padding byte and MAC. (If the padding was invalid, it might contain the
-// padding too. )
-int EVP_tls_cbc_digest_record(const EVP_MD *md, uint8_t *md_out,
-                              size_t *md_out_size, const uint8_t header[13],
-                              const uint8_t *data, size_t data_size,
-                              size_t data_plus_mac_plus_padding_size,
-                              const uint8_t *mac_secret,
-                              unsigned mac_secret_length);
-
-#define POLY1305_TAG_LEN 16
-
-// For convenience (the x86_64 calling convention allows only six parameters in
-// registers), the final parameter for the assembly functions is both an input
-// and output parameter.
-union chacha20_poly1305_open_data {
-  struct {
-    alignas(16) uint8_t key[32];
-    uint32_t counter;
-    uint8_t nonce[12];
-  } in;
-  struct {
-    uint8_t tag[POLY1305_TAG_LEN];
-  } out;
-};
-
-union chacha20_poly1305_seal_data {
-  struct {
-    alignas(16) uint8_t key[32];
-    uint32_t counter;
-    uint8_t nonce[12];
-    const uint8_t *extra_ciphertext;
-    size_t extra_ciphertext_len;
-  } in;
-  struct {
-    uint8_t tag[POLY1305_TAG_LEN];
-  } out;
-};
-
-#if (defined(OPENSSL_X86_64) || defined(OPENSSL_AARCH64)) &&  \
-    !defined(OPENSSL_NO_ASM)
-
-static_assert(sizeof(union chacha20_poly1305_open_data) == 48,
-              "wrong chacha20_poly1305_open_data size");
-static_assert(sizeof(union chacha20_poly1305_seal_data) == 48 + 8 + 8,
-              "wrong chacha20_poly1305_seal_data size");
-
-inline int chacha20_poly1305_asm_capable(void) {
-#if defined(OPENSSL_X86_64)
-  return CRYPTO_is_SSE4_1_capable();
-#elif defined(OPENSSL_AARCH64)
-  return CRYPTO_is_NEON_capable();
-#endif
-}
-
-// chacha20_poly1305_open is defined in chacha20_poly1305_*.pl. It decrypts
-// |plaintext_len| bytes from |ciphertext| and writes them to |out_plaintext|.
-// Additional input parameters are passed in |aead_data->in|. On exit, it will
-// write calculated tag value to |aead_data->out.tag|, which the caller must
-// check.
-#if defined(OPENSSL_X86_64)
-extern void chacha20_poly1305_open_sse41(
-    uint8_t *out_plaintext, const uint8_t *ciphertext, size_t plaintext_len,
-    const uint8_t *ad, size_t ad_len, union chacha20_poly1305_open_data *data);
-extern void chacha20_poly1305_open_avx2(
-    uint8_t *out_plaintext, const uint8_t *ciphertext, size_t plaintext_len,
-    const uint8_t *ad, size_t ad_len, union chacha20_poly1305_open_data *data);
-inline void chacha20_poly1305_open(uint8_t *out_plaintext,
-                                   const uint8_t *ciphertext,
-                                   size_t plaintext_len, const uint8_t *ad,
-                                   size_t ad_len,
-                                   union chacha20_poly1305_open_data *data) {
-  if (CRYPTO_is_AVX2_capable() && CRYPTO_is_BMI2_capable()) {
-    chacha20_poly1305_open_avx2(out_plaintext, ciphertext, plaintext_len, ad,
-                                ad_len, data);
-  } else {
-    chacha20_poly1305_open_sse41(out_plaintext, ciphertext, plaintext_len, ad,
-                                 ad_len, data);
-  }
-}
-#else
-extern void chacha20_poly1305_open(uint8_t *out_plaintext,
-                                   const uint8_t *ciphertext,
-                                   size_t plaintext_len, const uint8_t *ad,
-                                   size_t ad_len,
-                                   union chacha20_poly1305_open_data *data);
-#endif
-
-// chacha20_poly1305_open is defined in chacha20_poly1305_*.pl. It encrypts
-// |plaintext_len| bytes from |plaintext| and writes them to |out_ciphertext|.
-// Additional input parameters are passed in |aead_data->in|. The calculated tag
-// value is over the computed ciphertext concatenated with |extra_ciphertext|
-// and written to |aead_data->out.tag|.
-#if defined(OPENSSL_X86_64)
-extern void chacha20_poly1305_seal_sse41(
-    uint8_t *out_ciphertext, const uint8_t *plaintext, size_t plaintext_len,
-    const uint8_t *ad, size_t ad_len, union chacha20_poly1305_seal_data *data);
-extern void chacha20_poly1305_seal_avx2(
-    uint8_t *out_ciphertext, const uint8_t *plaintext, size_t plaintext_len,
-    const uint8_t *ad, size_t ad_len, union chacha20_poly1305_seal_data *data);
-inline void chacha20_poly1305_seal(uint8_t *out_ciphertext,
-                                   const uint8_t *plaintext,
-                                   size_t plaintext_len, const uint8_t *ad,
-                                   size_t ad_len,
-                                   union chacha20_poly1305_seal_data *data) {
-  if (CRYPTO_is_AVX2_capable() && CRYPTO_is_BMI2_capable()) {
-    chacha20_poly1305_seal_avx2(out_ciphertext, plaintext, plaintext_len, ad,
-                                ad_len, data);
-  } else {
-    chacha20_poly1305_seal_sse41(out_ciphertext, plaintext, plaintext_len, ad,
-                                 ad_len, data);
-  }
-}
-#else
-extern void chacha20_poly1305_seal(uint8_t *out_ciphertext,
-                                   const uint8_t *plaintext,
-                                   size_t plaintext_len, const uint8_t *ad,
-                                   size_t ad_len,
-                                   union chacha20_poly1305_seal_data *data);
-#endif
-
-#else
-
-inline int chacha20_poly1305_asm_capable(void) { return 0; }
-
-inline void chacha20_poly1305_open(uint8_t *out_plaintext,
-                                   const uint8_t *ciphertext,
-                                   size_t plaintext_len, const uint8_t *ad,
-                                   size_t ad_len,
-                                   union chacha20_poly1305_open_data *data) {
-  abort();
-}
-
-inline void chacha20_poly1305_seal(uint8_t *out_ciphertext,
-                                   const uint8_t *plaintext,
-                                   size_t plaintext_len, const uint8_t *ad,
-                                   size_t ad_len,
-                                   union chacha20_poly1305_seal_data *data) {
-  abort();
-}
-#endif
-
-
-#if defined(__cplusplus)
-}  // extern C
-#endif
-
-#endif  // OPENSSL_HEADER_CRYPTO_CIPHER_INTERNAL_H
diff --git a/src/crypto/cipher/test/aes_128_cbc_sha1_tls_implicit_iv_tests.txt b/src/crypto/cipher/test/aes_128_cbc_sha1_tls_implicit_iv_tests.txt
deleted file mode 100644
index 6c98e0c..0000000
--- a/src/crypto/cipher/test/aes_128_cbc_sha1_tls_implicit_iv_tests.txt
+++ /dev/null
@@ -1,4477 +0,0 @@
-# Generated by
-#   go run make_legacy_aead_tests.go -cipher aes128 -mac sha1 -implicit-iv
-#
-# Note: aead_test's input format splits the ciphertext and tag positions of the
-# sealed input. But these legacy AEADs are MAC-then-encrypt and so the 'TAG' may
-# also include padding. We write the byte length of the MAC to 'TAG_LEN' and
-# include the unencrypted MAC in the 'DIGEST' tag above # each test case.
-# each test case.
-
-# Test with non-minimal padding.
-# DIGEST: 7f3a0e20bde700d3c5596909282e5c3e764c99e7
-KEY: 86d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e
-NONCE: 
-IN: 936a91d0b5
-AD: d2c0267218cb7090c61713
-CT: c6281c1cd5
-TAG: 62c1935946013b946a2342f00e08a2a3e0f0bf6c98426dce5d0ff98773f9560831e8ef348f50b35a2fbbf2
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with bad padding values.
-# DIGEST: 7f3a0e20bde700d3c5596909282e5c3e764c99e7
-KEY: 86d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e
-NONCE: 
-IN: 936a91d0b5
-AD: d2c0267218cb7090c61713
-CT: c6281c1cd5
-TAG: 62c1935946013b946a23427970932c1b21fc2d10118e7e685e8af3
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# Test with no padding.
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# Test with maximal padding (0 mod 64).
-# DIGEST: ceb2d295bd0efd37c6c34dab1854c80e986174fc
-KEY: 37446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11b
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba
-AD: 2fd6773e0d0c302a5f47e0
-CT: 2840fb36bc8e03c59de49315bd8a6e091f41fb020cdb174ed0ab84fab8f94c14e840fd37fc13f48490c2d2ffd4efeb4da8d98840f6ee5af812bcbbeeb7f2992b
-TAG: a767b9c80eb4ab9270c0c08d6adc1bf56245929a79a4511a8a4ccd2c996611a0154c8101217b46b049331d3109a42093f223a8224e11fcecee906b2ef52e5650da0498e3f832101b7ef66fdbcef302f362e570e5e42d5dbc33d0d662913c78a8caf3a9e2e22949cf6d212efee4d9dc8d03fd6a00d41f3073c4b73149e8bf05d23b2dd88aab1c87ac948a3f96be79c52efe9488ceb9a1c5511b441a6ba4204beaf339539ff9b4443000b5b7c00261c663be3087c395ee448e724d1cfcbe10e15ccddcf50378fef972fa3aca38fdb1d131f1bc7ce166f4476a008883292f8422cc668e1c8e0cd53cb25a64324d187b14143563d8d1af9371602a068da959c587cd6a383d1ffc74190c0499b2d71390cdcf
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (1 mod 64).
-# DIGEST: a07054c760cc66fc704edf950201005031f3faac
-KEY: 446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be1
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2f
-AD: d6773e0d0c302a5f47e037
-CT: 2e7e6cd84e03e35d8977c9e1d4ce6784c4db3a87fa1b82e6f781e284e0d3914eb56acdde0374eed6283cc10e1f329821fefbf888dfc8fb42fa574cb64df6d88d2d
-TAG: 80503493bfa3c2cd3817bb145fc579ebe050bf0e6310a29c9e1a7e98371833a25bea5c82bb6128cba6e27e7e796b49b49cd55ad123f90aade4d76a636104e5a4f6fc9c92997c0706d709145b208523c0c890394fcec38507fa0bad3d24fdc921416501e5c9b6964db81572bb933b67c4b5bb2070ad5068069592d35902ab93bad8d5121fe15bbb2bd27ad946a21f2ecd7e95c7f4c63ddd00589ac304d638307e798d9a55bfde231f5bd8a8f89cfae591b0234662647c3b42278f4157c4fb44fcc51862bbb2f03273f680d6dccee49b51bb4b881e5a1768dbc537e67073b796047fbce6f90eb54776d9f0237978f129af7efd4a3f380547e883d9976b38819acf9e0411769fc6898eaeca53f5def25f
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (2 mod 64).
-# DIGEST: d059c266cf6233af730b7a229b19356a4c6fcf06
-KEY: 6f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6
-AD: 773e0d0c302a5f47e03744
-CT: be77b79780ae8ccda54d5f995f7c1beee8ac61735285e34d9dd137058555e723daeafe392773f428ec528a14c2f52a86365c4929d98d4504c669db1d984e2f84f7bf
-TAG: 24836360777dbacbbcea10d08e3d975a0bd32669871000178d167a1e40a6723b7c47ebd32e5df52cc4e0ee5459b355f285a0a93bd9fd016642221a335a2f09a4635f71d8575bdd081caa14b083aed01444df63e5cb01377b8a3ac31006c92621a894b71d50c85964234a5aae094a931e5456416236001f46d771767aee47f6b7c3493fc10b9f392dd629852623c1ff6f1e7dd3346d1aabd132301fa16ce88017fe3ca394d1c685942f1ed7b37f84a25682142b02ce138ae9b21c85db410cc3c266f6a490ffdaa0ce95e8b1f2da7f6e6ddda2d4570dc5619605fca903e47eb62d7419dfe49f354ac18762abbdfe5431a863b6f7371731ebb09ab41aba79e41be8603060fe921e4dc8b7f422392640
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (3 mod 64).
-# DIGEST: 8aac0687e33041fcc18da154b41f20a6af2bfb28
-KEY: 5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a7
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd677
-AD: 3e0d0c302a5f47e037446f
-CT: 82aba2e22933737ef55346865375b574f24066eabe39fb800ec790df3ad05f85a760332e8a1d45e7b0c2d969ac5689505510fe035db4ac1c5a8a01a6f6ac00ad3d8344
-TAG: 090114b0a31c301edc2bed8e25298d4f913558ce3f6f607b0fce5f9e7b1c953601ce9890f0d8e8d6a71c5ccc4e0aab08942628d21f467bfbfc4996863e8fd296b7ce153568999980ac2980ca68b16c0b2edfe5efcfff121a7e4dfc8dd9387442c4847f7c572f668aa990334dc50a54480f673c338f1ea9c81cfb9d482f6e4ae163e412108ad5775aefe89173229efd58a0f56b411008f87e3aa307413779538057f5d846a1586920b1448b4fda27b65647b946bd5b7950a5e3e37ccca55b359b4726e26fc3d168a9e8bef56c1a61fcb2b55cca61bac0123190572c939584ffae1e913b82bbd8057f302a900d2a1a7ed1ab4a1b7c8c5cd56fc472d69d013bb897ea3d72d299da0df5fcc7a745dc
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (4 mod 64).
-# DIGEST: 53658226c112b86438dd27b58a71f9e36fc73c1e
-KEY: 91d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a729
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e
-AD: 0d0c302a5f47e037446f58
-CT: 3eceac2e338b4dfd9f4840d77db69ed23ee286b522cd4a324b04b1865cc772914c8d84abbf0db1a3a2d15401759b18d6fb3b7020cca1e31d136fb97b26bc772baf5a363c
-TAG: 1b6a98c7f9b8c5c560add0eb46d2d7559ebce0894b876f0de8ec37031df30667cc3ea54a4e71d8bcfe575d6044d9f70852fcf9a1a6756643e28944b59856ed1ce9958045eae0aa64bba55b64aac0cacded741293262550b085b4cb143d8bb8f7061eda2911c86e1afce94a8afb4db1060c2da1e9bb0ca8747d71b706134e44bb7e4b73518ca9201d610860961a53438d6efb51031a1ba0fa9b437b8a3aebc0479bace7843b319c02b4987490bed351be2eced028a2d0c97a1e30ccbd820f4b3f669e33b74c1b550a8d9782b9ec7fa45b24dcd5b6788895d6246a4cdfb015c605741047c1d2323e207a8a622e55b6a19401bb67de62154392edb28ab3cdfbb2ae2f21c3181ee8033130e95e05
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (5 mod 64).
-# DIGEST: 6b7d5268b0b5037afb5be5af6a0ceb34e7656ac4
-KEY: d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d
-AD: 0c302a5f47e037446f5891
-CT: 5cfcf9e4dbe1a74e748665bf393c6fe93807ea36556590a1f2814c2b445988c1f6c2815f6b1f0fecae452d1bb89a055bc6f85bea11d99d0b0c62db8a81e3f0f3a557c208cd
-TAG: 8e73adba964c6868bb3da63b0d528a22eea8bfb4be0b1030070436f5c442649857c9c4a32759c5071d7d741692368497a978b5668b912cdfb0c404e514411ff111ea9f1224cb4a9256dc57a8a4677fe576b554cf6e4f975ac3a81eefcaa0bb68ac5bb26b1bf54bf034a50a1b3265e0baa8a900f048246c7ea825234732c3f5b34c4ddc0adc46178d0adbd9a524502061ad4c6df62dcd8f8851f270dc452be39021d5f054b7aa35f5235739894c659bc06333d0e564c38521d820dd7cb0dbb8a018543ebe7799cbd674a14821a6f92d776aed736fb4ce19ffe6ad5b456c09cc597443ae1bb41be9ea0213edfc1339636facbfdf56a8944cc548fd35fd5fa4a7b8cfbce736c6c96465326a49
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (6 mod 64).
-# DIGEST: 63efe7af502231420ed5aecce9a28446b257828d
-KEY: 7df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c
-AD: 302a5f47e037446f5891d7
-CT: b2e315ef97a1b89b4625715c61946446fe1bf27aa60e65d0ad9849f71ec53ccbee951d3628efe2795949f88795b354df0ec68b21cd699cdd0f92f31f3d6013a4c1116165b4f5
-TAG: 4e9eb0387d9121ea239b27016805f35c09c90904d9becd9ce23d77233e8b68c86e17f92ac31794be17386e5fe2f40e83147a7dea38bee4b9776fb4a4da85408b80ea7718d542a47e7e5d7db38c18560dbc37d49f4fae2e013c4b89ab59f2a529b389e2ce5b2c9f0883df472fb9ac58bc5e27dc21938344195de25f1e3c015b68e6c6f6111e037010a075e78e852f9b0b8e568359ba22eddd71714403309987ed20e381b8ff67f5fd5d9e8ce77b1517da2cd4c2909f83fe70b65af0ba8dfff1e0860ccd217a19a96d94ef3cfbe1214e204d4eab8045f97aaeae0946b455e01099513c5a763596c7495de135bd2ea2b9c01e7fcc5daa0e88bcb45ce5bd044dc300a281b2bfd18f6090f7eb
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (7 mod 64).
-# DIGEST: 1a555c300a1d1bd5b03cdd6bf2a678621624eb05
-KEY: f660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b5
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c30
-AD: 2a5f47e037446f5891d77d
-CT: 8221477092da15c94ec15f34ef2d540c87ab24236ee4d97ed3543f49f2daec059be7c0f157f2d869bae0bd4b9d214bd40ed01484c28019d6349cac27db29050831e5974b5426a9
-TAG: 9f10a7816f0b558aaed826c53d63677dc443bd48fe1faf9d8e8542db0b3959d6754d0771ce1a23d67561626c7c521401c0a8882656ded33ace7965f5978bfa1c960ed9eb3831f45d28a4fb0ea44cbd9118f39eddbe3c56886bb4bd6593e13f2bf641e88adccaf76ab0356cb77654a1b27597b1b5fbbbf15b6c7673d92aa7073745721a299797b77c5b205ee44da405d634f971abf26bd7cffb21cd6f952eec7bc214d6ee0a31622c78259ba14072536751b87b968cc5e6ecb21d1b64c53f7ac24dd9344c2a03dbea3c5704bd283a8d28eb2ba5e4dc1b16a0edd6f4cb76aaf746b1a987d58ed73eb2b266a148ddbc033bd45712a3101f7b536d2d902b7e124e199442b149e3b603f199
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (8 mod 64).
-# DIGEST: de9156349b578f2f44945ec6a676a67a829daea1
-KEY: 60ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a
-AD: 5f47e037446f5891d77df6
-CT: 8a9f0d731d72929136ed9e6993cbb28013b336540f602c7203e6a38391dc07c8c3ce5b4ca62df582dea366c4b0b5aaabcf1959a7f0bc92047023c72225f5c071a588d95774f2e2c1
-TAG: 84d60af507164a4f4958b6aed0525028918bba60b4affc1afea92c0ef485679506ffdf649b0d9bcefcfb8f1503b2e48937a3e732785d85b11a524363a55fc994e756148a3b7b2772881aaceee2ffeb0f18bd85feb215fc8352dc76d8ab5255d56db5e9f10c42b4a3447321d459ed20e536062a33e6cc598a61b905bcd579e6d68cbdfb94c3b100e05bc0009b9841fca15d909de6897276f9177cce5b049c45954b7cddb7610127c9dd40a61bd8e47b7a165940ef3084a0b523955741414a12d34aed68db231db939b1417069516333b2c0c57e843f098a55e375639ebd2acf658de1f385a1e29c5eb9efe14c16e29488a32bbfd127592c7c45807f2b3e8f57144b9cf60130592b62
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (9 mod 64).
-# DIGEST: 12812df3aa7f3bbc899f6f248f5590e02570c292
-KEY: ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f
-AD: 47e037446f5891d77df660
-CT: e3af374fb6f33c64fc2e4cc1e1b635bbe890f02359b6adb2a747beda433e003e30e1803f2169ff6abc81ff8095601cdff7aebae5fd8fc012387a70dd7db18e7eb79f87fcc1821ffdf6
-TAG: 4f9730c5eeb9cb32e005afc571d2ed5b2de38670704f854c838d00584becf8583ee7e79d9609bb73abb70bd01ab228bcf6070ee1c1c97d4f6003f6a3ccb4b8af43dfb37bbeb707e1efa51b0447e6b31e82a3fecaacad99014a8d502c3db8a36665f85d62938de6ffe30c4749535bb124129caa1fa465d04c1005e64f7f4397607b4e6fc31b9c34961b7276185fc3211eda045c06a28aec0a1e0a0e2f1f6829a1ab372d0bedd711158696b062b9dcfbff4925dca71d4ad7f7c610d40bfc6e7d04f4990d6efdd059679c7137b5f5d28c9784fca307e2e1df33dfec10a242379ff30984c62c201738edd60007c9d56557692e8f73e5d0c83059d568312b3504de9691ad3d9b30a4a2
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (10 mod 64).
-# DIGEST: f3c89f21c327fca4aa400fabea9e39780378e901
-KEY: 82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fa
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47
-AD: e037446f5891d77df660ed
-CT: 98b22a9119610480bdfc5cb6e2a950ccac8741690574730b87fbeb113d5daac699c333ff21efd0e73d2252e95f64dd2699b940b490259cb5fd698756713c0e53ff69a733ea13587cbcb6
-TAG: 63600a3d7fe8a782af7af230da63bc84dd993bcffaa5f76e5f63ef56407d0412b831dab138d117fbc081139cc49946a7631f488c11946c10530806ce7a781baa3bd072300a5cdf8aaa3b2657ea3732c1e24271c447e6d7f6a2afa0bef27aada30585c33479debc10cb72febb181c7f5f77490b339285bfbb0bf07c545ed5a0f3f183fefdc7138e330095636956328ab85a201e3cd6a2edc573d75327bdf615ffc8e6fd5e133558b831e24b67751098320e9afdfe7c7ef4598c29563113052c568263612fdc3c48d8e9a8a407bc2918ede467636dc0185d9423e9eaefef4126247012d5f1930c56dd9dd7c34d397f388e4f741953d76bb1eec911079936a8dfc584fb5b7c84e4
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (11 mod 64).
-# DIGEST: e8e41988fad6c8b44c56544964cfe0a347b35b1e
-KEY: 933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e0
-AD: 37446f5891d77df660ed82
-CT: 8795d6c225aa78fccaaff86101641081f4a440969633ca8d7830ffb14f629fa34dc4c15e8ff20a8940c7a484ee94503372e658615eb3fc07c2d2c399ae9ad7a77d684512d0ca273f77fcfe
-TAG: 534574a93db9658b653cd395e981cd4a8992e817ba058f692c5f0c1682745097ed441781afe30827bcaa29d061e2d1554a949cf7b62077b768bc1ca8679618a5d2b32c0b7e735db6a27fd762a60aa19e60a60a9edb02f20e3e99fd4653732525a0c8d8042bd3ba5387f93a7e0da483173b3abcd3ff876badd75b81741abfe2baf21be1006d1cb85bc543ddc7493f8faf4e27619686ba324cf651a16e7ffc23ae7786eb8823300a5c65982228aecde99f53d43f86d9ec0d326eb3ece9f6cf1c6bf92d1599c5f9c391e9ba189195665d3018c38207717502bb60e020773618df614bb4e0309fa0809ab215f68f0d9d46c28950d3edad6c4f71dd5af9d03dfa39ae62482601ff
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (12 mod 64).
-# DIGEST: d1c7b2c04dc25fe7b742a1d659aec20e1475ee4f
-KEY: 3f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037
-AD: 446f5891d77df660ed8293
-CT: 694868cf990a1b8ef42fcb2b45cabf1bd78eee4b429c11b27a827762b9c319bc54a2b2c8eb2ac85063ef8ac7da8bc35b16c0a98822981dc9b246381780da7833eb718bc8518e2b176656ff5c
-TAG: ca1dc8a003fd389a1eb1cfa4bf9746cdf45c548f8e52e0bb0dd456c1369686e0975fada75cd8fb261a01828fa1375941dcd8c718f82d6b64222dfbf7143ce980f3936b78e525c961b7d72d5d68127d0f98de541853ae36408ac489c5629c82f00a44dbdc89d665f94fb391c4a0618f31df9bcf39a07325b600265daaf53c2762396f9f6e83fb4f545aefaaeb447d4162ad401e1da2ec090d78d7b354d80fa975dcea9b897fc0f16681cd9a1aedc78cdcbf26249e18132e518b75849af55de38562ac32c50819a35156706510688f3a81e13e3bd5f61a0c2a8655c251f4732258c3cf34694be21caad599996c9a13303be173f916e90f606dfe1640bcf35e892eab6ca70f59ca019d27c58cb69b4cb3bcd484198d
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (13 mod 64).
-# DIGEST: 116e20ff1e79e0af464d473b1e7c187f4dd66007
-KEY: 62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be90
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e03744
-AD: 6f5891d77df660ed82933f
-CT: f2e78e183884c99ad7f199a02d87a1026c832b9a953919a98c2487bd0d724be407994fcce9e19b5a69f15ceef5d3b95c79d5fffede18a143cdfade5c0f80254cb38e47cc9c82488116640aebe9
-TAG: 11f4ab3470df6f43596f9275964c3ecc22543daebbdb99004eb6c1e001b2119ef9b247f30481117102a179a7ca72c556a029b77d0ee2167190923012aef527b8a432576f8948a7dc77ebb79fc7a9dd1d981a4bab9c00e498c09902ffb9362113f6ad3ac6c1f792fe27d3a71aa19b9f769f2417ada3d303e3fd2600484c9f6b43e4ad834e60ce4d4885088087a96eb52ad989a9e9a43aa53a78e513743a8f08cb472a144af5a6abc17f217715e074aa470ba71d2b1b75e4ff3f597c4d1993412d37f94989c1df016f72b26c8d58d78a8a3295108e9bc061facdbc4c708a1d7e7c95bb8e365d4e933c0e519d08abef948abb67c5a3ebe938b91613ae9bcb6079436af3acbbdfacf77e8b935686d4ef7ed47b5b10
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (14 mod 64).
-# DIGEST: c081d0d09b2c9eb39a372ef4a7b0246a0956b0f9
-KEY: be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f
-AD: 5891d77df660ed82933f62
-CT: c7de96bb45663dfe6da2a64ffc9ddfa7c3dc63077079bd4bc2ce52fea89924a75664782a5026fb5a099ec460eb9c6d7c3d5ea383092c8f4c67a70fc499a7689bfc27df4da7c185d573e6f8d70cc6
-TAG: 1d6cf11ee4afa8efb4e025dc32e0c73a6fcda2aa5c892031c7fde0d0d69e38e9e64e88a714184fbe73ca0f1dfd35ba3b0378a474cb4aaeb942a529cd199e20b7dd62654b97d92dc317975d5e26ca1378d41799a127c44a157982dc3677a4dd391e22b6906d303c2c60cde6052ffbdbe5f8bce22bc2ee42975f9892b68f228cb1f584b1a3fb2f15cb7bcf3d9650e72e796c46f7738986be7f7c30dc56c179299c9c368090f68b96735673f2279366122e5cd94d8d4ca2cbeddc3502d833bb365756cd511577a7499c199f403ce114ae47aabd351bd27e4595e3955e1d1c617a3d0ca2d6e4a2bc3275f5ef706fc4e02e48719958d37d172ad1473878686fca9420dafc83e0baaa9aefb1e50c98d6006ead6bd7
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (15 mod 64).
-# DIGEST: 6f7bb1f9e2772eb909c315e653e4737cfed78a18
-KEY: 8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f58
-AD: 91d77df660ed82933f62be
-CT: 3a77c0f70f9044fb3817d57be4f4e5ee4b27ffa586327f77c18346f9fef2608a552b551ac549f9e8d47c4959196162862fe2a35e44581971c2974d4a65a47ae719a7f5f070ad902b8a9e022abcf303
-TAG: 825fc7dd84de7f3bcc941d0234090a9409e47dda077e0f3fd000965bde1d4ff30e15b23affe14d94515629f8c018d085f41aa3ebfd0498f621593d57aaec4bdd0e22df21668451b098429967c8eb8789f92a5578d177e5d2e326fc14fff272eb90368d56a777849cc5a1d54c6a458d32c26f4cf99e0f80c91e6df29aa53edb03df176b9873f5827686faf26dbb038813a8170f59e3ad85ad698308748d112b7fbca45156a4410cf32fb34fbbf27b66dddc0680f2bcd7cac6b8cefa83945fad84f77a396630029e6bfe9f15cbf5a884332de5ea7f558d783858c18761983080c13f9c06be367ad856cf159656ad140e84d6af4b4c3517b90f5ec0a8e6fe18d42ce3d194f695f9b7440d4118b8170705b766
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (16 mod 64).
-# DIGEST: 172f4992e692a88f49628e5d3937959be01aed2e
-KEY: c55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d4120
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891
-AD: d77df660ed82933f62be8d
-CT: f2f3a3d985eb38c406bb0db0d141188c680656db8a4484abad2c8973267e14458e2be7cb52f06ee2a0f68eaced13db714296319b2b3557454f5e9cb47e8943ea3e66f7bd25c5757375be7bdd65fef53b
-TAG: 2c441fd3259628cab417df36374ededb37b9775c0ddff861a5b957a9237265000be0857b3b8482ccc5a348dbb9f4529da4baca8a8820468b1219fe4680221bad9a527d93ca499a988411021e0f9cbfbacc7851c63cc1886e934238d9b7f9cb6b330ad00da830b34c7e4398d148af7599a87770102622e7a68828dece16d4255bb319c75ab0046defe72269fe67780b34324eb3d57effa216411caea5661e64d8151707ffa86752c876590ec46926b7e963ced6a7fa95b1bd958e618bdf1775a9b3ff18c91ed490f39cffe0ab03bb5006cd321d8e6bbdb19597ad7692eb7a7685e075de1d383089f46c8a4bf1aa948bf08b89fde28696147c767f5fdf2aee8b8d4af2903452fc5876aa226d490140a55e
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (17 mod 64).
-# DIGEST: 00133da1f7c63fd5f0eec364e9a359be02c1d3da
-KEY: 5b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d7
-AD: 7df660ed82933f62be8dc5
-CT: 02fd26e7b51a1bc6ab6735045d2e42fdd1f31adba98ed5f8b3e89450853104633abf6cbb70ecfba2f5b39dc06f419746abae4a51d33829bb04140275021d183ba079d58c37d4147e8114bc2e3d1542b0be
-TAG: 4bc0c3d3487bb74931c27253f0f0931d15a627ad88ac1ba563d97bcec53524870d8fefd1300feae23772902058f5f4a0c1c67eb5e4ca9d4f98692398a9019c3263d2191361b73038e3c9252502ca72070f1155952b3a0c787508d7c0c96e02036b2a26513fc69b19f1c51629fd7bdf015c0c45da5de1d6899f3cc3bdaea7a3d7bf1d0e8a8430fdd7ec70f93d7bb62fab821c1f0e9ad564d04081a3fb70b43b5ffd990e53938cd34084411c0c11db13bf2e28c6fa299c720f3f68ad751c20f6d12ce79382a1d0c4bf3a6bd3a695b3040193eab3c73aa4ee751447a5a46845c86e22909cebcbfc8b653f352072aad19b725dae4cf4d1c8bfe55605f0eec27682a6a365cf2e3e94ff769c2aeb328fbe6f
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (18 mod 64).
-# DIGEST: 60a6821269be6c5b985576b245f106128eb0b325
-KEY: 436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5d
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77d
-AD: f660ed82933f62be8dc55b
-CT: b2fe392acc286bdc73cac1aee34ecb3a3e3ae2ccdb065618e3c4a17f2b2668a2c11108b0bf8a8ffe20800a698e73c9b6ed4b0da61bf6fc22c33c75439445061e198f018f271a8698d87185b7df77daf9e757
-TAG: 7a3dcda8c73da41cca4a85a9bb5226d8a94f2a39abaad492ee978b6051961be1f0023b673348fa17eb29430a340b3597c6aca9304be30abc5129bd65073aec837e55fe06c7787f4272e75c32b3f1777451e17853f4a4696cedbeabb57170f77efe9db657572035af08cbde5432478dc339147d433457d3a15f8820515a6f267dcd14cd9489352e1561414e3e1e0a85129976c24dd016d4621af0058ef4e19fe4bdfdbbec370fed7ef641434eb629fbb16fbcdd117e9b84ccf7ada8324f9815e4aa42c12d4f0609060545997afd4e6786a0457b0b2fc73ff7856adb51223d2408ce4c414ef2afe52a3bb67be43997898ba846045e96a27acf3f1bec0b755e424f57c69774cc13ada5227c7642f563
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (19 mod 64).
-# DIGEST: e2593f3b6741a9ed9fa188fc06efd057556ee624
-KEY: 6965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df6
-AD: 60ed82933f62be8dc55b43
-CT: 8780167385b8856be346b71b042332368067d5d9420b3793fe94bc1ba92991756523c7a8e0114af8fa7296ffef8fae01796b47edea43bdcaa8832a08e823c45c1ccfaf1190cc7fc73a67decbdf407c72740a7d
-TAG: 974451fd4d9d6d1f88be4404869b435b4b687a1150b31a0671c93f52f76f2e4dd71bf4a3583f68ea5fa4a0dbf8c779f83e8dca1882e9bfca3e914e77ccbf40ac94769c44f9a8bcbc35a4f9920c6860078d369f57b407d353e8022263061bc974df29fa7c862f3d06213b1190cdd3e2091b2e26532356560efc3b21a499f4841869c993272b70f153985d45756a0b3250a1b91ee3f25a6afbc202f3ef81dc607068fc7214e69255342e662c64ffd8acbe86992ad20ce376d92ee0bfbee6a72a1f83f470d0bbf6ec22b364e842b84736d3923de92c488c102344fef6f78624989460a2c45fadec2a7bf722e2e6a34162363cc04720a50f0d309f64f9322a11b642b97f023cb82a521af6b1759d37
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (20 mod 64).
-# DIGEST: 17450a437efe239e1858ac4062f34024305372be
-KEY: 65aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce99
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660
-AD: ed82933f62be8dc55b4369
-CT: 2cd2031084f8742da110ab5d8f7290828857c867b38427c3f53be0dbe2cc94527d2f0aee90a38dee77c0ce115ef650b2ae65094e99ac9bf6da89e5440c1bb4f8ccd163427bb95b3ccd629e6881107d6c9a80cc37
-TAG: 026560a6675920dfb199359bea1a03ef0d7d67d359bb6b94074eef54047e92a0940f8eb5d08aea137b7caa73904b66a8c99775e0d859e4c91d68dfab271a9401fb650a9afb83ec4b42b97a74db1908fdca0a06603cde524524ecb3bfa15a96b6e250edb83e7c59385357c075bf077ada33489dae99c2e5d5f17cdab9d23dfae4171e564bb91e3e78d61dc7f1712c2a4431e9451cc1f58df004d04ec50f77a2681969ed91e07df4ec90fd185ede409a5387538b115107a1fe22bb999082d4341ff5a6ae7af33cb27a64eff64492a08eae3c18e5914971e514f55e65ca93a8a19d7d4c2f3df76232cbac674c480e9f4316a8df7ed9d62f8144338249732dc1c3dfcc8647804c13a03a59eab926
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (21 mod 64).
-# DIGEST: a35fc7d25f90dd9cbd35910d5532aca8aba88b29
-KEY: aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed
-AD: 82933f62be8dc55b436965
-CT: cea9c7528706d506d75cf085c8475c081ee8c6145ca11610b73eb3e103a706faa66062f8edc10abaa7c3edb3fcaf43c202c4812e768fececaa04564414f45816fa5c0df5b7518ea3859be75c4567565358293e9232
-TAG: 32de5af09080604ec6b6fc5a0a542837a54131fc87b1825666e5d56f09e15b76d47fd8086dab709567aacc3e59d395656ffadab861ba9a0e1c1b30321ce334b68724877ec6806245bdab9bc0f8e5af6582fe91a2ad95f7a6bd0ad1df9f9c2d2c20f78f2fb0bd2653fc8e8fefc9255541d789a0059820b30902c3e4344b68d4603b3fb8f5001df91fc9383dcfe76f219933078c602fe2813b9e59e8f996f8943c96c10f27d02f5bae69789870a61abb6c3b118f6cc348188495798b07424a750556a8d1e444b47283b096b9cd8b98b790445ba8ad8245a040a3cc96c2d72aba1474f949dc607c386c7cbbda952651f6d3260c82e5a06c517a89c5dfbefa069136e3c094ee1af26fc4c77e21
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (22 mod 64).
-# DIGEST: 73eff0f03358879f900b6ebd515f0f4e5a6929e4
-KEY: be477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8f
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82
-AD: 933f62be8dc55b436965aa
-CT: e967973079db00d2257d84817ff4c5faaf98024ac7eb71d22af3cbb92a001a558f5cce2e8c293d6dc2a968f69cb2731bf65954affbfdef4085123aa06baf0d80edd8d04ad4b1d48120f0db0df02ca13708f66a567ed0
-TAG: b8f6b6618dc8b59b07566c1aecf97a9933b6546fd8882d14cf75b2065f17518722b5fd77f9449cdf4feb87e7943f9d48b56ab891514f608767f1711314974b020804b7227326185bcdd338e3a9df31f6c3a0190b25d02dab04ce23fab918d6176814877ffba65e410bab2ae256d4f5f937458d24a144f3c45f6fb27e9f95490e95eac4575d49d7dec6f72ebdf3efd9dc6c83ead51652223b18963651b8d957b7aa050b022e4beac68f928de0d1094dc756d8e1d2b89a1bcac0d3d40f0f71e67b166a6a56d8ea91df5c930566640be524f187be2065127cd15b2417f7d80b6a8cf781e0e90c6ef61cbc902e935ffd2dc9e84c4170fadb6f76b15d77c72b49b8aa30ad1efabef37d55b4bb
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (23 mod 64).
-# DIGEST: dd6cea270655225cb4f4231f54c19eaaa146eac5
-KEY: 477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed8293
-AD: 3f62be8dc55b436965aabe
-CT: df01c1a140da0e422919c0d34b231fa3cd767766fb35f8d78d715c44b9003e42cca112fa1543d74ac05e00da9b5740c03b5c4d1e558ceb8629adf3adb1771e6edd5b986094f724e675682e65af15bb3c0feeed8cb3407a
-TAG: 25a40fa2eda366cc951e8965249500a657316c33538f874f861753eb038dc5cce0425824f138abde55bade8b0500af1f61b8ea69d4bd68de3fc403021c2224635535bc83dcbb429a8ea6c0ca2687a34e02d1dc45e7bebafd26b4814c0766e7fce5238767280ce0424a3f16a30b943622b8c1abe4eb6c279333e9d8f7bc32afb915bc5b0328147b57d02d68584afd85107302e3c84983cff39256313c4462b693c256edbbedadc50a52cd2a3c8255c1c34ba87a70cb652d74d8375ede59a57514bf5bc50532acc8be4b438daaa2d7d2caae6c291ea2c78e27766b6e2afa2551f3287a6a2a4bf747a1706cd66fd724fbe0e7e81197b1ac612c05cde5a62fa0d5c43d01e6300c7066057e
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (24 mod 64).
-# DIGEST: 34dd9bf0ce19eff890ecad474388779f63b0af70
-KEY: 7e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2ea
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f
-AD: 62be8dc55b436965aabe47
-CT: 889ed4c7bd5455821c5b95a67a277a197140816784e820ad8e126b3d3f0ddaca73e3eede78c1c1d3ff5c2a98c0cadd644393b7e3c2273aea2be1c6fd20374b71edbed5658237d819b5e4e206698c8cc8c12e017196776bbd
-TAG: 57da1b6d2a9717b7f6f37f21dd9c686414ecd07bc24619b9d35c62c3548586bf726bdd33fcbbf64686556d1ece930f37c6f4c8bc1931a10c50269cc1dcd95bed9d9edb0463a266e6e51d2d90fa9c1a1a4dec6d21663df4f4b99060b37441cdc09386eb785b7cb0183df692d7846483998269e36d06bc7e3a010ebc798c83a5de0c4d6201f2b5b7187a7d99d109741a19e267cbe458063aa1ee66c7c2e0449549d03a9cac20d356c393de63d466ac3e04d63b88c26768f0b3fb18564acb1515ce4be0829aa99cb293adb9a0d3dde529827abeae270611c35277a4b373fb099cfc86a99483063014ec189429a243438447c9cd47a333b22e2c1c84845b79e23a661d411570c510f42c
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (25 mod 64).
-# DIGEST: 7db8cfbd3b29f96d752346eeda3c2bb0bd070099
-KEY: 0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62
-AD: be8dc55b436965aabe477e
-CT: 13833f78c9383bb4455972d6e7d8f22597e65de7dd01afa28fd99f9734366c522bcaef59c41487d84b3f84c1e0b7e5ff6de84206f54d5ae80ce80fe3cb68ea4edcd15897fd6fabe2a19904010538005668f2b05245e28bc0eb
-TAG: a76458445b8ba4572e8aed335eeb6ef8126ccaebe8b4be3f799e1def09f8a81fddc2ddde86e2d011c4b61eb16bb74cc5a2c7e1b6d0107f6b749b93fe9f6589bf4ea2444cb63f5bdd3b65827fff3adf32044621aa164160ac4662506b42b0b13ac148e09abc016102ccc988362f5cf64b969fc056e3f302a830f9a0b7f3789bac1c940d5cd7e2dd61aa3c6b970c3d066504093d658fb5f9ac7fb22ce306f5a9d495ca7e29d02bb39123b5387c43ed9fa1b8a061a339ced5a9393b7dc6401921d0fe424c1f168451286961f8ac199c3f8f8d4b154c89d290a27cc53695e082bbec8a338ee09826555a3fba8fa4bdb663ba932db800df0a1b570450f33f936cb71622854b84b260c9
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (26 mod 64).
-# DIGEST: 4abaa8453e8cfdefd918571a961d8351754ad5b4
-KEY: dd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad40
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be
-AD: 8dc55b436965aabe477e0c
-CT: 03065bb245ba12ab90903bc081198fdfe45d7d3c6fa3b1f76bde831917376ec2a5b2ac2cf629de6bd3f23025b678ea9cc3bd7801f5510b58432a8bc17999304fec4de7ab9ac22d75897cac67ed57e30d4745588b36695dd005c5
-TAG: 92877bfb09987df366759a1776b758dd9943472b933d5720e4d199002d4f3ffdd527c2cdb16993da7aec2ee53a24f6681c22fdb9f9f69a89704b6356441c6e87930b2ddc47bdc1fa0df00f7490c16e18a095b53288042525f60f0f37be0036f9a7dfa37ed3977456b3d8c4c4b2c47879a4495bbfd6a512fb59a40b20bce316ecc559aa825b4be8dbbc5dbe06fdd074c1f2132e954fb74fc97075e9c5052a0f86bb431f7fd99d62080140e0457f8b5deadb9b2528e61731488f25f0574283a1b30c80b2bfafcf0e4343ceb83dd20d2179a38866780025516e5f8216ab70c158ddfd0ad7a446969cc9f6eaf5c984ce8e9c38fd3b8a007a1c154bb4330fbee4329b8335f4ec4b23
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (27 mod 64).
-# DIGEST: 0fb9d7ffcc7c9b84f34661d472ae2d4fa25d3d99
-KEY: 46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409a
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-AD: c55b436965aabe477e0cdd
-CT: 04c76011b9c4cc8ff18038d36a8c8b91debc8d0929ec173cfa5450f434308234e6a368f17a04ec0556dcf5ace0efb5ab51956d0daec5c530129aaa78309c3d0a04af17d02b0f91f70a82b2ea03522659f76d1919731ca52747da3d
-TAG: bb70d9741043c7d3d9a3c5f7d2dc1517a91729b54dc8f49291e2201331a24fb24ad212398617237c77de3d6266fd32341893a9c8bb42e60123bf3bd4fd70a065d6f3d0ae98434d8cda789be46a5e5ad05033d18cdadb36e33fca58181909dbd3cc1733dfb4b6dba689a66f19bbadd35f830d6af1edcbedca45b2810cc82ce83d39ef9d6d17aefec9b7199575e8d08df3ecb9a407b41a9c1d851e923072c96c5ffc60d3987ad10f27aab7792a198a17c8bf88c586ab11cee5008ee7ea769c56ff8d644b51059b9b2ddcfaa92d3b3055a4b3921bf95c5c131c2485d869f642cd14cd4eb9b73740534f6c48c63f76c6f1e4dfcdd9dc3c07593ee6032a98aa10e1b7f095c505d2
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (28 mod 64).
-# DIGEST: c68fec315401703e49722fe4b39cf28b14e9f50c
-KEY: be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae0
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc5
-AD: 5b436965aabe477e0cdd46
-CT: 5d9af50991ea21f041a766d8d9036073eeb0ac083b8069619ee50c64c661bad73a9e2ca7f8b49ad9df79e47b49ca3c8ea9dc254854f116a49959c91481ba96463521bfdb74902a4b454d2c6af72d130175c33e8764b64bc93955f9f3
-TAG: c3ccb45d8e69eccdb1f058a490d8de92f255953c16f27e21b49e4f29639452ff846aa45394972d895a0fcde901fee45211e835f6e4152de7475075e1e7ed832d45e0407eac1c6a0c88de4a9fb44d961b3be197e45af38a88d1070416c419046f6e43496e6fc1750de734c7773bba9b402dc96683d624117249f3d3f3d87f83a140018afde34dd5980e86e157d632acb7fa5400dd272fe74abe46652eab999b9ac1cb65a4a609f3bf9cf3c8434f9eca0bd440d665e772629c0cc76e0d9009e47f5667c0a0846ebbb1c1b23523262d3225bc23e3513ebed8f67c721cc0886efb251b374ee4e79f60c6fc7bfb81ad9ac88c0a782d3c4bb918cd21ca1f3b8e311f5e48b9e6d738ade59dafd07ca721aed0f6f7f98f1b
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (29 mod 64).
-# DIGEST: 15e1aa5285beab679aaedbf51a86b4aebbe3d7df
-KEY: 99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae021
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b
-AD: 436965aabe477e0cdd46be
-CT: 182dc2f9f412f305a8fa4813e8c8eb7a41f9708efb516fe3feaa6ae94c89b4437cbdba7c738fb97ef9739ed94d988bd60af5359194d2b5f8a48e3f5482c3be294ae65ce803e21acdee157d436188980be8e58c95a7a5a33e427473d4ba
-TAG: 2751722d2433b908076080c82895c633135bed9c7486d2fec286ea11b279b5029784972d39c8732cb1631841a60e86ad8b17c41e9c0b54ea3dba7b15121532b7d7a7fe8f92e2280481c73590cc38bbec7888932be3d10ab251157ed0335ea1b06a379c4d19d7d860bba5164da684c9d0eeb20e65c0c63a60bf94f65fa4e0f61bb94786271d5ca588093446fd563a6d513d81d590244807ce399f4bbee2f09cd8145634c1ebf06bb408489fa362b06af21a934b1114dd8233c8cb629df7fc5ac619fe2701de7daf7d7295049e1909fda9864fd7cd088316be8dc7770237748de45c3dde6d476d233983392e1a3a96f9c6550d5a7df61e3818492806db44121c277df71b9e1e176e335a68f2811637a9ce17919d
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (30 mod 64).
-# DIGEST: 8cc0b1164fc844e958e055b7ae43f2f95c29e8c3
-KEY: 371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b43
-AD: 6965aabe477e0cdd46be99
-CT: 0990f57d9a7e9b64bcee741e158eb5749e9d7b34d43c6429754689d87fc45daaa618fc62d3dc111e5a1a7a06b2b14c5b0f3e2e463085e80da6ce4a6f7815cbf871376c8c87a36555b8a74e0a14421e1e4d74f7531546369ca81e4585f86b
-TAG: 4e2e000dd4c6c0eac8aeb581fd352c8c8d4033ea944594afdaa87f05ae6be756e46cf27b7ee6eb01e9f4eb50918d2b438fc0d1eaaf7c6add8078a6a9d45be1e813c18b20eef740c85df67de7765974544f5482f9a0012192f3d84b2cf6c01141f6a8040158cf9ba03c5a1b580cfddf0a682955713a4cac6e0d3b6e273db3a91a1b8096f85fbc3c7a67e893885bae3b4c65d03d111da7e199780de379c6ee07a3657ecee397ce0c9d34ee5d39e8fc4a64c86a0d68182ea48b91c76f63011d0f0cdeaba4e1ff6a19686c5223a25a10af0fce79437322c0cab4786fdb4b93e687a1c7154bd294d784169b1bc7cc5c9f3b8bc3e1d8b808b448f926ce8731ab30a33cef85f57053ef081a8948178030a50c247e53
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (31 mod 64).
-# DIGEST: b51001b6ff9d27bccf3103a4961280e0a1406257
-KEY: 1eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae0211641
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b4369
-AD: 65aabe477e0cdd46be9937
-CT: 8d7999ec7a80e528bd6a8d2a9724930c93ee5cbb0c888d9b7c79d2449e638c03f3143f1927a1b261d66ff55bdeb7ff6616da99a2155f465d7c91f54963e7cbda7b61529381204ba43c9681260799ce66fec9b0e9882fc0ab474fd9134adb66
-TAG: e9012cda52183ec3e658c42f819dd986216e84e14eb38a462e3db010070a3056db6b148863afa9af5849e3ae963730f02bcc2b419f9cb37659609dc730008a43c41e87312b546d3b67e1f092001bd8a1b81ea304126801f149b0a37d826e0fac21045be4087f76e3c44a796bb55b6e4565d44cba7a8a48d4ffad797982256e87b95f6599b53f2ad34299d90204acc139d115b66c78a2072c741c43c81bab9dace2c0088b2a5dacd917e75ff0de07ab5febad79eb5e0d03012503110bc0f62e2aedda35c9bed4b7c2131f96a4d0c9ca4d133ee032a787e499c92cd46b33e5bfb7f1d3de52db0c7e2a15232a7c3c064c90bcd23366bf982bfbd9694e92b709a86afa4c4a6eb8d5e9b48a20ef409acec78a8c
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (32 mod 64).
-# DIGEST: aceed075f31ab159f6610f43ff0a6ed3a359bee1
-KEY: b8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417d
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965
-AD: aabe477e0cdd46be99371e
-CT: c3e61ff897b490847e6539236d2e3b208baca2e83347b7ea2ac714f65a409638e59a5dce5c3a4109e6d6cdb8a232f5f8a2577101f9fb53aa50918f924c1a5361ef98d6672258b4adb37ca5f30d22893dbde262fa9cf72d2913c1901d70a0b7c1
-TAG: a49c692364eda34c22ad3745a4339244b687f596bda16d4ff61c6697996214bffc78fe54bb30321d37f17a7ee146dd33771b9b922b475ed41e55de39f1573683e4c8147a9bc370d6f75882c991073181d3f5eaf31a9cfe0dd205540cf6a2b6c0898b3d1ebe351c7e036e136088fe88a07e2c512fd488dd5dfbaebe10e6627bebb2cccf1e9c985ec9f1924abd91d29f0862403c24496ba6c0535358de379a60adb764fe00f5e09f3487b075713a85452ebc21205279815653b39af6c7d84cb1a10178006c1b4ee3e53028c09ef59817abc2335fa2ee7a56ea18e2cbe533b7d30c80609151b58b3c711314b35d3be3df1cb6d5cddffc316a940cc78ba1734da1c09d1d05c2650ce3a0fbd60bedfef7a83f
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (33 mod 64).
-# DIGEST: 976ca4c9819e25a204a024d05fbe7420f717bc58
-KEY: da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aa
-AD: be477e0cdd46be99371eb8
-CT: 1944f256989b6acd7dc7c334d10ce71d9f2980cdb6adb03784061096955a3e10efe7cbf1c0aa1caab97cdeee4d08a8ff34d68e1b53a0df58e79a4c1d5d9b7eadb2430c0b8049b6c43a848fbc5e5feaf16c5ae08da38f973b18e33fde747702b882
-TAG: 6e0c7a079e170b669fd211bd54c2cd2c51bdd5dc84c84e0da6104dd1d5f6e8b27847a4def48c030c515b680a5db67439f300d184d2c8fe18681c7fa25840b80f53ff494fab5e1694a604c1c12b3b113aeff88bc2c5bd31e84cf5474d6429b4cd08241e94a7f4276054fed2f2a0d863eac2671c9af96045447d6422b8789c4674feb8fb27098b5ef613f08573184271899f735af845e6b7ed9dafd4524247178415479fd60da081ae076331df7ea141df29a086b76bbe35dfd4f983e45b2f1316cc27d88c48b87d2934833eeb5bde5df0866e4a9d8894fc275d6677eda6ac6b41a0475aeb9a55ce7d7a04820b581e8565c9d9919685bdf0f163d77ac45a15e4717e2e716e49ddd079f18295bc7a05e7
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (34 mod 64).
-# DIGEST: ad8cfe7556704bb1974e94f70d8743d147c5c3b4
-KEY: 7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0c
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe
-AD: 477e0cdd46be99371eb8da
-CT: a850ddac6117f7b13e15c17621fc7c99f2276ed7337cde87ada287814150f8b3f3e8ba7108a1237fa6a9ddcebb07c234660ec93b8279bb4614be85c5973603568e885f5f8ea102d0621b5ba77fc58af4285c15996d6868c520f3e09ec5b6a468cc82
-TAG: bce897e6a5dfbd940ec2c477af3411901f0f2fa9436ff3b4da7354189f097d231b95741788b45e9a56e7ca7a41b265489578bfe8667b1cd64a2ddd765144e770ae13fc2e9ad24575bfb97e0e012869ebfb52a9c7e181e79bc260442d166550435dd5c08b131ed3850f78a2e1df8a1ed026d9310a83f0b8449cf2baec42d7d7e31c4ec56d9d25246b34a479ecf8ab850c65fe8b2a6361fd185c25d6f253f556aa46825c535a4a54b855148e032d3e1ecb8d501802db1eac194a4bf7f3c70f8b8c33cd88d3362476e2080cbb4482fd9453ead6dc62a0dbc0649e41a699c53427ea8ff93fc9f2353356f695642ce7db49fffca401e9c275365dd0a339e3970d5810c5667c234986a65e1ce01e827e27
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (35 mod 64).
-# DIGEST: 1dfd9608adabb5a55e12949f1c4bfcd5a77cb703
-KEY: ac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe47
-AD: 7e0cdd46be99371eb8da7d
-CT: 0cc80c78b73b1bd898c6af38846d32837ed0712ab7cc48b01c6dd831f37237ca7634c90aba35b35da59b60aff8e6b9a622f5a481c98c03fc76c1375e4602e96c08a465f3085ec86b0a8e1ce8757df761400be6510f1cdff60b05bd46271650b9e5d5e4
-TAG: 34a24675223b1e1d363b941da5d1566dc42a61c7c239a6684a497e7ef90a78d29c1aba0a9be91a8cc8a7cd578c77e62db1234da2b913e9500cf81df22cf481ee43f0818be959ec7fe49aeb7be270d227f633f65a003b19060ffe8bdfaaacd2c20ac65b43254252fb2fa8d2264f5664f3fdfaaefe7216c3f8bc6957656d218d5f98f5b377fd675a21d16769c499b82d4fa54be52ef8c96222b83fbe5bd3b456c9d181cfb5ce23639749e9e22dbc3979f07910b83c200c82a3dd449e5ae47486bd7f2cdc26c3beea2d3c490a801bf587e323725be1a76c32396e5c5ea24a9933706260d5aa16c847e00bdc5d96b0b96652a2c73e6141367debc228af6f944bcfd65a9269a7fb8c912c25ae2a6e8c
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (36 mod 64).
-# DIGEST: ad2b43eee27e6267d8c5c1c3d558a07dcd6b1f5f
-KEY: 997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef45
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e
-AD: 0cdd46be99371eb8da7dac
-CT: ad918e7428ca106cf043d6626772cd45ce998f32fea28c3253fd58f0fcc191bb4cd250b5dc6a7b352bb2aaa66601e280576fa60ad8c3aa58742462955fd7f33ddbbb5036128617c1fc3bfdf83100dfdd069042ad1887c2821afbcf822756226c69779d88
-TAG: edae83839ae4bcbcf7da661a302815b024d7576e65ecb70c183411003b1d6c769a13de3444f82c7783ff5593d9983b369833cab8dfc80120e35bc86d3b00c307338163bd5de5863a1f2daee49b4f535ce455b131eba334b7c995dc25640833c6c0a7bac710ce37ae2b85e58179b57218e801c4a7e5dc19cb3c841c11c299a72efd9cdf249e9c4423cfff588895e38e5b2d166344ba53b083da555ae4a1e0278f5b7a557e9aec08ac70da44858306df69ad968c017f8b4c24a0b562be19e1f6416841387ee3cd9c8f7c8b3dd1fecff0609fc77c4d86fb1e387cd1932775e58b928f4022821c0b9dfc43912fe0d0755b2bc2f88682f6b11eaffb6caaab1e295755d1256810ce16d70b306ffd6e
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (37 mod 64).
-# DIGEST: 3dcddb1e4f49633e7b7bd36f4056d16c53be7f5e
-KEY: 7deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0c
-AD: dd46be99371eb8da7dac99
-CT: 8ef4db8a8444ddd056428a25b718aec0258fe05b5fe8d6d972ca6762875c030fa2b4822cf03e797a53046749e39646c8c6b373a1d77287f4124c19ef758eef75db8e4e03309b3d14e918bfd9499ae5c9e2f3079ab7da8ca7f00ab69d14ad96fdba1c58b813
-TAG: b78d95ae68ef1121b27bf93eb67605bbcbfce1e0293fa37e0de4a959cc0a1a47a374f6727edfa9aa5a330e5c3df90a30d371304258624e8015a2fe7583e362f045087ac9ff6bfdb5371d9fc9d55f7dd91bf0310450c36d33538ad5f6057d0c8a0896217643c4f95ed6c93ec95dc6df838cd43d6f60dc3d48d489922dcb1fadc586dbbef4200a6b1d67d2024493fb4dfdaae7563edb5ae93fa2065d750a10919484fbb1389f93d2f28b62c8c6708122e0abe0ed22ddba815da8bd80393fe274f545e463dfc5f26bdc207f3f056263e799b3c89f9c740748a37b7f28cdfdbd9bc89155e466e9a1830dd6d0a206d27a588c56c3b6dc92d5202dd30ec0a2e1e31a0da1a5ddd9d905204f47cc25
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (38 mod 64).
-# DIGEST: 25b982a242f669c013cab1c18da425330090e3cd
-KEY: eafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd
-AD: 46be99371eb8da7dac997d
-CT: c107710a85a49250f3a4401fdf07a44f96560ca5e71d6021075b7b6e3ff8fd6f36c652f186dc82c8a21a8a743dcc007e6710214320cb5c5e788f8c5b020e4d0d89ec2fb780c9ea915966b9f9b1e2cb0f26fb6bf1aba6e6501f2571ef1299918d4d2e6b367e22
-TAG: 3e7739cc9f98881f03a99d95250d460497e445cb24b4f8783c0010070484f8f379d74903d9a99f6a621791763af4e8e94ea305642643103b2dc0a0c1342f66154a0b4c4cac63e79d7121a2a44991273a9e1111208b3d9a5b6d11a6a28c83d16c9099d0a0247bf4670717ef0e8e6bd4e48c893ae189cab4f916862a8ebdfc0cb26cc545a9a08f01f8b4ce545914a35924f728c4e914b8cea6588116e9ebf592d4709e0c4efc8f0f8379fb30e35e36bfd68946ada030e35af5ed510a6061471659dd6780c1356c3dee7f69ab449a402456b63abd7e7763b4020db5216f099ef78a2125b42fe508cf94976b8e4e9ed65b38c254818e6aed084c037efabad7bd348e4e16099c7709cfd9116b
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (39 mod 64).
-# DIGEST: 9d7958e23777ff2472f5a24dea5fc19c151dd921
-KEY: fd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46
-AD: be99371eb8da7dac997dea
-CT: f90604401a507574dcfe5d7c5e0c36c5fa65d9a8f0a25daaa9fe5c50ffb3758f52c9c883c2f85d879f26845a130044d395b58497979cf24a9e18ee1f27d1eac4d0cd994a6338c5755c74419111b2bebed645c3d8b8071a7b5304eab2c33777eda01ce489f4a6d2
-TAG: 8a94c9c05afa552672247d156dfc8d60e9e3e1e9eaee6e58c8fd6c1f9d41bff32571526cf035ef595cb5c5b2d64b2a98bfcadebe5ff66a6a2299af8e00fa27e621217c5ee1542a86ddaf93e293d01f20ba5f9093c1fb7a1b911e659027beceb9518f59d20cc54f958945dd44ec38f73fd475647a008de974e50facab9e6e878e3968249a91b4f71f4f86486d5e3bc2abd6dcc67989f58521ee78214dbd29bb7aca0f601842b1d36833748069e409c58de54f7f6e6f17b9e05127568a1566e70254589675f2802c153bd5106afa59e00ac753fb9c3f67508deb5bcb4e25d47e52852acceabb8e5e955e16c0b4448cd313c73ee2195f185f8869165de7f30a68efcfba1adab85e2eb975
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (40 mod 64).
-# DIGEST: 09e9eab51bcb9faaa3bc3e473ff66b06e39653fa
-KEY: 64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be
-AD: 99371eb8da7dac997deafd
-CT: ff258ef9f318036586c5ec9e956c10c9423ad3a8a5468527c02bda6878c45398b0c78f3fba4eba3785282b3aa4586d31b238fb941546bdd6e3d918444d45f79b2a5ce3df0e8769a952243cce1f17f736d21e44d8d49449e017e9aa5ea20863a2f6b2f7025de029e1
-TAG: c113b619c1829f799e045047dc1587c35eea2e9b5735e9acffb8d5250acb5340d7e48f261c58f6e1dfa213980d35df3f14938a5d6c20908290444308c31cfc08d07cc3258a5221e3c8d72031ab52ed92cca76a189eef780048623f82af821d521b0489068af4ff2954bd73dbccc6d6d4124760a5c71fbf88435af2ef8eb24197c8d7b23358baa411d87dd4439249fa80b6f00c4a4c500b0b7113151bc4f385233318ccb3bdaf779d41c433b2424bb3651db990f9fa72649d657bb823f0e73fbdf08e6f81aae0552aaf37370f139e85da70fa52422fabd155d567988d1d2b930f89f72725d97c1b1aaa67217c552ba1b6a51cd97bf2ac7017a2a97298c6d86bab809b9b4a7e1776a8
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (41 mod 64).
-# DIGEST: 7b17b7cb19107af8fc4671420e461060e2ef3e61
-KEY: b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dc
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99
-AD: 371eb8da7dac997deafd64
-CT: 5e654ee6344f96fa117a2e1f9cdc08bfaca9c83b1c4d61891e49077c8ae7a8aa604e1b19995b32872087e04a59ed367e42f0ad3998cc2112035b33104164403a948ecf73c516f74adaa57688cee9417456f996847e0c637120478f7d88288b5403f0697c4834e4ea7f
-TAG: 363ea1d1325e86bb389f4c97a844b76e43d76fd4750954352aa52f5cd174c3d902a71a8265fba870b1b0e3a1add011914df362dfbc8f075cb45d2cca5498b48c49f0872f8371bf37e334c33dba4170d101dfebf14a519d37647748d92ccbb24774caf56204c1e7efb4b765b63d5ccedc308ccf06bf614e7695bfbf9e416df526ad21c4fda82cdce18ea647b6f99fd2bfebeafa94e8b9e83fb2d85fcd5f8456ed2e374ac383230dd39c528408e3b53a92a3950883f6eed412c1a5875a5db61b98c089daf3419522fbabcaa33479d4f0140963f1bb788a2471aa0384b44c0c69a4fc46a892f9ec8cca4cf0d048e30eefb1a74f8fecf77a4d61f97e4835a85594d1df3a345f720fca
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (42 mod 64).
-# DIGEST: 48586ad2eac603c136911b28e2c69f101a8ef371
-KEY: fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be9937
-AD: 1eb8da7dac997deafd64b1
-CT: 59201549a3446dcbdf5c3fa8db930606f6e9bd374d8405e15d55493a82035491811f784fd4f0e3bdb6bdd2e01558783a00b32c53d7be31525343a5a2d72921222e32891149f8dd38303ffb584485df15dd4c6917d4d8ce80e1dd5192f30770873895a0219cafbe8dfaaf
-TAG: 30b74b701e2777b537a16fa9b2d3bc9a86d718a4440ac3a0475eb675b352f215a847a286f042285b50764d14ddd3b3088189d7e26b96cdc33856347f3173c7cf4c9696ad560773e65878c4f8db001bf66a9e27e7f42593e9dc3f206e64502b4a11a235d5ff29cfeba3fcff20afac264c691a847a0b6c599bd9f7e4a57179f46b3880fac1b6cdc10444ee5875470d25c8a7bc20196aec1f028aea628092b5ecc973a058f083f4157dd9202d1f6b09c72374ea668041ab18045a383242b5e96ac127f6ff263c15d0a4999f61153ffc5d53bb77ed11b5b8bb3f2071b8ab14d92d161f7e39470913043b316ed3bf9baee35f8594785ff0f99a39b72e918bab81c49ec6c4c4ca459c
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (43 mod 64).
-# DIGEST: c37456cfc543ba6e5848b9b8f4ac5a58a104b521
-KEY: 65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-AD: b8da7dac997deafd64b1fc
-CT: 54a2f87f11c6597b3013a0de46b61a8fcc28ab021465178138cdd76ef01c2701b3a48ca4d3cc885173bdeb33b7b27f9064d2f09ec187d0c9c482522fb29bb421595589aa69ec2ca4155f503bdb8f0f8d4d2f08531c0deaa386b9adad07e8aaa351e76ab938e435c7eee05b
-TAG: 2b4f8a42097dfe879397a6fdd13c8e2611399c3c53d5cb5c0e41a4a49b99522b127dff5bbcdf4a5c6fa79440e8fecfbe1df30d34df7c3a399cd79164cd39ca50a3bb6ce2b95a46a3f50e47c9041dbf8f39aba1e807f66984619c62499bb5f0bed727c5214efe67ae9863b99daad6b2814484f9e96c3f6aa5a31417624052c69252de37d7f913e5a2715459f945958adef369e59fc7f704ba9d9646870561efd3c1bea0ba785a8a39698d7ccca3e0b6a6dc3b2570650ebaee1e133488b3a227fa97a8580737cb4852ae3e04c11df82816ec4d6bba8f9e63c9c48383466d9d145d27d18358e822af696a8d7c7aa65e2bc7ac32204a8271684e3803347423608666e23e90345c
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (44 mod 64).
-# DIGEST: fc113d192686652653a15887974eb1f9b8e32248
-KEY: de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f2
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8
-AD: da7dac997deafd64b1fc65
-CT: 0f0483dd1e9ef91f215f7f9817b7f82e0b96c0d3b2996b2a1d878d0be3a70c07a4bbbba3721e646405a8a7f44347557d482d7899044af37f6df054070eb4debf7471072af1e4c98dfb3c192e956b2931967d7fdf200b464be1ff1955a658bf86faa659db9fea5c63d26c13af
-TAG: 176eae7a290cdf30272c219178d7a011400870bfb2ff611142d4e16fff9278cc5778770605f8914f09c3509fb6ec23bf5cdca390cf8dc0390502b3ac3026c47c167079f12302b6ea7eae668b6dac95a5541124aba8ecb8de4cac6c21ba17a2423ed4aac69e3292f3f4f031e9f54702c432d514726cf02ed646e0f60ed672b5f212e62aec4e51c8b8fbad3f1689f1b7dd775111695a342a279f7725da6ffa0e5a2ff5550159208bd30d28267c600e6b183dc1f72fbb4fd8013c5b4ec93f19dee5864bd854df3cabd5c813d4e3ec083d55ccdad4a0178e5d6cd262843d6309059033b987e366e66c67a3fcbba86730b5fcb4786989f86ff9b8a7318302123e0d53152a2a82a7cae76a81b017fc0b883ef6f8cca921
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (45 mod 64).
-# DIGEST: bb6e5b5be84ee383caac0378cb6f541726ecf61f
-KEY: 39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f256
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da
-AD: 7dac997deafd64b1fc65de
-CT: 978a10e04037ba7f0dec2576efaff6e5e4de5ab80b4b0c0b8a6209e22da05b8be0f832883e371c61c23b5bef969c004bf2a0f0fc8fbf1313078e12af2b3569a98ae5ee76a9bbb6da6806be3356c02dfa607c26094fd876d8f9dcc0395f3fe356b0a51d1f59582a7bdc7da9971e
-TAG: 9b37a729911834f666621a052c9d776f126e500cab45ddae7ad020874d77976af6ec581efd91dbf46ccf346a9dbb3a42d08d23de1cc074788f6887c0b15d98610b19fd2c00752136af3faa32e933518093d667617ae1dfa4e4527779bef7ccc9a1b82d8ddc0eb1d7d9247d0382c6d98ab29f60bc897d28483f1c69fe9b0d37113d237f7b3c3509411058e1c0f36fac6014b6c5937ef005a7fc2e3352da4866384d63c6aac2fdf74cdd16acf782022e4c5f1fa528cd6c977425ab19d800664577b5e5cf0a82e7ba75716c75bdf87eb8c7bdf7346c89d453bcff89ed0b93d9eb1452b72390a799498e31ae691460e5daa8ae3506aab4877cb82e3378874c6c97064b33f969786ed84e81cd1c2e2925b56266ca72
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (46 mod 64).
-# DIGEST: a27799fc2e00e7abec4c5939451a834c4606cf7a
-KEY: f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7d
-AD: ac997deafd64b1fc65de39
-CT: eded0eef58434338153caefd914cb98ff516157445bfbd25c3c5cbcc0ad68ed1bf049ac292da027acab0310ef08d66040341721524982165cfe7f6dc495f7f5f36cc410470e3b42045b718f580713dac8074b0e76a0345d11c94a9800bb5e5eef1cb8d9ba5818799cd1ef69c4ed1
-TAG: d7459df78edeb89e01ea8d685b5780b94ac339c36750f2d5bc09009c12a22893348bb74f8c38f96451e5204e0d940b9b84c6a89eea61d6a78eff111b806ad4a50c8456d13f79288cd3f3bdde755083dd64d13e1c887d8df5102deb5a23055a02b6cab1021efe6add18d00be8c3afd6f8e80bc539c76003caad47c1cf95085bf48bf9ab6d487ff4cbf5bbbe0f2a2972e6a165a2e5ad230f58fff76fb8ed563b810684daf4b5902ec8cdf2442c323e7c7630129a89432a1795380a949f1113facd9ee148e2d38d4457b508155dba0d8d4812aec13d67050e70e2ff98a1fc1dffa01dcc7eca4349a0b14f2507687314c49b3fe7cdbde2ac840bd8ff7fb7c36a037e7b7de485183fdcfda49a2281645ec1b153ba
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (47 mod 64).
-# DIGEST: f30eaff92a640a397f98e6803623e8d1f0c1fea6
-KEY: f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f0
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac
-AD: 997deafd64b1fc65de39f4
-CT: 7c433fc5255dd1e11f67c499c6a89c16b4b09355818cf304f11167bef253dc60c95486a840c3a8f77440f63a5c6a855931a90eea66a281d51d4198679e1420c824ae5c8bc0231444b65b69832b84c7b5ee2fb8484ac08727eb0cba0c14e7e0a9071cb0cdcf73d5d83ce53bba361ee4
-TAG: 2e73871e9d71defb381e4e7d49d5d45880fa3effcb0cfe673ab52805e6273723cdf99557ed9ca838aa2229fe8eeadf7c6d94c91e867ca023fbb2d2835e420a3b026fb5e3915e38a7ac02d43a8c6ba8a149e99abec42967106bff6c80adf9be5c76503c95053c21472b9a338ed4c9c11b161ce83e2d6190f87e4dcf169e945335cc5acd699b983629d0bdc452f678232be0d31b9f231aaf4c3c3df79b1b8b2fd8802df0b71cc5e26b2a5c5c5ff0616bdff6cc7b1f09aff68d5e15dc9d61c1cb6a2c9602eab7794eb77af8bed198fadd854e8f8a47bf6bc11a8f75eec584f1901fbf012d1fafc03604ae49f9585272845677a1cbc27261d5d7fbe9bf1f1c9ea42c61b110cde99a3a602fc9eb6c825656d804
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (48 mod 64).
-# DIGEST: 7227537c0113a9f46f7d332a0b37ee5303483d00
-KEY: 3541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac99
-AD: 7deafd64b1fc65de39f4f0
-CT: bcdda7eecf3331f4e7605cfd33789ab585318bbd35047755402372403a4df125e7f5bdf857e49a3f74cb8e824576a226c1942fa86de07bbf564cfb384d8420a367963020613dd2f6bd4f371ca1b53532a7015dfdabd07497367aea8db92981418eff6b51eaafe2b6d5b3b4d1b8b95659
-TAG: bea683141d42033e86b38d5e0614716ed53b7db5df93b0aa48b15e0111a46ee93c2971df88fa885f8f32e81222d9bb4b605640395e37e1ba474a17f0df48c488dd5a6051be2323f462cd94f81261289f076d60cf5907cac601e2709dc191a9ac5ef784733140ba8d45edded7e58d7316f92a9bd5aa86d6f8441604261a38359a8cbe57bd95522db7029db058a8b175eddaf8f258f2f479b348451b0786f15336e18077ba23eac377ea367d7e1afc08607ff63be2e613fea2e6097192ab41e40342e36688bad628ec273897c86e75e0b83d0d85fd13e850f29cfbe171a8d1b33b72a344a9e2bf292f0dad2ca754d45651a2067d9fb18c7a1845a9c145d4273ee2197dd0b4da66e88a7425a72fd541a78b
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (49 mod 64).
-# DIGEST: d76570385cb65d30c3d636ff25c5efeb8d1ea08e
-KEY: 41a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d03
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997d
-AD: eafd64b1fc65de39f4f035
-CT: ccecdb03830e84c5267a5b6f68dc909cafe94a1c872602961e8467b4b2723af537d79d723fc4e8f0397fe169186c23f50cf9e78af3156f507bfd38181dffcc05695583863d8a167df062cd16aeec0cc548a7b5e16b148ced8bc2a60a33a583779fef6d7160e0f6c31a03b8a0f1ed8e18e9
-TAG: 5175c37f295f196bcfcaffb35c4cfecd88d1b9c773d3162c96eb74a23722e599ac728ad68e2ac70369e0c6d212826afe93cbbc61abfc309d3f4a6f0d22421e02d711a6c97b6592b561b49ef5f6516367cbd966414d9842eb963c79bd4a8e1550199fc9cbd58b5fa5b898db2244769a950ee62bf915a074d5196732ae69cdaff05266bbc049903f5d7c702633741471bc3f8e44a426d201c5ad5987db33687db05a42778617c253576361fcbeee62707d9119cc76fa0627fcd65df7bdfd26469bd4e0265355cf885e2e515d56307adb91be258befc45ce8b238f6177d24f38ec56f0d64a46124161992a30f8a64355823397012af08f1df378effd1f67fb30796956fcf28b0ff35f618060a955b6311
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (50 mod 64).
-# DIGEST: 170369666d1f2337b29b5f14af68d47910388e7b
-KEY: a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033f
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997dea
-AD: fd64b1fc65de39f4f03541
-CT: 2828ec3db18423dc583c7ac7dc5231da07af1756d7c032a866c64155626be3b3a686a93699023f6e421da24596baf99b45244d07d86a8973450afdb87ff2e9dbab6fcef52cd476f1f25f27f6bb3abf9b406704a14ce9682613125139b238d985ab8f68c17f7b824f279c01d820fb70502dab
-TAG: 6af6f94f0ef92665d286e08fad2845c4c43f985b0cd0f09c6c6b4899c350a1a342f024c3ced7e54bb00b96d0e04c6d484e95b585a687258f4bdd1c00eb1d3f44e959b2dbb1444a292c81c92e3b1a01622fa377a583117bc2e170ea8c033864fe7dc09b7a9b1b5826ac8e38fd5849ac9024bcfb1c587be93b3da485adf297a77ecbec2a88fcd82e7eb952b6d012ec439310f624fd07de7bad33a5a59b72d88cb454d5da32d52012258c8754cc61dae82b26f8d6df7a4ca384ea88a30e12d4b07bc413791cded177d325c03a5a6c532641ca46ba2560cb3072733282305266985bc4afac41b171b28aae50266a00afb5a778e1c481a7799f29ba588ed3ebc65183517a31944921ae3a040731666daf
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (51 mod 64).
-# DIGEST: 7c52593d1d37b0dc380297231c6cb7b64e04c493
-KEY: 1be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb9
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd
-AD: 64b1fc65de39f4f03541a1
-CT: b463f7f24871b617a1001d2f73f9eb8fe39b5fe0b382d420af876defd68a893add2eb6cac45e56d669f4ac67a943a3b32daf0932072bd701f9291b5020bfa9133d2875d8f6ee78ce8c49d45b80329831799f1eee8c712683300e49c57dc8c1ad0b07465184483d669b04c183976289e3ad6070
-TAG: 2e8b0999a7792a9cfe5148a8730e28ef92557e1b5d9c318d27d12fb1356fa0dff3467e865c530d4f20fdb765f7ec7e56b7ba28fb49309bdddb413182b07670cba711d6e5e3c086b4e4211f0f19666590bdc9a121e1430f6b0c64c07eff2d81e47a02d375fa46bf8d6fb8708f3a247287b595be7aa19414e3d2d39785a0bc8ef46b547bd4805a8460fdab65d81866dbc496581ec548c51f601e13289fcf3e45f1bb4a7777f9a9243282681aa1c746fac4a8433e1f477950eea76c24d318e95f0586eb5d21a16f8b2b58a14c4780eea922b97de4b1ea292f842c662534bea84213924e837cb546c26f3bc9951eca7593f4f01e3e6360cb14248d127a08d5e0b77f438479035769e0e12c856bf3bb
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (52 mod 64).
-# DIGEST: 09a1659100052d13bebb4defd7f54f975a58ae2b
-KEY: e112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95f
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64
-AD: b1fc65de39f4f03541a11b
-CT: adfffd8a654da994aa8adb618cf69b25ad5dff201cd3a84314796e0228ae3e01be77cd8052e950fd74e3d8fb0066705874a7319dda8bee7bf7748ad844a70b1ee0d774a6156fef109dba8346a68b48458728ebde458e5bd777a26291f98cafb175864fee2d335fe5a38f1738df9a5aeb13f25442
-TAG: 0562ed87899d06eef5f3a7680c110360e5338af0b78416497e18291d4e8a75a219942acedc7d1493a15f6d35d1d8cd27b2bb26bcfd58dab2c747b4498ce1e56568226987124448509a7852588acf2dae587f0d13ca2ba54c50ea37c10e6c525b04caf0aa519662f258dee7fdbf17568ecb924c0f26701dad0952d3a57a8188d046439d7e35d73adbb39559adef95017029a9f6392d7282a1c84eae663d840184da4bbcbcf9c262d69ed2a7743aee175150e03bd3e6c38a8a1a762614ba2fbbb631ef56ffe3746dc95d9a15eae1f4f88e3180569e73b25b8eeb8474ec8dee041cdfcca5219514c5125395d83de633bf5bb05e4771e7a583f4e6a6d20af36235090454f8acab43984fda3f5740
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (53 mod 64).
-# DIGEST: 230c3353ccbd95e4f0acbbb0073053a0186f833d
-KEY: 12a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb0
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1
-AD: fc65de39f4f03541a11be1
-CT: 985481677ae867b2427182edf3de86d7b9956a4970b107ca7e01e90ee7cb02c6b9a46212e1b8ce67e7aca5e2d96272c2f412b5f16a7c1d00fe597f1390c3a686724c4846c78ae66b26ded18adb40f0d74c33a68032b97d440104cb7acc755ad7383c16013ec7fc519b293e4c624b132f91c44202c7
-TAG: 62eaabaa53e386ce7d064c718e4761d14092263af3027efcf5c343ab46e1133d3131dc3cd7dd6b8b8d9ae6ca172fc10f5887dafb169aab9f0e7eda4a5b3436750ccf47f2e3e9965b46f3dfedcf38d61dff3cea927bb3ee8509d6a4288f2879d04095eab6b9e154d0e22da31cb51638ae978a0c5cfdac346ab551d359fdbe9aa34e9ceb15051d7e04e9788240a030c0ab7c19d00f32da1df539f08d158f34a1e3fa6ee8d10ec0d99675a3465c889fe2b6631ff2765a6b83f594315768fdb30c27d2747a6e9d4c5724a5e93704a1851d606dfe97150667309b27503b09c85d86ecd83caf1ec456ac19b7fa273af74714611b3e9a3359354c7b983d700775930bd90a629d88a3cf7cf17f5058
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (54 mod 64).
-# DIGEST: 701e141608e71005d32dd1e29cd068aea736c9dd
-KEY: a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc
-AD: 65de39f4f03541a11be112
-CT: a06030a844e38f9e049bcf318b10e1cd2db6b60a2611cf9788f0c1fb31a366d2038b3a1692865b926196594850807895523a851a993b77e49c911f840f28aaa42b4f427eead4e2a578d57b101bb4795aedcffc58212e0eaecadf503e3b208eeb72d53072caa44677d6667a0d22639db7aebc2f70ebb6
-TAG: fabbfe986fa42c58408b2f008c7fed482ae568cb39c938aa531e49a85ee71fced2cdd2ebe97a35295977ccef50433b41c511d424a47274599f3f2a28678a4936c1382d6a9f5d41b4266ded97a2fb11ce4e4df03f9e976675b9b35eafbbb399eb86a79a8023de822f8c0d83da5516766f141f83d8075a77e7c55e987cd181f02d8d6f7c90775bace579d25fa1a969e4dec07a5ddbef63c67b6d76bff54dbc7fb87f8af639c392a8a32bee35255e24cc63cea90445ddbbb75e4c594d6d1441e198720c2fb7674822e52d0298fe24c6e1602fec34038e62a55cdfb5d3fe6479fe6b02b5fe648792636e03213e402f02e2a3cad928996e4b1d2fecbd97ec5ebac5ea2f9c4989599648b0577a
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (55 mod 64).
-# DIGEST: 9aaf96b472ea76fd9ff4adf56dab5fe0400d18d6
-KEY: 2933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65
-AD: de39f4f03541a11be112a7
-CT: d934f61f94d2b0aef2b63668352d2af2db2e225d0c8dd86b8d7c901de7425dca2a0d2f3bae9dbaef4946d18ebc2d9f4cff5c268cfc80b89c35f7b1a3de12173f9377a7ad9b33751fc89390cea9b44e80423702a9848c6d2562d24838e3b0511b81a737a4b65fac394da45f62f1f3b2bfaf0b4f3f0c5ca5
-TAG: da6ed936480fd159c32347d94a17ae7bf9344d4bdb1bc0921d85456e9b48a2e2c24769bdda1cd6bed0b44e980873ec3c79b4346849366ca6d6a77e8b1091c6657a009691733da37706c0f480244ec0c7839648cd0eb63a28eaacdc8b60b1ab59f7d83bd142419a5a548df23f019e560c0c9a307b4c2498f69386eb13d4dcc64ca77c8f5f7c4b6e0c18a058eac72426ed4d541477e3a036b9a450af234670c94a4ceb7cd19c9ae113477431fc2ea30738a95c5753a4b8de9e0e4e1a0f7d52f67b2957a39ff1c6eef88bac3b927ab004d64f3522e0db7e80d27309b864996aa2bafe615139732cd492608cc128295132a4f40a70f8bfbb5b18b2fa45c55c87db39872bc5c1e3300f446f
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (56 mod 64).
-# DIGEST: ac6871d354eac507556770d8b6bf10b5240273ed
-KEY: 33c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de
-AD: 39f4f03541a11be112a729
-CT: 413d2c3fbc77845409ad66cc13432824ae4ae109379a9617e8b93d4f9b17fe0d0450476c3f98c229bf35e86fa792dceb4b3864761dd442c294e43b1cafe1fe086cd1ca5e1572fe2b3753c20a74b663b536f6e686d9765bafb10566f2b5cf02ee24e3dc69cb2be9392c991848b840418835603bdd83b2cf0f
-TAG: 5df250368694b1d3b11119d8c787df534fe4526eb31af32c9289b0eaa4e9455b5cd4a44c13a335857f67fd2662317e086c1a299d794830ca08ca99df1aa79c8f49589dab551cc6269129b731e4d560c7e330fea2aeb5f06eab87738bccaae53b9661a78f3f08986f454519097a6c43837931a56caafd581ae52343dcb71b98ee0b36cb7037a1eac81f308f292eca92ff2c13c3b807aadaffc832f43ed98c0cab6174639b1ec48f3e8e3736f7a20069aaddc2414f1edffba78bbbc04babfe6d6f1a5ae8f77931f78974edb257d2ea6d5440bd7c8f8283ac0e362e1959bc35bca6f257da511f456466be60ff7451887e5ff221f30547e586cc76e7bf76dade793565d733e5705bfcf5
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (57 mod 64).
-# DIGEST: 050258d6ad6bec54f8bc48c7ba2d669d6416c11e
-KEY: c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39
-AD: f4f03541a11be112a72933
-CT: fca448fd13c6877aa9fc299953dc631df8024cebe774bb14839821b05485c4a8f1345697b072342343f6a5479d99d5ba0ab29db7760b1e21b37969333473e6fd16bcc5b52e1d6472fee31034d515f66439f092341036a48d637ec84d22af8d1848843aa33e3b2059f7f90a0db47dc41d8af3b5cd76f4b36ec3
-TAG: 3071b853c877cc72cbec5c249fe76736e87793118f0890200b64cc9b91e26448b327dd87eb314c4c074af49091051b69122a2d13b8a7fc0b15a87e7e26b791ab3a74e399d429ef4e6ed69f2036e91909b11075ef19c6554f21b5b9b90fe20c9c633f71c666519774baaa12d8f819ddddbb592a99689ba34c44e59792da3d7750f4cfbfdad6e295a73ada8957eb9a7f7bbb4e8f82d4647bd41d5ca2a51cee58be3fcaf307382efec054d880b5866a38aa0dcc72911c9e9ff902ca3743873618b2b35c45cb32e496ac7c8c69c1818583ea5016a57f6e912859b1b1a22bd701113e6cbaac2a935a94cc3fa0b9d4c23ee573b0054eebaa3414c936aee6bd9782385d690c1eb570c5ed
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (58 mod 64).
-# DIGEST: 70060f86c76e53512933c09deb5872eb23efad67
-KEY: b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d617
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4
-AD: f03541a11be112a72933c7
-CT: 8c5849a917c328d68cdf4fc279b29efb0c3c1921621276ca19206c9941a5789b0aba7283e743f94a6e4142f7febc9ad35df30daffeaa5cd0cffe0fa2e4cd5ceb687def585b2634774a01a3f00ce2ca9951fb910b4386bd0d61d1e292b2b225ac55000fdce10131ba163c97f810a2b350fc8a59348253549e0cbd
-TAG: 5beab8f1449d50a6e4a1a747fc2b9864cad962480673db6451ef7aa42b42e7f0edc3748a71df8ddb33d6f9bcc9024c7170bd7a5b81577f9594a87d90fe96a50a62d31c01368173aadd7dda6f7d4c413773649fa7e5aa0c3cbd0fc760666ce5d5ec5e4209c4eda0a8ba0d66e83ed3337067d8ecfb81d3d1c1bed7eceea2582f276c43fc15d5c2bf9d2558d3c3f4d8cdb8953d28b0221c70330c346640f1ea1acccba27466cc0ec3c14729a78f62c7537b1ca5e9f9bc74c4571be9b67f04533b1f8fa2f9232c216ecd81bd120197b558b2733d3d9bab706f67670327465722b2be2c6e3f2ee507620dce326f28400857cc28c697c9b10df0d093965c21ebc42f34d71963ca85db
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (59 mod 64).
-# DIGEST: 58286fe273bf572a76a2725933dd969777c303c1
-KEY: 4ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f0
-AD: 3541a11be112a72933c7b5
-CT: d0076d9cc2f829a33a0b1972f6c0d8c67718a7593975798e0667135db3ce31b4d9bea98710909313a4a2af88bae720963ee738f26bde44b54dd5820992569e5d2eea000baf5de9e0f76dc8e0b93244a8474beb7e922a5f30a5b5977611594af25ed35aab12a61de68f215d73173fd38f586b8c509459a5f7587d43
-TAG: d8ffaeef22eb2181a48da72bbf57ba4562e3a1ebf9cd2a872f155fbadeb78c47e64ac6419fa1a9b1ce5a8e78e60ed1f8dcf02535613b959448f754b70d7159d2dd4814122b35418d4e554992b4789e04f018234c91de44b9de80f7ab406fb6fda6f086fc6b91ace53dffe012d703e71861d0b3ecab86a287a76857781254de544985ac5b11bedf29138500598f757ae295d8577ae7e597e9cd915d15124c7f1d9786f9666bc4b69eaa18e28227d87bdc8935e537d12360b53746ad0d7834ad830aa5307f69c3e4ff6e37ee6ba8937f75723ae4f64c2a04949b0db60c979fec6f485dd0cf14cacf5e8d0e624d9a8578e4028b8076a9cee1e5a0ba5b96e9f0f6e6ef98ae84a0
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (60 mod 64).
-# DIGEST: ae701e5c8672dfaf728bf0f43f5e5247ea9ac13a
-KEY: d4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e78
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f035
-AD: 41a11be112a72933c7b54e
-CT: 298f670117678bd139c60399dcab68bb0414829b458c747b0dda5dbd67f95fa393bfd2719f815a12a2b7c6b3e769b61ddb4651970b30451cee6166545d8e4c4554c8217898186dc02684c5025ee692e12130ab41ce75d79a4ba1a4dd02e0af581a645979c1a3c8c12f5b13e9c1113316eb31b8096b4eff1bf3f7ca10
-TAG: ee9c1cae63b819ff804cc5a34d59d17a76539b7850d5164ae8ab252633acc10145c2c71b1a10b0a87cf2db361c6aeeae533201457c5952feb347f739b3c236845a887fd0974b052a4e71cffaaddd1f00c64c47251ae446a5875e1e1854ca2c032b4e01dc995f35d901b60d042aabcaad3c08cbfd12567cc789408b6710d81b6b7c6067e02f263763d74bc039e0430bc1f3b4c01f95f54492a9c5b81b8d279266b378bccc9073bf1f1db1ddd964f9b6b7ac8771ffbb55d1ff9d973cff3d4eeffa277427e0cc41a4457ad6c2f035b1c0f93880aca55888cadabcccfc9dcf53dc3924a4c03a5a7bf8416bba76d8a362893193811ddcb02b0a9ccf2ffb6902d7e0c434cc489d720487f4664d60f210433b8f71d98666
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (61 mod 64).
-# DIGEST: 4f498d0aa9205160827626ef80c163275eca1f78
-KEY: fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780a
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541
-AD: a11be112a72933c7b54ed4
-CT: f72c519566632f89513f3f278407845ff8096a5b63929f0ea6009c3cae0dbd853662c4017ee5729eab92f2c475f0a45533de67d4b941d4b16c1964986d8f4a16cc12f02c28442ddf5790f321b3942cb65964587f3fe55ab28064c52ce3d3598d3431788ed2c26fe1b196abfd35afa0f7c8206a6bc71d61cc4e1a086c4c
-TAG: f8c75274342950e4893ca3b0e9fe95fa51343c628e1f04d9dd19ed928ef7af0a106b6bc6b70d0ebf552c0acc51b5af94dbb9f4fca444ed4eefff63e4746af9852d727d4465695b1113eda1becabbc56e2860b55b986d6122b93bb822865ab8bbf1409aef68cbe720befe0ebc6dbb639b3be391a161c2d9ed65a2898b3ea7cd993827aa8f2c60dd0d9e926cbffd8bbf6ac43fdbb61ff0024cdb9e668bd9980a39530a526c3c9cbbe1e4f46ae3e8229bc5e7c8b91855eae7a2aaa1b827d8b99ed19843aafb76cd361259c29dba7a02dfb40d9bd2d580aa12a6951f0f53ad5b283443c5bb8b4c9fcf569b30830d1844860256c18d753a8d80d1d0e8656623b1a06700fc513a7099590aa566d48eb6c078c4472d4f
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (62 mod 64).
-# DIGEST: 8c043825b2a3764e8a0cc35a011696fb3ed03c2b
-KEY: d0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a1
-AD: 1be112a72933c7b54ed4fa
-CT: bc6acdf0943ba34efbf9eb27fe9e968f23bc1d4f1eff7f86e836621422e7ad8e1adc03249475b6be8ec5d3e96e167af7e6b85ac87b5da2364b1e0d87d5c49d43ddea8e9b796580fc4fea7774f8210e4ec424aa029717937bf76b148e8af72e8badcc3f12dd259fd4dd9a325d81cfc7a193fb756b5d140fb703aaa6d71496
-TAG: cdbcd83191a554bf922180902fd060fcc63a8dc39a90ccbca9fbfeefe9a09a9da72c8782f6d3ccd9e2b5a80816eb5bb6919580a8ec186b8b1e388a561b6c931b22dfe62544456f7344f4c18c4823f167b2ebb8a93e3edb8181f358e66db5a3966eae5e893e76b16e8bd5da922720f754bdb6edf3496b62d79b14f00f24c1b30ec6ea16d88cac2b336f2bd057e68d6075907de3c9e7434da017d8bc5348ad79ec14182e07fc70f4e33ca2aaa2216d29aaf4dffb583c1b5159eedd66a2515127c3db358c1ccd89da4cefaf75a6eb5a8a80396ffcef783973f552645885e20b91dc0cf4485e94d943ea4bff3704a4bd2e23388090fb7ff707cf80b0c71f6d4560b3be71edab2e0b8d5ded1998f3b1df51225495
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (63 mod 64).
-# DIGEST: f3a432271c9be858725fd024071c4f479ca9a971
-KEY: be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b7
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11b
-AD: e112a72933c7b54ed4fad0
-CT: 0e87c57c18fdc439c968a9dab086c88271be6dd00843879ae1563e4ed03d69f9fa09a29c1bf99b1c859323eb8452acb2f808f051669bb5e097e23b947369b5a0577157995d729a75ae7a65e293acace3124a8aec53328439e5f2103fc3a236728682fc129a5b0e203bd730303fdd23962d6ea7a35aae3691f6721dafdf18fa
-TAG: d7453e8aea805b4c95ed51f1033b386cfd74fef1c205d51fe351ec3b1a3bb2e2b7debd8b20c688f4c516a61fbaa690eb635fe2974a71f45d1b4e2fdf3be4724c3eacadbc6d295ea9b6f53c249783f35898ee4818a67ce5b002f17a48199c779b17482ddf5448b6186cd979dea3d9c7b0ae3f106c4b90c960dd8899a67e9f18767b49497519c86c0b391098192299e4f85862d150bb3e439f05fc9f937c888c4f40684c25018fae0c6fedee92fc0035d073f3704f61d93e7e321a19512561676a216127e6a716d1f5ea43b67dcfaa1ffde7380c066efdc8acba10f2e790d4839419dbed3d89634ae785f7aa3ace1fa1720757066f4b75b883c0ed592b8cba79a400d5e442e23716a7a13c252a7ce156e219
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test if the unpadded input is too short for a MAC, but not publicly so.
-# DIGEST: f0f82752a691ef5866413f2b2e5c1d0ebb41ccc8
-KEY: 7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9
-NONCE: 
-IN: 
-AD: 936a91d0b5d2c0267218cb
-CT: 
-TAG: 9e23dcb5e3bb8c16fa099fbd135af44ba895a6ae14bef6699210bf0343bf9e03e529508c859dd6960e7639138e8ea271ab193ddb64ae77fcf7d31dd7a8ebebeb9b0653dd8f16b3ef5710d518144a2c546d8c51107f3f7075e04f2e68a2edc17acae579c83a11aaff0d26df7cfdb0b0afaf374a3fc1754ba9cd93e29e8ad0feef383b8f7935f81f15267c212d9051d1ac4762f6fbb5bdfff1e8c9a867add1c2e34ea839780de77041fee67856e2947325d39537f8bb915e4f312d7144d1bc3f562413c68c42f8c6434c8afeb973bf32c63f85c396852235c1791c0f1aa5ba74f3f176134d6eecbac484cddab9d14a94d979d07fb305b35d7fa0d0e57dafd8a05e
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# Test that each byte of incorrect padding is noticed.
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97c1954dcb829d72bb8baf23ef37b700516a6e5b7377c933b949c8864144e8ca0a13b0280a93c2a42285c6548571cda2d857613c74083f722c022d9c90a8a51e981b3b2305a531d604c211cf27248d1d46d671ae76dbd1decadc684993e7fc444a9513d23c69fd264298d3231f205801a309953e41c1a2f6a6770eda074d640ad0887c7755227553fa929e457293bb11ae4b064e413997a21916331e3194b9abe91eaeddb8321040cef865fd2527d3dd14016fdb216dddf8dcff5a659d76086f1b1149c466c7dd3e72b08b7486ed34f7d1816db423c15112e865cb87fa0b0745d910b961f7ef02786407a6bc2fbc6a4e43efc2e1f5d34bd99ad853dce8df7db6ce
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca975883e45e6461c9e89c5bb5f912d4a8fe273a207df1f6bef7766b324fa0810688dcaadf5ff0ce0a2a529a359cacf6fdcd7550bd2b1573f9d2a24f0fa9fa24e16111cb16ba039d8fc17bc0a24fe6fe6aa24786e3acbfa9e54313c637976d6a8c7db48db3ea1c4a149da8aa42b8455a1ebfed371cb1ea287ecb569c59bbad804707d93514731816b9f71bf786748d4c473718cf4f3ee13c29e006840107022822c2f507a1a6552a394fd7c73514fe10020991d42fc7b6413756a61cd63533841aa556f1b98f6087a65475dbd66db6553e8169e655893af6ed6509253a2f5d1b1c71028931d6c28e6d2fa81f2b46629ea8c1a911542d89b92cd354039670948b9d3f
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca978990d885635bbd7814f02b2a32544be86b61160898d7e3970ed6aa2a6e8f6b112d27ccb2601e90a964bccfb169fe9204a3da3a4972c6496fa0cbd6f356e219d06cd6f17dda71cb5b916816934dac150184d65210276cebb5821e2738c57699f96691d4c19c866de94e9990844d547c083bd4d4642803789bf6f2fb29e22760432d8c87f0985f864301e034c89127f88c85a68b0938246e735a303259f7d8efbd8420648b74f1428b02651b9cdb61e41b85c5b36d735145ae5b91297a45325c72486b72d69df0f39f2fd75fc494410905c72b654717bbc7e10646e4eb353f88c18f2427efded0cca0f57708e4123a0a9c4190ae99af97f03574a050a218420297
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97f653af6e4ae13512054764ee8d232e9cc05d5f9bb4f57d58a0ad086f8628387d0903332435b44bc5f824f0c797f2112a66347f604d1fb62f2916402d23bef65103ffec46349809ead2d897f1bdf388a5a054c696d176c57ef0ff94a4c587fd1e74c723473a15704a214a2889cd0d94d98950a324e46f1f215bc88ae34a55be84ae1c551260b0a61a2c39a322dac47bdbd5a2c4ce7e073f269bcd4ab7566482dddb06818de46b7d1c21a45262e93ff8aa2df2624886b335c1cc0a4023b976c91b4ed3cd1ebbc65cb0c3e786efae5e4748cfe94f63db5e3fa841a102fff74efc29b57a34e8500a9a7675ef3117079904ae55177c649fa69cf64ad7895f3aafd12b
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97b5d213334cbc15a12c5560a9a908cabf5b4f3a4f0e3bb0812e1487a1bfe6aa25769a90dc8f0d1766782607aefcc4249d04c6998f347e3c60123b99843a4f25b1e60b7b7a416c36a4c53b18957870a825b56723e553911685fb9b00a6bb6fd1659ab05cfdcce2da4440299c05f50b98114e08cf3925ef22fa56eb8e213bc6d7845b60c0a59e38c5eed5c8a46cf32c936f5876438797088136fd31237cd0685b2c22c670508c1c24936c1425e47cd00b37cf827fa153c4924a226059b37dc743688ad605d10ed0bc060e01b107a6cac6cd768e029adc9c986ab3f30da8a10ca4e128124b95264ace682d33f4e0200817b26a83ce7ac8963753d22b595b7e23d54a
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca978d9b855d162c28d05112f6cc00c06171bbb8889e9033513038331a6301191c52d4a7067e66beb0d09ec08586ca29a9f2960991ecaa6dbc2760779c04ea42e84116500bd2a059647de2273eed863d1251f3e9851c65ba0e96283ded3bbfadb03fe44fdb62e466afffa7ceb31d77e579eedb243c8228bcf7078e152453bf9651c35b9ea4bd633775ed31baade716b42e6bdf7360a870f8c15bdf3c7af63d229bc4fbe4ffcb706af3fff6dacdef024ff11acc2165e220e059f3cc14fe6a459d5f12c8e2305e7e579a61fc07220d2ce28c14ad94048d636a901875985465418b80ebb6334df62782e31774bc89ba99fca83d2909ec4a754975b6b212e9ad78bdb6b3
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97c15a0b8ddd7692280ef981d5f729b3ad2535f460de9067f891d120e866cd718888a864e293425aa31ee2f59470a81e5bc8a12af2e15e75bc8a8a7a7acf13f9bd1391fbfde54b1073c67e20715719b40e4fd6914b8f8ce40f3da18864f2f2bbdfd0c59702303723429f6f248a4f7a84d3e222bd74778e650da5a6d5ea3a23b802d3515c4d304afb1bf337b9102fd0bdeb19ebfc7c458de6bd0630e0d8b3c74d9b36cd991a5a406d9d28c56d8875f999b0e49a51cbe361fed9434c7ec4124d3905e5a103b5d73bfca98cf34725205ebc57cce68535c5f35c86236acc0c5928306d1b9333e278d3542a442c1e418fd4b8617f759b212a0ef6ebecbc85ef12bff8a3
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97e3bc785d9163ff8117e8352a4ca7efd8da1de6e0141a2d3061dd5d1cdaeefe60c73f5f350437093f03b1fcae30ce628322bfbeddbedc3b9cf80cd50f4e4901a5d4a1ac05d89e150ea2199c7bdb68063785e3d79f1bc21e6c80787e638f062a920c59c591616fc437eb4e3b91b5ec7dec05a1b1ae6665d12fc8745dbc833ad1bdd607964568734b554ecbb21af226eeb7f33d2a1ca817c23a73db11bf8c0cb8eec5261669a8170d5e22c1049bcf4d9c541c1cd99b9113b1e76fbb627364cb8421e828aaaac88d3a2dcfce513fe7a195cab005a5e603f0cabba1e60ffc51f6a06cef83e0fcb3fbe3cc7ec97174d598ef0ca387f6aec06886fd1053e0d9e1897d82
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97c68947fc7ae4f54867fa7630881e45a31399c51d71c2a3f4d349bdb5d720d26fac75e9010983a87f291ac3a7b43b04320fdc1fbaaf6f54a1c982c8c2fc6c233f0c89b230f0655f54652ccd77967161d0f081fd6fe93f27081e0aa66fe285bfbbfb5b05b8b7c53de8a4ef72a82adfc88ac526161561bcf973daf053d44f053e3eee5a7692a9397d5e393d90dda23b69ce0dc9497a27a02ec0019da21311e89a74d83662b86c98b903b5dd91fada3c6ca6d839d6a3a307286388da93d1f1f721ba57938acab207f7807d1235d8ff15133fa93d6ac4e03c19e837c6f6ecf680c8c5cb5aa33e08f4441b87e9f6c17237c10ad9ab6229ea170f4c822dda4d4d194eba
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97fe991554171d8fa89273f712f71992b79ccfb4f26d68c1fb81ebcaf526e6efb37f2e1664dc666b3360a540ee3c520b7f135ba2335c357a3dab1257a2d918aaf50541599482c754e5a03df4f3e7bf00baf50ac945af034cb49816838fda953891a37b4ed44da65f832ad79aa16bef86ec8dacb250f2a73468232367a995a4aaf4b633cd8acbbbd7c3948ebe2bada8c56dc774b998032be2365567c0337d27ba7c9514b9f71950cf3e6ce8b6ae3fdee8872a0fb418eaa6bb4d6d5b9fb00e09fa8738162c796d5483ee4123a69526d2e900fecce653419eb549ca3029210e326490da1384bacd98d0b062458e713b64aa08ed6b56011225196313c8d09225fc3018
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca978ce8aca0fee6c4ee6a398a8be738b04536a3acbdb67617ca7e879b9ef42d40a109a6fcbbd2898249b08c90ce4382e289829e3b59b6625fc80a2fd497679e4f83ff69281d727946e32f9e8a80953a95edacd0b372d8621a118f5b17fd83eef14ac6cb4b477fcd35f94a0385c5993385a362cadc8cdc70029450503d7935da8294268837c45262f2a3de566544340fcb56bf5a7c95f1c7cfd47502c8906565d0fba89844ed56519a8d0e091b7e946e21a3df455ce040caef15f13cfb9d34456a91c1b70a7719cf4fc38db1a18c2b4e12c991e1f159470640f1e1f0f55bc04c3f9c0e626ebd627c8ee117af09c3aab8c4e7557a76636d9f533eb965ccaf1d678156
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97a84160b9de87b65f221f7fe4a93871411a6a45ebb891211da4442277201b06057e87c7ce4fc9e1430d099eb2ddd7518c4d1dc891dd344ee7e578e1dbb95908791aa0dc29dec371104fa8b1bda26fc2340a29715db914202b3683c779be1dd971c82d9484b611522d46ae623d6d73c49a368857bfc61c0477faf528549d543427baf39a513a9ddff7c9f42c98e411e0bea4c592f883993bf0e7db802f6d62cee5823224a96407c1315f743fd456183aa30ad2c8670454cd3956882854a7f9bd4f9851effde2d5cdb1ec351f64cdc6f8f20bf57518c9496c2ee3ed3e8d3f11d7e49bfd203646b24046315327944ee0fe7bedfdd061d7e074f36f993b31b48758c4
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97d510f62985b03068f1dd613c3abe1d3ddbf0bb3c3592746fcaf9008d1f2701505b5170860d117ad96841c30db7489eab96cccb2a6675880a20a712b2e4c425aaa5a8a12680b341ac573cc8932787866d154b9f87f9bd419dc2775e540c96cf4e424978b446fc41c6ac332cef7af77230f033f1930f5c34a0718f894fc48c7dd745265547e6cd27a1f5522c6d8f50a3b778e292aeaaeac30b6dfe4fce24915748bcfc100d3166831b4c8eae9449b0cfd5104a7de90129426fc1ee3d9c05cbc1c37cf8b74cb1259deebad75d967adf0fe3dcbbad1aa0294fc83188e33399cb00e9c6cb0d77588f39ab84066365cb5f3d077be6a0de278b228861b79e39750a3076
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca978f7a64b11a4be63fc97263480d04ca00fa7510aa0fa5a939cf8fada5afda5fa01a5c20604c44829164d2cf2f053d4301df8385724924d41d61b8c35aabcfcf8e0211f98e1cb6fe22a9d9f3cf9c96c4717daee923414614bdea16258b1561ab1c15487659e1ec4ceaccee32b6ecd6f71c6b26633588ec4a60265ed47c9d4671fbdfdfa7a2e8c6158938c82d4b4d7c00b59c7263d7a73839073dc2a6721d100c0bc94c006498ce467be58455ee03ca9df61b87d9e7fa40bfcb3a5d09d3494812f0e476bac5c84167b426720470362051ae072b56726ed9ce3528f1786eae22105a29cfa93b52e64398c7f9278151bc661c1674933392b16f9090cc5e848936ca8e
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca9789461b9f7b09c9aad355bd97a615f70914e12a6bf485d0b051067017c8080df7bad54f3819895407e031c8dc666602ca0e3bc07d6378d4f4f5d5420c58a7aa4e2c20e7214b5540d6cf26ef6daa0517f98927df1ed78dbc87fb1c3bf79915ff1b72b4d8829f6346337f063ee3b3679310552f7cac51638adc8da14124880c1aca85bf08af6f43e7b1dfa5592352c58d7eb8e9642ef7e19e7f27748abfd65f30f878d5fe6c2c7db9f1216811b91a220f3446a12602e79e4886e0881fcf61f1b931e914599d61e9a84e0c5e01a1b11a046dfe08fe5ea8724dfa2cacd6947abc8b5be77cd21da64540d833744eaab1695e3e367b6632765c066f5b23d1c5e7fa5e91
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca978484b37c2f3ec87170152784f329edb9d9948745bcf8d310b551c51114d300ce49938a4af9e4bec586359d72289d4369a368a487efca7c2a98720d8427617cfe3771b6622ab4ab27f236d3c77deb1f7e8b08df28eb741cb9d7b3a4694956760cfa5554f76c9720f9e05257d8bef58fc0bee5b25b48164214d9e742f9449722e0969a80c8e3575c542afa7ff9cab186dff3dc0fb2597deb0271661a0f6616b292ef03be0c7036b098f8a1b0b9cb9182a7dab5b2b4ba1b8a0c1971800ebdc1f651dc33c3d87d848f84f8d900079a0c4fe540dae52f5447d5582162693cf4db4e17e964b1b1f369dd470a46b9294b4aecbe2002679edf9bf0e399a9ddf0f9edaa23
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e629504477d93cc5bcdae9dfd28b6d86aaf62779941f936ad870965fe874f1db6f0f31058018c16334fe0f183166d62a3cf46b9fdbb0f956514858227c045192f7c3e73092dc4365aaa1cd74af69e0250182b399ec3f9fe47aef83d97825ef45ab24084d0fd0ff6583f6d23b886f76ead84d6cfddeea73eb4036560807137ad28a4d67c34677e87a9491cf2974e6529297c144947179d73763dbbd0030934e5b6b00b6838ffbba99efc837efbfb43b70217994c7069270d2f8e4be1984f7a8054e66bf9a105ee25939bf4e6b92e02485cd1674ee296107132fb26c32a7a030f8b5f9ecede08ee67618fe79edf171dd14d69040196
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447caa5a66821859a2dc0e072db2548081ff5e1aebcda6b4199ff0dddf58dae9152fd9461f319c48cd3e008ebf374771d9f0e1b9a462f99388622b75cdeb8be988e10849c325514b9dda1f8d6363d1fd0ee45a4b67d2bab4d05de5467379593218bf7113c732127ff40df1014516bddb528d7509c8768325f0072bf29507611b148fcad1eeb98956b94604f44e9f0be999fd4f84216aa0ad3d21ded254b718a71a01aea874d8fdc926e27df34811cce98b3529c3e89bfa363708e014b4a175f56b167e12b949dbcf9bcc01e6a47d6588f0f39856b51b351e80886c751c87d88ad1804ef187e2bdc070ad23fdbaa03f3834a
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e629504474a9d2b06ddfdbe267b3a97fd65725236ed9b3546cebda726e9254920d87f9ff1d44d0a6d1787b329b198606ef0095cc0b2d885b8b4af3ee69a8ca0375cab6c81db9b788c3783f92cd20fa991213b4271e59b792ddd0b677ccc9e9888dcc5e60c5d2e53deb3b64d2def43e8cd7a387f62d84902872dabfc69bd5ef03b0c6d0fbbbdc9afc9e6bac85fae183fbaccf1f74d49a7f6d5839495f0a12af4617f3673c4c1bac3c214d8d0c27490e85fec9235aaa3628a3f42292bc4d38cf3befce825b03b5e90946769a2d5c2ffdce80c7165bf3c3c219ddc53c18232cacfb20ed84fb74dbbf19c1662225e26cd80381b039dd2
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e6295044757466e5106795b66a6387da578daa1d592ea5c97885e6429d4b2074cd60e3a48f25375afe896d1c775c65de33582488dba86322b6d99ed8b9e3ad7e9c9645e38d0c9d7e0abd136b58d52eb003ae701c892038d87b79e897652d1e5f1faf15681fa28294865099e771a2b1ad4887f9745bfe89fd8a97ed03548c66becced0cefc46822dc60afa266ade705961f81734daacaa6ad53a8e915bd330aa51e26607a2dcdb1f5d1988f70bc2e00db29fd296d7e4368eabf0de80fff904ce7ae5f1973aa9024027db038dd7d2a7020670cd5f5de29e17f6605e093320b9eb19b49bfccaba11a093f4a4ce567c8ec5935ffd58ea
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447c735a15b2505840c1dfd310cc00378c036702be3f4a9dc5965222fb12b8ac10c4c759bb737bd096f35f0d45ccff9f70f309e8360ef1e401279a74899e595233ae62663701463cbc115418ecc49b8f37cbd5cfe4d78c30c99fb4e1e83fc57c285feee4860ac0d8b9bf9cd2cec827b7807cb95ee93ff0592ce5c0c2f54f5498f63f6720daf7a525b70cfb72b207bf7bf4a6d7e7222d873bf305f4dbf619740fb924256f9295f2e33d35f4089b0d44b9ac41c1b0b138db13bad70a7cf47508c9558bed88586fba96701f10d3e83ddf992e91780a85d14979acde7e083237dd2c48b09e1db88aff7fde9667429c5b1f46ca3
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447972e7787a03db3b5a640513542a129074fd43d853c4eb850943ae34f3ee0dce076a1ef06868dc146057174546843483582d54a4cf5eb2793d744ee8e4200f00f53f14f8d6d3e58eaed777578516634cb37bb667068b173f67ebe05b6ac18b73075cec23d43003ed18ef44480f8aa77daf3b291dfa31b9e047c5072c09c4f0a380fa84da7ee1f910bc750135e9c6557a3224c754780b3d4df3773aae59d2d39303409a49637f99346b38388147d0315752ad64cea3ec960bafc235340da18ae9bf632a1e7dfc7d12860a6fedff5a4c82c43c2c45ac2b83ece3a118ac07cb0dc7b23e86f8b94490b5c845e9513c52c2c87
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447d7d578266eb5ed8052817f28a1ee1c4a2d57c214cbb4389d9fcaab674fe16e1eaeb835fc8e56b2e55a421e3a8ea2a28404612593aae15020f17806661fdcd1ec33ad645567594b8401cbf213050aca4611c7a2f9bc5b319c66afcbd3d98201fb913afc4df280fa1f6a76c4f5bc5eea21e40b8539f18872b20ccefbaba0671c72c5bdf6bd1edccd12c7377b0c70a9745013eabfaf9fd30b8aaf8842c818004f3a1ac219dc701f3c62428dfaa244146927c7cf63d1222b128bfa364265084c15c16665a1c8e772dae3a88e0bb3c075f91ff4ad8ec014d4b8eb61a4ae9a7ccf30756d4b6b8727ce2714389b903fcacff085
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e629504472856fdd33a21aa08b5d75a5ce3986e66b47316dfafe9a198a4bad0816fc409bc90278815d738162fe2149714eae6a665806673e8b1f07b4ad0daa33f862f8bfd43cdc5e3769529e68c1db7cf8df6113eaeaf8048b57d62695ebfde4ecdc4155b63c99eb32577a4f29f459982c99012b55e10cf2011ff5e942527e3b5661c9236f606a76b4163f19402001458c1e91ea3493b48763a293207974cca60e6ad902718660b037793a7a78142ade1f58e44ba12b6f64864baefcc3f5e52086086d073d928690e3bdc463d638182e8da13d6e8272b71a529b81d001bb1f066ff4cc938a5e10398f3874a7454f02be9a89c4087
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e629504473a859f6ed9b3e29a97f961f893905b9b0f5137d39711d0dc8c28c689b8ad5537d5ce4a2d9d11bbcf1dfacded581b51753d06a4a4d3e4a8106023cb89cf153e8a92afd3f4c88439133139e2c45c07922e05167b417c7fe400df3a8de3e5ca20d920b131949c693732553a30eb584164afb29d172fe2b4971a82f8407c5a13d27d3ad75de801784f51f7c412d5f1bd88940900f4b895ac7e8c80d3e976154d77f5646beff53c2ec3370fd9f2390104983fd01ee43846973518f9ac28db0474a2e5d35c7d20e55519e00e23e534bc4c256ddd14416aa2d0db90094650558d095d017ad836002c9b38dfdfa6ea9368df1127
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447527f28f03d1b0ac9b893534df88f676da599195bcb2cb62e885f860e34f0ea30825ac077406ceba90011d7ad09bae5fe980e579cb83758e57cd6cf6c2c949ebdc6d264b6dfa62baf532dd6f41ffc7f80707876e092be70ee3a2dd977630f1a66227d32d9f6a5acb16cb64e294a71f9b334f5599cc20f0bb0665716e69ba757765e41c55ee8085297f9aa9decc15c67aa5492052bd0cfa61a35700038bb6418507b53abc942da8b8d56ae4514957551f97b2b10c924a09c3bba4f92d1749e3ade97d763ee0abd5e15aca6401701077efc3baf8c05d15a1fd96df7c9aaec171990ac3344c43fb04e8b2ece7db9641ed2da
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447a1ec93d84ea533bef16d27a607e6f36f546d6041e8ebb6779af52f89611e5dece90af839522463273f9a0fa902c55515e39510d947b63082d1025b16aac06c891ec41e553f60df6f09883dc7e65ebdd66779505bcc6bdd4a4cef73badf29edd99156ba9232695f1245af4f753121f3536ac2511751972589a43773ac84ee053614b49c59bf70d9553c2104c83325777679e261b1466a7641f1fca32356d9bfe61cf853117e7ae6df08c32936bd41f02df7d8112542727310dd4044cde9e3a459a1ceb4dcbaf2cdc13bcda5284ea5a23ff3d3582ca80dd3043b3b71b5a47794b6799d32b042cc3f205ed75aba173d88a9
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447731e7b75ee401f3a1c3f57f5a32dd0ec8ab93978d60025f2a1f7ce38419ffd461befe968260d175e9b9d7369cb69a74b830f6a5850f5506188c07bfea225ed6030e88eebc28df0f888c126a17b2f127f1cab288e3e138a026f9497adf801a397be681359fd6d1b8dcceaf5af4bb4a02108d446856ae88a2026dbca715e46dd910e1fbd205aeb6efdf017ddb044914d9f5958ed1fbeb9f1440d15ef6b3619a439d166ce2aec06bb4f47174bd80fd45932aa4e868f3d3b7f157c084934f5ac3c0696b5d6c70a065e385e7a69cacbfa092181f58bf36c76221e58aa1811977055320dbba3e32930c1e2dcb6e6010567fea7
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447458b12e4410770cf350411b81957e3c04e347fa69b198ea8b6c83a576cb85914aef7833309d3e5ff96b63121b7c3f85cdeb7c2a76c77d1b4985463985c3f9dcc04d89b4634bd3e68d906e462eb0d8b46d51a07a0a24a106f87a97cb3bca0f8d9bf37ba9520734dbb20c58680e02d669d09bb166f672172a4c3340c77c8c685d75ddc728ea3f3167e19d05141389f5c8da8821ed5762fa761fc1b9d3592120e80490f3285a0909d3ca1f81023c3a04ae0121c63c7c45cb11c010ea6e8c1fb4d73f5ea402ca6bf4a57ac28de10939da6c61ae13feb2c5c728176b809a21956e99a57a26819ca229e68e5fe7fdaec1610d6
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447624fcaf8375233318cd8dae4503858d8b1de1dd4e6e8ba0a3016c2827e62451207db10973556242f7ee9711288404602088baed9367444de74eb09f831877aeb2da0c95f6288544d62a4b9534ec092142c7ac253c3ee46c8c8086e462f1b5b4adc4d054c711172292375afa6cec2c553e3de22e847b678aa41ceb2cb08946efcb0f7ff9831ca57f34ed83ab26c6fbc54c4d0f353f278a8184eee9a368980ef58cc2a3e68efae6766616948a11f2eb4a144964d00f0dca7594c04d656d1204888eaa66b3d6b6632d9330c1e28911af23ef4b13fa4afc97364a811ec5bbf23a6ccb3904d060870f55373b2959d7f8f17b2
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e6295044758338e5c286964b927a00c8c327ed0eeb7b8e6a27966638d5641db3e86d71d85aa2eca6a2e7feffc00a8c40f1a3a455cf30c366ffa71021681920854c7a40ed5dcd971dc9d07437bc548a02dcc4d8cceadc5a0e4817c22e1a39ab52272f23597f1f2c9d44ee4306e0da617803c1115681ac7752ed280966bd8bb19d3d8ed0de88c23c28d473d4fde6ddd3ae86e7e5c667001b8e9e882452cc03a7cf3130eec7d2b568134db94727695421da4065720f07ef94710d3aca2c7ee4d9a5db8794eebc8789fa6aaad0825c0a83907a341f29342f51c9ffcee3d6ebdbcf6224c75516533b923ff0a547bb92e3de376b2ac235a
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e629504477dcbe76270a38b39d3a9d4844b21c3fdaa9c6fa930eaeb54f7557c1819ec053f6ae0e9802510c89f756a4d5d70444987e9ec5e85bcd748abdb28db7277e6656629fb6ba1b80923af19bf451670404f67358ceb28b5fc86f3aa4a099e8ede47f23ddae9b0379f42163feb79c9985460008f08879975612ee5b9054ab07558930709d75df3033cc09c14c4c6d0176fb6e730e379952521e095bf2e50eb1354d785b25349d21b8c7d56cf85715355268ea8bbd6a1b580d790c27bd1d46328d595e24a83778d33b46521159bc35d22e227815641662e1ef2e7b28e063ef7d54c6698a2b20a34ea32a006ee8c2bd3d36c90ef
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597eafd6d31e7f8776c644bec881cd2563da1832958bcfed82422fb2ea1409c0bc46e5d6ce37c9d0df3d4e61745efd6de5c396097f01667d5b5edc0b2369692358cbf156f9323da3c5968c898250a2b2bde0144e27d364263eaab0b893917b37bd9715e229264356d8012906f60f7c1bee1a5730f2d0c082dc33e99cdc78723d37163f9dae7d18d2a1b1fed432e23539809e2fcf66d57c2f72c38b7c71bc4f02561c82908f4b0f5e58bf8c80d8ba7450dc682a1892acef2252f2b7f22ad33b3228e092032f97e7b449082bfc19927158eb1b0c1c49cd414ae73cd9d29316269ed98f
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597e30340c5f596a78fe3c81fed7f7f180fc6b7973ecc60af3bc5f74633ea74a18eb2fcccb6bab98693d12f4b7e88b4baf98defb9d4405b77c5c75d2e64f9c3f7fc03ce5a5411601dae73ab4cb1f18c760bea0936107b762052d9d3c4b7d80222265a91fa0abbf64cffa66fe645ead5852f9c326b8b38e1f537787e66886a26150ff5ab0a6692053d1f6319ceff65ac2effa443fa485fa5b73fd02e221b77b69babb96ac2fb87b6a912da279aceafce064775d74a71ffee87894ec40e2d2e2ba6b4673a7d4d27078cd8aebf62c406610bb2ff5eafa8b161774c06e7a867362b5e637
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597eec4c06db3442c3cc1bb686039fb7404dd87b15be21e6bd0209d1fa9f030a4bce424324fbcc616b1df72c5f2a0490c53964736d24042a73a2e7faad3355694b45a7af4cc75a7046e2322f0a8536a5f737b8cd14574ee5c56d10316a8d4759239dfc2fc84e1857799aa013012bae6f9c4c1af1964352b91b099185422d6ed2a040f76f62ba486264135dbb13efc6e77fa28f449cdbc0eecc266cf072a4802b5ff2484448b4a7cc2ce2058d09e99ed08916e836ce3ab9cecabcfe1bec05b98118587ce6580ae0c07d6d3dbdeba3a7edadd8960f669279b0230f6d851eb2b6abc12f
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ef3a13ef239721dafc41fe370b2c29a9155e94dd9b682109820b6eb35bea85a660dad46edf63a66d4f26fbccabdecbad8aa59626f3eded409d92dc5e8098e6db5e8d192acfda842e3c03d2e84f9d27bd1cfa09c93dade262751211e572d9155da8509fb2598242252adba5d97972f58a619db9788f9b50f276beac43c2e6e9589d5642398a7da8591ef8688e36d291ef32639db7fd8923eb5f892eeba0d1f005d3f182593097f7ba7794e561ffcdded2903f47f5716eeb5ffe792a3ccbd13a27c9d7f5dcdb030c0d209ec9970c5d1ebc7206a1244dd72dbc9e9f786945d6c82c2
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597eec1be57df85a20bf65e19b68a36d9e938312a74c14c08eaeb93b0562c57126e4381c3a967cd7ccfe5940e4003b65e423822d0c232fec5ba5d53fd2730f918fbd2c4912061450c04ac851fdbf397c7a464e0ee74598af571510ea866d358e47914e02d8bc4b32b938bc35a04e6b25fbe2ac35cca190edd7b666500d5f972adaa76ced5a621de4c347fde9eb2dc64ad994f1d00660de958e17e7a2b6f4bd75044007130556742a5adc83ffe19220a691e2f811235e7d2b3e1a7e49eb4ba0bf12005c9826b0e5bfde0141a1ab55d660944ef5fb29e11eb48508cdeebaef7776c5be
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597e388d8fe10bfbc41804987f710cab90d14fff33a76ec3ee78184eaa4b31c25af732d614de935e57915e417f2f67a79c06ae805f597fdfc4f4e534fd2a9b6ce76638f0848c63bcb42a1f67fad98f88903d00ced0a8e495a94150f5ad0c9d18d949f73bdf5fdf190c4db968fa94ee0551495f5659d2aa563b79e6ec5a3eb7d8c3cca655b1e33248e94247ed07941ee3221ec015bdb4d2578c27ebbe852edbe2ee4748de49a413b900a6eda5c6bd834fca5d9474239daad22fc8cd716b90d524576693c1cae6eb284e258e4638cdc2b50110655aabcf9e6048263d97714d9b0ddc42
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597eaa85c2e6e570f7618ed1609f7362a22f52fbc866a418ecb5fe0dc9eb23c1a9c2f8aa735ad8687dc1372d6439bfa4fa78ac5c196db0e94ab3ec769edee3d700c15d0ba477da8d780eedfbce41bad4947081200e090d5e233eeeb0665a53ba9695b6956bb5474b428116f7c962e9fef3569d3da6d75617266c9100c61cc8719d46538196c16e26600b0677831fbd97905818c434165cf3f7d65d76ea416a64f7be6db4a92a680c569e91fd73422131da4106f5418801c7648fb23d73fd7ecb3341720cf355779171eec6275f72b97910d7d25638f7b22c18d073573809ec2d7945
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597e07a350450edd380e189ea4152369d2e4c37a9768dfb2885227bedf8d0ff3065ca0fbd21faaae991d2073af32933a4b36ba35b1596577fd9155771c4c14890ebdd89808bde1c46763060236427cc37d950b19a373d72c804cf8247dbbb0744f2d45b19a8563f64fa58c8884f3e47bf91c8931180eafeeea6ef52cd662f93500f648d1b7a0a87a8fdfd63bdd5f2d26d82804b6a6619f58a62913f3e4fdf91ba5d2d8c39977828346a90d05a48930f60e45a5b14ce1d93709e015afd6f73d95c1a4ea31bdca677f03122981c04796b1b70f5ccc7927d53e8eaf1f1e8638bb975c82
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597e15874fab8c81f34db199487e9a1499630e27c8602ee42ac566c4eb1b75aeaa0c48d97b0a9226db7a24ce17a3ae93c93597340331ce2bbb6f06abdc689211ae54d94929ae5eba8d1561ada0c87bfd2943a6bc361549354434bb88fbb0c07b8f29a560820cd3d03b520dea05aed558e18212af63f3afc48c0177668f20be99390272f7302d87f2ec8bbc5c67456cec10bd14a7d638b7cd4c8cdc1a0bf4206e125f5ab714afc3277a752e4e28f23e03a04f0beb61869f369964e5d7fee4fda7b231895ab19e46f331b1fa535fb4ba56c28de8671a7f97028314ebc1a766737b2e5c
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597e7e4b15d5a66966922531f1c59a486cdf2d289e54c9efdf45bb647e3eb50cd51b4490076b2135779ad0dec1d4ac678038da9621cc8468e13875240aa1ab6389936221c526a72fcbb77e7fa9bcb9aef0f9fcffbe6f44a9a07c7c625f570881c8979a8a24659323ca1e96b4528dab7f557ced5b6b3667c4da9e52e8688d99073df12dcac49c525eba34c4b991790d78afbb528eb40e408022da9c8d02990ee85f4066454608c0200cdc3f681d790269ce4dd62a221d8747c3e0a5837865ed19c75fed4d743f276ed3abe9c0e3cfd5cc167566652ae42dd204418174bed3f6527232
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597e0680d279040724fb8d6135de8b310acd04b06fe2cbe82deb1a396de764b3038d4b3ec5a4a01ece03a7f1b8fd94c802c3c14750176738bef3e4fabda2d7d0625889e5544930c2c758afa1281cfd4f2a567c8b7b8d0ff9ad00e2026c7683ee2e430af37cc00d10134f486e1131ad713e0b76721175af6713e20bd7cb7aae2f4eb41fd666b7439353acbff0d339f55d788dbf080948854ced95e4de712ed1090cbe2d9e8af81f872ffa87e4a54c7e53b4d72bb8bb3d0c81ef7d660f40ab0d11b247625aa2508b4528fbfc30b501cdf1947db56c173b522f7a5f2edbac1b9c74e7be
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597e5ef147cc27d0c52c50931c1c4f5bca11b88407512c400602f81da601a7527d87e4d5d0943148b66e220cd557180e725ef4aac14a4dc301ed3c1cd1e589a095d9fea92827b9d98a4ca60944df72ddd9b1485db5169a4d6a86bc005faf77b217577bad63ecb0f789d3becf893d7c6672773c2b52fa7393b9bf851bd87dfb16bce190a958d961c9b395e477798365a57e9faea81ec15bccefa07fab6613ca4d846920e2320c78c3eef88c9c2190f03e464531d7f25119aa9a2bfd936022c4b5c10000f10969297972434605fa1700af27bc23b594b7af21849cdd8dae3fd166fd11
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597e5f5d1b216a867e070a710660589a260d56c72fbddde12cd5f6f61694f17061e5fedbd43642a4cc9ca2f82b3ac80db2212badc7b42cefe9889fb13fea7c2734d245cc6a7d0680b7e6c2a645db09a3e82e8c6683335b9081b5e4216a5802655f0c9a117efe2f423dfe3b913548cac1b339181378ce05755d77331888c05fd8f2d17af7db5853f905c1fc72183f08927179c85ec196b89b25ea546312fa6e820a925c2fb450f627812a2541bb810e32f8991912e639edd755a5d3872a0d666a9928092f529f263ac933eddad9c1a53e2c94b6e30b88a9d5d4e9ed9cb558a57bce79
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ebe661bf10543f11ddb28643b032ba266167ed6fe7876d0c2f2008e4d42c56587120ec7eaf60cb9e8afedf54a17818a384378b4ae416bf967278df8f8f5cfb85451e704b795c27533999be17cf0066a590523015a77125cc3f9e89152a953b3be0078ac5510d4b127e88b0e7d024a99c46f789bc237de6219822bfa4ca4408bb1953b6e3e2cd9488b8c9a353a50dc5cb8711e51bb5ff98e58353f5dc91c3b83e06607a4ca6e9ac3f0ed760a8be9681e1d54785af9794c2eb28945732cc55ae3e54a11e330b0c424e3999fbe27f0e2e31083390fec347c624b04e49d6a7e5ccd47
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ec92c840cbd076544d3c9c1f9c5e684d1660e748c197d26369c2490a0bbab97a7044ddd06439c6eb28eb9e5e08977415dc42a3419229c33cdd813bcc5b10025302b8f15e7343a8a182cb522bb09d199058738a92ba40eabf20b01d4dd48588c74848f90839b0c6726bfc54aba430afe4ad71837954309b1efe0d3e6985bcea10b0a8ac36972936c5487ed9c7534663d58d877235d70da52447769a259c4e9f50cd11a2ab50671ad44cdaf328f9575feafa401b6c50275dac39ddc52ddf71b4e6dd66d54aa0d52201f935efd55b2e5acb2cab557ef49e8d43f5cb5a952ad355dbd
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597e06c977f2d7ad252b2e4be269ad4f97e60d72672f6dd3f9e25e7b96aff14c8216d2ff86a4b8c2a0ab58a02d7322215876de57cc54f73aeb1cbcbee001f564a63ec36e33450e95f96194fc9025c30d93639728d5c69d9fe26b5b62b6ecd1f55a28a28575c616a3634286a4eb99c2fd885f59664f8f5c5777c07b70471bf205750482201ef1d6bb270067dfd133f4c8654fd577ff5c6bf9655905e7e8f99e96091640bb99e129a3cf65dea771ed19ed9b38721fac8b41b5941908115c95ace4eecfdd1f96dfcad8c77ea1cf1911c1a7e8958a5e892a542fce9505e25092b490ed17
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8931dbf8f4b0bf31a0c78329581f879edf17ec58bae30bf9adfbf3d6a642588ee3176a8146f8e0af4d9e02e940fface84bd1774ea789f01f8655d397c0c9b46f6ad38dcf63f2abac0627adbbf5bbd9df5655d6dd89f4e8b2aef1ec82418f0925475404d9ad31ead9532b371428d73ccf12add978f5d9cfe3796027f924420516ee73273ba9b12c62e4bf4c9d0d8133f456462ef1d9d6582a2cbd322e7e1e0795af55548c34bbefd10187730f6f5dcff2607e380c8902ae1b5c559c1fca483efeb664402230aaee012c7b9746750991acbbc
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e89340cf262a2721159171e4d4da62c2ce27093a4ae54ebc16f0076b1ee089aaa456180a69eeb46faabe413ac306a96fa3c395aed17ab2627ab4dbe714bec2a8cce18664abfbcd428c976a3288848e50436683f07a91097055cd8960089bfef263c61d55080017516e7b7936be9cd7cd0bdf8143a6338355a4f3e18b184caa7b5238239ae2863b49f88e19eab626b5902f5c2e4d7d9c160f2808d0a95ce156c98501997db6afd280dd4f8094f34eaf7013e6f82d3d9d4b886dc53f74e76ed22a04d3990c596a44417a6fe2844d6a7c76f48b
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e89329dc7a43ef9d581e67b4bf85049d6574db02e8bfe32eaede9a9dc59ad27337d4faccc9cf9ee8f775fed0f85b27899f4b7c1d70fe0c30bc7dc0b87abde1ad81f55c92272c4709356678419cd9d9832c60eedbd74a24bf9549a0c39772cc6337b5043f9c79c0f076e5289584d01b6f428c1ea0ab0963765a846f5a5875eaa35b6bb140cbbb58480abbed3adba866f96f4c964b2789016d07524ad28370b07ea21a9f2ca86ab973901f5bddd737c8611fdcb848d1baebac5821fd29de05182f82caef4a96330e0d50d143ea11e60b1872b9
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8935d5472f5d66770ac1858278956fde6b36de729db9e8bf14401283cd5f82c89f4b3f1e7baddc5031e59a79b139ce5508464d71297b862c54a5f64325c9f7dfd2c2c9649a4ed050b5a25f56debf1526b150abbc40ef8c9b30663f1c2d064e06e418d1d7f4f26d96e2f3f6651d9b8aac17ea6320671a589e2bd01942adb3dde64c6425f1290ee38e74cbfc31c35727ce8d0fbe48a67e0b9646d8f23e18b114e4e127d3dc231dbef273db5048b86ff60ad998697404b93557fa458e594b6590b724a8be4f81429536f1b47d431e884054b83
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e89319ffe05c7eecc23c61e36e4c2d2c3d37c5b9152f06d687242ba10083988d343f8eea6b39c29b69577909747f618d8699ad7ef2b7b0c9c935f762fce73669f86f74e923e8aca3b50f25f8dfba9b1f1c6bccfd10e2b9c06d012beedcc4274096f5c77e5ca1fcf891256535931d064deaf552282a9c75a379322dc12ff5ecf9d3146333958a43bedd64ece1bd4c98adf289675ea2fe085d4ecdce6b672a10972803d01a6a645a5a3ff1d3015e72d90cf19ea8a5b10cde4f824e71e6e9aa5f32ecdfc678ca2d8957cd0fd35c39cab6a88ca2
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e893586bf0222884e567e6406560633f87cf9e59cfe75b87bb334a89e569b1959752fca8c49d267de03a71198654c062d5b520726381f43ad5f0db597a3ed236182cbfe2a43b4a83cc32c7d746f5499204a5fff0eb5e0c1c6f2637677cf5a4ab5b3f5bfde072c92227478486a1d78a1ddd11b818f5a3a48bffe2007db88c7895cdfb514c51ff59957f49e95ca8fcc277b3ea9973c5fa4ec361a1279e4f8bc4a5d289e5a15fe2a1cf41869849d8653b452bea33b7fdb1472fed82dac6c12260a06a529637b745e32508316bd605b4bdf426ef
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e893e5ce5b0efc12a961648fec1bd6b0768c65e996826fe52c4a417bbbec846dd7632f8a2f832b28c6fe050c63b8c6b1a7847285be3e9c7f66a81dc7f94d40992934e0152577fbabb4ac9f08e6a84682b1602d660b1f1dbc25891409166d690cd8dbd00d8fe08245e0438298b9adc52e8b5fb05ea73ae8cc317f0b75db64389095b73d727f1f6b2da68f8a3abe877b8855ddf3843edae5f5450472b082ff05c7d30e14d345580e1c08129443fb3903eb7673df655c9e06bbf26117744c368a461dca639998c73d3548690e664f14f4258d94
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e893e1aeb0cd7d81761ebfe0f3aa0b5e6855cdbc5bb51c99521e8dafe9cff970163e2f6e19ca8edda8b1901dfc70464c5ca6ee33b3e534f6471dc622dbe6225295cabcbaff33e78bc3be737deeb1e4065fb77a9115cd57f42247369effe4635c011dc7995e95a96ddfb013d57860fb5af9049a62e139bd50a6d5c34c06e232f5b7ee943beba648aeb10333c6f6b3a197e29d33d1b363d0b5f5d504f58b05c8861fbf35c873fe72b9602640e05187d15ffd93372e9496595ee1d020d37bf18b072e3f891ba9aa185e5b346930d47aa9d39040
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8937abb621f87dc1d875869595860d2455b9bbc5552ee6bd99546d86ef2ff37366043a877e0a7b48cd9bfcbc1a665db8f500c05bf431ae28adb4f9da34c73fd35ce385f7ac43b6c1aefbbe81c796c1e4eb5449047dc42df990beca41be2b9ed70060e7fa008078473c2805aadcd872063bb98601870e696b7acf887e52a9b9b0866afe89f5eb89775eb352a44f5658f3909a0a2c3f932f4bd7f074620c389e6f3623727ebc7758a907bc1a1fcb828fc6719f05a62de95a14d95217c01112c249c37b88eec4fb1fc64cdf3a25cd8a7455f56
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e89386349c60df134738bf9cd79ff44bdfc27392e88f2ca13ad3c6a7d5cfd8f5953e8a3cd7c260bd7554638e608a3a39f0d097528f34cba64aa13bb0bc97e7b906b92a41c4c47a7131e36723173c9e6b9d6687a3be3e3213e06dd8ec04596171aa2151066824dc8857b1ec468f31745d300c84739f3360c6f2bb5f510a85fe095247adce336fa7a465d9770fe1e760bbf8188b9fc06437ecf06263bcdeb3ffa8e86a6681ec9e4de80c3411b05afa5fbc1d72c8ebddaa2b1b5c6fcec23bfe28a1699b126b0e495153c21f357409a4565560ce
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e893a281282957fc69b7ca2d9e399dde32ce67d7f803041fd41ac1c5e29d838f4a5a61b5e41c37c77cd99e2086deef1fd3a1f52205fec1609b898fb3269270fd5ed70b99a5d9c50b20f73d83bb224c381b65dfcc63b329cd2eddc41cfb0a3fd34d10578dbf362364ff9e404b72fcdeb00f4f1d7b79c9327781e7f37922f3f74c8ae6b07af55cfccf47b3d3731ced97d83ccca7832ef4ce882fc9438e69eacdd21ec2499c5543436db3835691a7d45dac32a49cbecc752a37d584b588b56df0928c4c4f705a40af391e61b80e674140868941
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8935a6678457eacc57abd9fac0429320360be153d397dc6898ab6d2de9baefb9be9853042a17e2603fbe89126d7c1ec521d9d6501877196232f22e0246559a410510a937750e119953db4c141a178bb0949ee1bd4875a87e1da89122725db12cea2df70116e02643b4c4e66c9df051acb4e3ae9b49f531b887471ae9e216b6849eb33a99542cc03836f94f74583f13dd15863af8e5b0761eef7fed0f2de6847b6903a406444b4abeae4f879a1c64ab366b6ca251d0e041934f1d492cd96c3f66cff59d1c5cb1ae1b29bff4ce373a1306bf4
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e893f56db74314aa97d6a4816e78a1b250947b6d828d930c5332e879b4a9a42eb90cee0c34df145ab46994dbc339768bf5de29724220ab0b13f8ad2aac51aa6d29652e5102f77b31bbaaa398871befda8f2f5e59f8d86c807e3c496154f90710079fee0bec2f02a40ae0bb38a89790393b199b1d0a30ab77d81d7a3c66c920bd15053bd236c294e3ea02482c3b8cb1d8b84cb80347c3ad796a7a2215b469baf8b593fa3ee66330b66bbc91a85bc9569c11b0585ffe36f08125bf215e0676a91688cb695340c22d96c15e984d3649092386f6
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e893b4da8f73f9145a48320c562103416b8258ad0d1e1ed9539462ae8e1d05453dc821e9920b5bd8c1a443251c569193fc4dd488d75a1ce30e5533e9ecc77ebf0f5f2f6ee2c134b8d0973effcd4a281b3a2a61115a27f2b8375e55a21dde0d63bd433f7c1b193e6ca85e92cc5a7d5b9d452ebbef688c5f41ec50ab548de0d51343a325c0bc29ef100ccb0c48ea8cb5a54acd46d5c8683ee6d2c3f1818b659c36566f2b2293a0b22643e91e70eabd6d139cc723bd2b1d2a0046339bed96b513256c8348f97e72e6c65d9cf7a3ee3c3e9f6169
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e893f5614d3985dc720334f8c5f47d3f727c4d835c4985588d15879b7da6294d2efe710b6b3ed54b106b6cce679c8a27e8d48bd3cca6cfc310f72ec5e9e19425e8a3eae11232a7800c53a1eed56cee6d697a8480f47b5cbd95f91c680be3f0e1a54a25cba02b2ba92d315625e0998aa3a7b75e36b4707da10219e587e3d09b67c2992b2fd29ccd6267fa4e76c161a264abe04f2a222bbe5ab2c0a0981c6e12335f966d04f83f2e87d625fb400324086155963c7b19a98f27f2bcc2d4faf64c83d34a3465b7a162b52bcb82e6b0e4093d695d
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e893b0fc267ec80b62be97c170de3a0cca7050b4e33ffb74357be1cf0d1a803b65537e24e8f6aa859851f851f4cab2785d86f10b9ba9223d6a64476447e2ba5a8e675295c283a00a6d42e8e1f804a1c23d88af9d36144644d588b1fc75eaf5f0a05e7eac46e4b0d1034cb1275ccca3878fee60cdbbfd83be6be6250e0244ebf5c346f24d1d6a10a7422d7a122db794409b2d8599ea03a2a59011b384048aa8450d9e33f9b6b4fd8cbc48e7d55ae56bd0c4f86046ccc5bfcce22e2af3990907ab8c747921eb58b2b0564e0345e4aec6c62398
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca230a149ac3543746b8b79f47fe22893590baf22cce4603af7dd15d89c3e4386fd56c373c9a8158e53852bf33c7ebc65ba1508c63e3e596533844b94f80dd122b5e18f2bcbb2ab1abb879a59e550a5701bae52ebee7d93bc079296391af90ab57b6629012aa21e959b8445e87f15fa41142bcd382b91dcd81c4a21ff99381c66120d4288b1c8b555759aa8301961d6a7e47982342e403949018346e61584c36ef033302c9e3876e8bdd5924c1e9adf96d94abda968a5a9a275ffd417f9c842ad4
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57cae97580cef4057fd0b8e836c85ab759e530afe1558ce5172a582de5aeda8ab8586462a39f886ffd8f670525be81ece0e4eaa14e6063a9b0a1a958e78e733933c4ec922dfbc90572e85ce0306a8cdb0bbc4d7b1133482358899b3e1576ee13148aeee4286305d586b81366abc2ecec05e8dbcc27ce6b5667575c2bb790af386e912fd8a10e8bd8845aff79b795a5600a642d0aa72b130329a059c740af40434438ee0870555734b1d64c606d47218c2721948e0500e9dbe65b62a12bab81f62880
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca0820edb5dbfc004ac6b40c9805c3e62634369f085c0e8763fdc7018975048a69cc04220732da0df66905ae1f511d0786926509506f64f52a43a4091227b8a48105e1a89c55940c1d0ef44981181613f287db9a98bf9f74e0bcea71f78552d9e415b6fed0bed4543696d15b4c7221f5f9c888b6d0c62e84e3a341871f60f7ff62738a2df747a2aedd4899a05e7360fd68a1abb8007eb62ebcfe674a7b9e58b7bf0cec098e27807e43499745003804494038029d6fa3b624cad7545a294238562b
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca3edbbd822c9c60c65dc99c1fa798066c0ccb8075e9f17036d18fe3d562543e5bf911eb29428e8f3c2c8f66e6ad4f98dfdcf941741d259cf429f595eead86b3b18cb3f230cab716dea888c169be203f8dc3573543045bab2d74859d790cbbb2f9334094f57f6d23e1ff29409e47acc00ac0f4561350ecfe99b5c531424099ccd21ba7692d51f9428328ad145a77d3fe18bd14febc2a4b850390d836ac2ee3d9169f7595af250356e9122ab4c5b5d04e448e6d0832f149aad35c51384aae2db5e5
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57caff7480a4e61cf8ef66adc10ffbf6f8fe50082056475976d30d9221c70cf6de6086a97929f0ed5942b404282a8fe4dd7a914d2548f13cff13c43bde01450149f6541475ac72bc73b124a3e16c0a4d161c7eea94a8b6bbd1ff4656943e2a60bc72c12a47271d93286c44776aa2812ba52aaf15687a51d967f3de0a1a94b58d74bab75867e857d5e7740319faab7056ecb46e0681f23a4a9299698186519dccfda1ca32f136f710002c82448887c705cec551801a769cad84020c64026ca9b51708
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57caed34b08351ce045806536b0de176c6a5e66fb0c55f4d09214d7bb9ac0fce0edcb4f7c8fe42f6962c820aab3347dc19dc1ab5fd6182a26f979c94979c082cd8cc3480075b323b072b1570a1e11c67eb208a86f2af457967c3642e6eaa66ad5783a5e3c1c43672c2a58a628771f721e0933d0e602aa1061dce573385a5d5cca00bcf95f4f9e8e4b6552f2f4e8970db3e3670b5f0f3fea7f0279d07b9df283658f5472bd695e7ead90304cb55080603234347915fef66c43631b624a80d5fd33e47
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57caa468578d115d46a5e01ff0b3754ae705ba33007eb53a1e95623db01e79a6e57d1cab9aba0c01666e1ae50582ca63ccad9dd75eed24409e9e383f95cae155be805292a5b92e4bafa95d69db73d07b191d951abbca9c74f6c6c071648f3c753be911e6a76fe53d8801d6a2f2b8544b35da23b99a2ad72382ca036c6a0b203b05810ae4aed7b2b0d52571f2bd20fed1cc264ae80f79b80502888af72acfdab92387c70966a08f5f78d966639666c9163466ea1cbfa412138448a78074f284dddccf
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57cabf2a8af3aa0264de545df615f697cc36abe251e167a96a2c35ba91a8c315cd5a711665016b23423691ef380f7ee21d4a36ab6e636f0bdb8dd35425e34f3ed535a9d321e94ab9b5c535d884beec4534b295eb9821a4ccd23c18820df4d2756acd73624a3d74e7a6a18285d49ea345a899c3bcecf9cd3948380020ef6c19a6b83fcf2bb4c3eeaff38f2f240b1b848e74c866378f20c2e41dbed10bdf49b86b3e51315d4b9757ea38b5cf3cca4601ecd18172790c04743534479af9e554e327fa25
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca402fa1a5b0e656580801c32df9421290b7fbaabbd836000df6e572bac7509b1d01046bace99b697183d89c5478377f17593f9ffdcac881b7c4c95ee1e7b54aa6504062c637b4b123d5822dfccd3537a3e13932559fb51511b14dce1bf23e26208b0eba96001287c1b1df97a53d0cc07ec0994df9f958b4e5a7192147c762caddeebbf2ed2bcc3610d4c44318ecd373b95e95e5b45122dd3d90e9c862ed382b8a6940ea424b1d820aa1f19e05f2dd916c458b2819180be842773ef3b898038a4f
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57caa02fb3a79a955327409e13d3bc1d63073dfd9baa32413f130c195ad782150c43d8f5362c090db748bac67bf7e407a400e75bc256669f2826ca0b43d6db1e845fad0eb040ca24dc288525d4cc7d82d707081b95d6e60006b6f234d0ea657d2da99d7f2fdf7d684aa03a9b1618bf2d4c6fb1665e85a5011c9cdcea7f41fa657e3d8e01aefd387d2f9e431ae5b62f26e82f4e1ee7ffc75dbf4e5f64e7d1e8ad6d34a393af6833f794fffc088275a622ba9da970a02f9d12aa678a22c6deb59f2a09
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57caa311775c17b04807f4ca083e12ea85cbafa7bfea283f39d8445a21ff3d130882e26091810401298418e1f364965d0b95a6b5339149f898f75574ff2a972148ea59d5f5e9dccc1c305f5728c6b5024ca577d963d4533ec102b6da7f861a7846c9c446c828bbd74520a0f1782ac4d6cbd7495bf732438e47f1d69db326e99efffd87916d676460b4f8839e6eda596aa0675d2a60b6ba115642643f0833b96cc47b23897f6c54fe12eb854c745c2510d24317a4615e1afa957d88f585ba24c041e0
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca204171fdaebe8a9599280614b2c1ce84e1d2e413bc5aac9a73f021f8b606262ed2e5767754a053c6cf303b2e92ee153a9be25323ccf2f9ac8b117e29c3a78273f9af35fec26878c784207715ac6caa59b83f78cf1533ba343b87cf40aedf14f84c8a39831a83c79acea9cac96214fad06cd68b0d7beb7cd45707759563accf4e8d51f069115c18c67d3e9b0dc1f6abb35772083cc891d5f354b4a23e61b4410e6699b798494a17d8bb5611ea823f7501b9af7753ab549123bac06cd91677bc5c
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1deca010fb7067a9fe397c2445878bc01f88c08965f0f64355be203cb3e7c1089d648a4c8d53d16fe66e4702ed75ad77cd87c55305c3c71f501fab5252b3003bac2e607b7c9319b9e2991c95c3f92a97d07437791a5035bf66d791e484560edf2c4e3659753e129064c1ab77dd4c1bb471a49c60ec346cca84d6b89e20cbd173d0bf80e19db1432e1921e910a2d6fec3fb126d4bbb76505c6ce75bd241e82598a1bde8952547b81a2bf93ca619a5f0e7441450d3c7db939a16e7774d151440b8
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca7007b7c4303dcdbb5092c6943f15ca8d9fb813db929184599228fe6a614cffcc7ac9cc9bfcdcc381faf46995a6078f8e3efd7826c8a5d5757df00edbf72ed8926b7b166b69bc8d121c53792ccad026148f49828a36a449ebc65c2b42129c09f8d816148b12890a02ba68f7f72298b1733f4a67f4b563ef8db6ac951d710b2d4c9ba7971066caa0e5f1a992ff16c94afb91a8a7ba6adab703e0b384e48349d487f96fe4ea8af79cc179cb8dec00b5d0df4ce01f0bb496c19aca1b746606c48881
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca784b98fdf2bacbd8e4f58e5b573a7859fb564c7eafffec324cf54478335a4451f5195a1ad8810078197dd3b63f7773d8dca49cd58b90b3adaca93e85e2f9a6f3e0e0d4bb3c7369e9a43aeff0d10331e1d30b30d48009e0896a07219203bdc70e48ea3909d20fa1e6cbb3d315e3d40165d44df2c7e913ce805c6f5a677b9c327b78cb52cc910074240fafb2b8f7eefa5b961d16ce3c15f0db02788c38e3af46f065b0f8dff3c835ad44f5d9b9ca3133862cc4f49a45a3d4c1ad64b24bd6fb78ed
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca5bb609bd248736eb7b555c475a74812908c532a07c37c73a15f1c4991bbca5dde25e2425619779ee004779b4e5883db14c2ba6ca4a9189406404be6121d47ae05fea67809723e43a1cb7e90ff65cf737ebebeb7ac64cb4b027c43bcef6966354f87b80547433c98fc0d52530dffb2ea68d07ee0638b4d9b54b3fa126b6eecaf4fe35980600951946318fec9e18529ece014014d79bd031c69a8a899965a7dc7ad9e10436f61a4ff6b0b23732593d5e64fcf05e6d4bff69e1cf32d625fa5a848f
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c036ed67ee5ac89d5dea91dcbee2117ecfa214cb5268bf8ca99231d3759b9dcac90288e66947c8bd91f3ce9ce01abee3144e6a519ef7e262334d73b8623a362f6062f4ee6d17c0e0efb6020de633a3aa81ba27fcab235d084acb9a58885c780cb32479a3c2f1234fe8ab5f89b9c58d5ebd205e08d6dc5425ca0a5f7b834b990fdff6fce3216bf63e15973ab412b9a18fc791181e70010ce9689ecbe5b86f82d6021f1dd05993e527886464d0072998111fea
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0360d0d74978d37b366c128e03ace2b1fda88ecb1b346549323698edaaccf3d0d2299d2aae049a1d6cb9d0c058648a80a6557ba96740e5cac434d56cec3e815682b76162c402065810cccaf7d6f57c6f8b2ca0510a57eda144e5fb4a20a0b3d1bd8daee8b75526b2451a9e31bc6bb2b1deb789651fb9f030f5ba0e7e5338e5d2a1b6166ba1eeead65c6423d1bd0346d0a49f2942795bf416fe1dd4d66dadf9f2438033cdae25fdb1197e311b8d0dad577fc
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c03615fcd0e1d611b563974df72e35233f3ccb61bfeadb4e79af4565ff79af28e05c2634340d9e77dd8ba921ea2f1f337d2d1176b97b4c55af64463e17b2607222caaeac755c9cfa7d6bffd0e71b9d6d81aacbcd12cf7590a5f11308acf3b03f4833b1d7d49a064ef54fe1d8305f74fee5c41b9f80a5bd25c62ecf5c688034526be7026ae2e1aeb930a8772a630538ac4b1a19ce79e4bdb9da59b51385350dd33c65fe201f7abf8a508b7758f71fd07cfcc1
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0368d0d4b9b6c3ba2e2571c26b745c6d05b3ff65e4a51b5e00d0395db953bb2235c82a4201ed9ac354827c2144ffe815cfee86e7fc3fc6e4fce7b2d23342dd04d74334f96aca72002be0826d5990b0a25938775510ac8058b3efa8870516477d3c0760eb0ad37b743ef24c1a40e94668980dc4f5083ce2855e73e3d5506967f5e76fa4efae718dd806353aeca39d80ac4e87efc6e4f795454cca54687b2b5df25f1467145f762c683ffdce7e3940eeeb4a2
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c03638b9a0b29ca60f12b33feac43695e9629d11cb6ba9c93d17a57edaea6263ddcda00f4dc3204f44603d6fb46ef924c3363e02a6bf35ee6d35e60400db64f25fe1c796b53db77798d54ec2d113e61fee81987ac414d15b2ae3b7d7d93127ae6ad887af7e26abf7352109b5dd0fec56a28c684c51ec1a328c5d643e5c45862ca591a1ac5274fd2af096c843dfcfa896a8df0d3c3bb67aded343212277895c24cbb0593240e9879a358d28fe88f5a2ee8c91
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0364ca6c12d043af08aea654656093063e262e5aee82961e86f4d07c6df657b24141c9d17fcc0559ca09d5a2f2d23817db9d53150071bb7b6730e950d1ac90da8f4edf073bb66a4c2a1e194652e66c26bdcac534bc3311f8c344725746773dce6904f599c330dce60f12b762e935f01df00bc658837de57fa05c3a94c898634518ff7bbc5db9a622e77cc2a5c97b94ab7e22f052a411ef0c2e8ab3c8362e4c302bed57ddb8b5f2c25ba734855e0626ec756
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c036a480c8e6c3db7fe51d4e411238800f5cb3ec1e68b86846238e4b6cad70e6ec53ae014f1eb8c57d5c24cadd6000f878f83676b0958355ee94e003690c22ba1abb4d12d20f30b6d46c9ca72c4176fdcdd8de37af13b032f81834230cbf198c6f9a263e9af1b434b9bc4c8c65498aa64979c2c6ebf199b215d097baa51853257bf6efed16a7c5d486044d0f4f7966e4f153dffda14b545dd5e326f9b5776414f359863954d807dd018dd6411ede49f0c490
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c036a5cc5e00efb5abd26cb6961ca3eee41e505cfa6316fd8677f162074726bb2ea8b1c9f8ac536216b135fd51cfc3e68d524608964af36a1fca7243bbecefa51c1de51519c174b77df705f3571f87bff1fe1ae0bb8a7889893dc5acb6089c80406c323084298f5315bf6c32c962abceb1c835dac3b6c566a2c867893e10a97458263b6ec9f902f919312b26c149642858d8c9bf515efe135214ecd08e5068b8a5bf6e79309b9778522afdf4ec939f052045
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c036a88980ec0e8b8f15d8ce68e3e35a55095df4f2d837074d7cf5f3e1dc22a3aa1de6a44ed333730ffa313d55f9ff8847e4f763fbc61c0b01228ce3e499bfcec248e6a5da8fd94b16f8778299f5dc610493fe45786738d896b79b77ba0c56af1d046f3f98f8db15448dad5d312661274fa501e26fdde227ca4d5ff16b21acaca5dc2c58a5ddb44cd9925db19ef131f0cb1f69d1ce521155a3aa29bc463391346962a9414b715307d41084cbcb4be9cce205
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c036861652446269c9504762c24be76d96c15be11eafea07d451499a2b4435797a1fd2c5507f94cb293a3683e7c37ab18c9dbdb58e801421e8d124a470c29ea0f329d1eb31c3884f6946bd552cd2431c94e9a0e0a4552ed57a9607c9c29f0907602d7a41e45aefa9c55cfd0dd79122ab2f3cab894c5fa630427fcf698fc2294850d4d74f22a5d3dbf064e51838c2ef8d62b797ec0d0360a1f13fc577dc303b3debbf2b0691c0abba67d9923049fc1adca1b3
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c036b9677f9d4ba17da73d32124e12e1c3b67a625c61a8c4505f73f9c714509e84b605050821f887761ed3b9d73b9ade8d0539b089220774b4a434393fe2ffa5b27a6ee3566768ff89c33cbc9a49409d66dc9d42711b6c4da7a7b60d1a8c5d8f49aaa3db53330d22c81b18b305578b0ea7e3c33be22f93b9ddd5e3e0f49c95376c357a691c7ea1bb4cd1be74be07f50fb00816fd3662d6b10ff2472b86587682e11d34eaf53e781ff0ca2575c3efb21344f4
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c036c3e4a1805866367d14e2aaa8815ae87e9e4c13532ec7464a6ca2d0e0b4c481b34e30cfc8b4a7c166077be09fac872e09138987e5cd4ce70d73027480c2477d608896fdd96db70dc73285149dffc3ccbd7d1f7fe303941416d7d099e99b9cd3cca7d596526cd63027840f853f2d67052d22b29514bbe93134f328630eede0b458553278f18cef1d187a63ce446e928038fe77c2438721f402b8ec3f591d759b5ed19fc631607f7e3017a4863beb7e7c7b
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0360c47539b64f1b67e9a447f16b0faf78366f443ff1a72bb67b471560a1e628a515be5c7cd06dac3ecd89f753be0d0d20906ede2d84bb72f2c44a57bcdf77245bc4e6fd692b83230eae6df324cddcd689d425f681e58a19fb781c6350a6c851ae69c0c55c276b51e6351e2e39fc32dc4c024b062726d3d5c7dcd1eb6f6e22de41c0fff53fad4aac8050a37dce5ad4b16f734aeb51f33fcde378baac84f89fb4fef04a9ea085a9b1db2b38d331cf4fdde89
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c036b1d5c85aed68f50642d52d7c8567eb668151e3d628ed44aef77ec5085195ebe66a362983a8a60fb527883ca0ba303d4a57880561a71241ea058f3528cca6bfd2ee4b57c4c1e031295afc950605f1a4fcb9fea7d5233d33c85dfc725d99eada540c5cf799a2c9a54e34e7e3fb728ccb0c300f97b0ca811ee2d148e47899e9ce58f6e9e5df757c1377b5ee09647332a626f44461b3443918643b9c63749b0aa7a91faa443ccda3a6de7a30af8ee90c6927
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0361ccd884fa8b6cdc163e07234ffbea4739a268a525791333d94468d998abecff4c5c728f5ebff11f5c507ff62a49fc90b83364441c6a1b5eecd0a0fd13fbecaadeed3cde830e28981ef94478334dd0aa7864bdf184caf9e7fe423472b466be451df40a88fc92d8c450e5650c1561373fbb0871ac0d92e09e4187d9afd83d6b7a6218eec6d92898819b7af0da7506f9c99783e34c42a633e930b67c6ef4e2c5d0884373ef60372442c3c2f9233395c2817
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c03682fb02bd02bc1e5daf4c0bf3c37533de8c71522d597e5be1963626754c0458183146462e39779e755dffd85726194aff58a45fed67fa98bf886aa16450df02c646a96d1e3f58b3ce43e2d2d602512daf5c316792e63610e75e352bf2521127b83ea4d27397df4ad608596b27b3bff2481dc1d530ce6d767df04ea9a7f6580e885b1e3ad334fe750226bef87fddeb4be84497a30edc77e84fc826eb57369f693e2d94b3a8b480844b88045ed2980e45f7
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b9cc5dbfa8e27ce93182b06c101d179aeec13881a9b5ea20b97005b668c0acb6e33af724f2654de22ab8163b8b4de9e7256b39f6a7a8e3f4813aa5efffd6df705d5332cfc3401fcb63af80517065879b98cbf7d8427dd71a7322cd99ed3e1a5939cc58131aa4068f1692c5e19f7d4465308cf214431676346f0ba4be6847532f2f0a48288da83d4277b3728dfee3b0d0f5567056517f9c42cff7b3fff3c36fa56
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b85c3ffb952fb112d4923a5b8fb7facd04d5679820af2a765e846fe749656e0ad1c498d1dac8d3fc98eb700bf98a2719df812927a3d5feb3eda5fbcf8696717d280cade0c3dadab21653b3f7052fb267419e33dc964e786eddea0186a54fdfb5e5583ffd4c38b937ab04d39b38c4b81964012f1e0998382d5f6da5439a0ab61e626a5a4c0bad2aeeb459e45124e052dbc65c977da18256485bf83a804ea07bc23
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b66f5768d59c85e8cd17e3ff4867ab9269bf1ae65b0a620b88d95cc3c679f33837922d9cc2864440f402c88ab870203f6421330bb8131786929b25d56359d0077e23384772d12085e770c532df80810d81d239fb4c237db9d793e859b485cf11d7568c73d528477484dce1daa144bb017164b082cf60c3c9565e39d84e35cf80fb7cec35a63483a8ce34bc7dca021a7214498caacaf5dfb02cf6f69779a3b0fb4
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b681786eb44c331d35c79b0069da4cff4a4eb5592689e5ec23653b9af78e1c80557d110586bd2738dacc5c60a3d3f160c90583d3ca056a159a5573783668e56524a87cf3da03aabc4a69360a987c124cbaf38abbefa7e478569aa3a1c179d481aebcba4681fff5582bd0a2099a2853490122dc49f0739ae4d9f00c34cc5727278953daeb15a57aca2873901983d02b9abf09de24a1c24ef5d171781cdaa6023fb
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901bb458ad16e44ecb3dadb1563edba907f6aace74d118568d9ac013f532b8abe1700d8276e35b412cc8c42d718e9b52a052695e983ef34c8cd3e9d8857a8a4b8e8897ebe50996807430e9239ab049528e0fb9601b88ea25a6ec9122d1e18f1d8c462dcc820050e72b082b349f8daea08e99712d23eff5327bfe576412df2e5b059caa099acafc09c459d5ab175022cdb12c451f936d6c114f07927f5adf58a4d3a1
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901ba231e5366ca76e5e06648a62103690f45daa85d162cdf4d945a4b15cf996126c54c989b5f69be9e421696b0ec5ccb7c4fd6576fcd78442da50bed96b818c243b993b8027e50f44d5d136343d39cbd7351547bb874de9e2115a47c28428babfc9144e6dd757121fe4c1e40f399cf6a8a4323a0be70414df049805b5b86e871ec25c90a319896cd99a9b5044de68256005517e05f96df55e337224e32260c13006
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901ba9d080cbf30b1f5c071abcb2a0a4a6d0190e06ee83350bd021d0c7a03b98af8753d5b46b853859789805ef2120770b1c0b937db100446589b2c7f853954efce7cebe0d46343893f1029796090648bdae8a58c893596c76a607b18ebb1f4779c3819054121d8bae4a276bb8f029e21d5528be76164a34210b8ee84d67863967b5e0caf1861129e5ee549821978956d28fca8a66065738f0f364800ebc10495cc9
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b8f640055dd03d5ca77c2914c1c0518faa4932c8f7c757c27476aac132ee40cc70e571b7b84ac4d360b98172b9154183a2d6000ba914ab35f3747132e6f3ad5e9ff798a801e90ad7cb92ef6812d595fe21fd5bbd5d3f1dbc02cdee9b1e5793ff42a53fdbcb1306fbb665b36505cf58015f9a53748c9d1bc565446527bec31ed102fa8ff209b7b4b0311f7b3ffb7b84e3f94199f78c473189427f8cda7b9fcc373
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b27c5309bce69b2002cdb05d92911925a020a08d3e0c8794ffeb45954efe223215c2d80195d8410dbbeb607d842b482de1c43fc93a3293001a6cdf3fcc21e3e13c8809fa0b36cafede973b26c27ed333a8d73f13fcf01839dcff49faeb6799d6a8264a1d7924b09b0a7d867b039c831a4bf18f9b71728e37117111228166c4d24597e921df4d9153aff37c2ffb183bbb10d58618518f65947466902b3f84a9947
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901bf09f47bc08cf21d22cd1bfb820bbeaaa34e7973c84732b3ab8e041bc5e08aaf8c26cef3a34dcb75279caa8746a16eebc5d1709a71a9fbcf1c191a5c2ea476dd012c1b8e5392d501b687134a97687cae429a70bf721a9d81cbce47de658776c7618817ff94106c125fa7126b199d720a9c62acca937a86f3a8359743472f46c79617c9267cba3bff55b78e181956ea59f980c55139ed28bf16367a3da30a316ac
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b2e7c62e759b3e58c2d8c7af6cb3f4e778b8cc17e756c1563300cb136bfabfe1686393261cbb9f16b12508a4e0ce1927fb126fca6d774dc953f80267a4d82ca12778016fb619363236c784067dfde9a2f3d6bb38aa5d858045b68d9d16df9e97b66ec4522aa8d8ac67bd1a8cf768590600026c2ace36dba9e008af00b6370347e746712d35fc20e32f3fc6c05c83d73c1f7ccc571dc372f61536477c92af4fab0
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b083c701c87a3814e58ee83a8cc52144ead842df9344a8faeeadc0f49de88571e5a8fdf6b007434df7018dfda6ff3afcf82a77fae949e826d178dca36504219194372112731f8a4f92b1233c3cacfd77544d9818b5a5de753ea60aab1c6aa68fb2eb272f8e8080e865846a16f96012419d00f8a3b3c34836641fd633212a87a434c4120c41f2c51d1dd71d7dbeab2c944da38558d408e8aac16759a349b62f4c4
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b68f93a9582e4266c8a0203129d3856bc343a54fa5fb35d185350028fc2f796020bd02cb4c3bd8855901d38e40037a28e906279881d07aecbe6e310f603d113fb69d73fe113e80fb1d3517cf1fc8b19c7d7213df6e7b040d63fb36bb394fc641cf35041446d3f48f235b700a6f84112df638675af933cfaef51cd71f08eaef7897b227ed6339650a7a902831a5f90b881ab2ee554bd375b3d3244f1fd5257abb5
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b617efa3d34466af15c9ec1f7dfda5ae52b81cd868b72564431117cd576f6fc944fdc374e1303002f33c238a7a3d4693ced7fb0ba027ea6534db2041a63195b6ce439c9a45ee2f94a9b70301298141507ff831b26bdedbb737c577df28e64e7cc6dba882fc769f657c4691062ff67fbd416fbe6af886e39c611976e741d03cc17f3aeb9cd8bd65a7d96bc4b51af3cdcfc4e13b11abc1682c970145439b8d780fa
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b44304c1dc06c937680955e0cb6bee9740d4fd551de6b06c5f82fdb9f26fcd50a21b540a238c706c45849668d3abb64802995af7873d051f33a703e37ad22b685f5b1a8e360506eadcc5c8fc15f579561019acd9f2b737b48bc5cbb8b251c267cf4df7df83b6451b6e8a91f2659b0bfd917f9c68c635a31d9af98aad1a7a7a62e5935a2e0c040e48ded837a0a1b9ca5abfd783cde9a5466e3863804c98d6205c4
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b8090c4d36602ed11087bc53dc22df779eaebcff04bee06309e84e702477813c7bc1a5f2f0f62dc1b3d7d92329d17817932e94e11832a0e85e2328451e63adbda190d63863400f847eddc7c3bc58c578bb4c46d0f3c2119cdad0ee95b6a4f4d82492f6c6b29fee08102759c3f0bd35c0e03de4b0d77f967cf03b49746aeb4d64e395160741242c5311d6eec8356f123a96d0620336b97f7bac1052093df9fc2a3
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35ac5e6db62ef74efeb8015b69e3bb0e6b8bbc51b1d3737e14e2fad84a8cd8605e63e8a822168a04c6a844e35d6214a4bbe6e813054cd8b3dac97f923140c49e02edfd35f10ff9be39a8549c3017e02b4cac6bb66ba3290b9a704a06c4571a63aa3fb871ec0903914838b58584f49f196c167bf4fffb84d349350c81a85b20adfba55cb256cea0eb092db28aed67d8ad417
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a324804815204c0c99a1d63a6db4250278cdea22d9cd3b0a8fb82d95f9cfb0d3098c3358208bf80e6883c6e76d2fb85783f3961a04b4a289db72bcc48e27ea0382edb0f251e08a239a7c89c1cc828262093824147403562981f0f1482468444c9511e25bc1447976c8cb78340ccdd829dda39857c74e740288b4d817f60b73bcd9fa60899fe2b270015508866ce3f60ef
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35af62a42bb25b423d952e08d62ad7ace8a8fdb8bd57d8a134ac1a3747f229e8cd8d5a9f619453cf1018dd65f44ffe8d2e43732cba33251911551724b5225e1f528157c43bfa7f38a956389bc1a6d9488aac14c648ebad7f69222f3781ddbc890204b1174a0cd5d837d1b081499377f1959b24e1989b65ff1c4a2d7ec734bdabe289e2a9f241e0cf296db9b3c76cf89de25
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35ae961d008652bbd0299c7f1cd1e9b41d57df6925fab9838c2783cbe2fe9466e7414a6faf5644dcdef57db1f7fb9cf8b7a7c63f08da941923aeb276af5dfa210e4b01ddb563392e4ada1da940d4197874869ca0a4b18b2a116f6194b052f9fe24b59de86269cfd47394ad4241dee8291dfbf1bddc52fb00d894578ee7e024e05cc0a371b39f35e4ab27a502f93383581c1
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35ad82bf9882f202c0c11597e2482800d8ebc852103e9984a63704ef1849ab868f2bcaf610c95fb8b53e31728c6778f7875389c4babb9e4a7281f238bcc3324fbb2ef82e9c466eeb6af6a64ffc93badbd2a3ce6add5ab139ae4fbd4fb43c35fd857ce22e0bda428680f2413c4fff4bbb721497984bbfa232457e7d1c21f0cc0ec5b8004aae75b5e65df32ef16126617e50d
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a55266057dc1768c77a782e76ae4322b51a7add8bc0c835a05f9ad1810b142e6bb17d8c2e75ef9c24d0511c10c7ca1a5baf8bc79ad0681396968d4877ad82d12bf7e661b2637a0089dfc2e89ddddae0fd607094b4eeddb5c223e7617822ab4fde1ffa908de5533541f5f8432f36b11a54dce9a0759975298faa020ed99ef3e1e73953360de26623b0920c2a1e26a77fe6
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35aee95333843b7a2002225aa08547e42c08d92d6a45b9b4711eba15c513615069fd31d1fae3309c265db97bfee6710785e949623bf72248e88321c59aa56c00f32ce5fc9056be89e5ec45b07ba7ce2c36af31c22bb6d814f56923e312aa45aa5ee78c1b4c6c41dc0b4b174235e3db1000967b1a76ca2dd8af74cf69420b9d5bfde59bb38f58681fa20950efa593031f15c
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a5941f413ffdcbd794f1792a369d82bfda0987b2b7f67706e321bf9bdbd3b7556983e6df473cf39ec2239c89f5ec3de22e790b3438087938bc17b92490bc9700fdb1d1d925c6a88010ea5cd92b5c58c4d8532a99cce8846615d0ee2a8df6e9e424e65ca3eea9eeb1c38f749c5d648e1ced0f2cebf3f13bcc942ed90497aa48ded84d487f46d5100f328d33bc349ba764f
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a9ee0c05fb137dbc1d2f67646eabfefe9dbc28236c8f807ec462590671e937b96206246b6b85c2a33ddc3614698400fde8d0b927937698c6c9ac935c63850180189fa44fc09297f85f29155506ba3ccf6b5615186d8358bd05eb735b27e611ee051e05f710995398ba9398c9e009292ba55338b23171b8c069f380c75d5c5170756253d6a96841a5cea70ab247c35e904
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a47e75a288e7ad4319efefbdede7a0857a8081ce6746d49aabd4b4f2ba8c20d082cf6bf4b5cd05bbdb43b1655fe8b609da3e23ee227b292f1011d395693043be81a9f604d956894293a12cba599299106807717ce971001aa05e0ec9d39be3082f0465c82121b1f49bcd2430e0a0fa541645087680df12b1ab80a2b54e86c6adc7f01f083ca35610bd5f22ebfb78dd1fc
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a0629f957db204898fe27a61b405481fe26c5bb01c5d97a65f9736dc50694b7f206d6b9ac37c668f10cade5ee7da072bcc06dc4b12f3f0c2efe835203ff936d11eae15edd63718a2b3a5686f4788aa9f1a2cf0781f3a5654476b741c257072a293555aa3725294e41b8f5c54bce7cc1bc1788b9592c21308718dba27051114b8e3e90001359f145f58b2d9b3dcff7aed9
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a7dbf7e11b17664aac5ed109b440f93c56d4fefebdbd047ed56e2377f9635c7f3fbf196664684776fab791bc34653e0d0bfe00d0a3452a8bb6a305290532fc71da325038664f21c3903d2e1b55c2a270f8ceaa1cea4b73db70bf77f8985ecd1fb91ecf553cdd9a4414cb9026235ea1529ec7c08174123a226184f51c6f4bbb2d62b35bb6c34ab361277cd87d793571f42
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35ac45e1a7b7210d36cfa15a3897ea58b430fdf50a44d5907f59b0689df87b9061ab2917f655072cc5eae46c1d8163f235025ab349f00028fdbf819e67ce585d8fab736f73f9a132b2fbe1cdeb91c065faa6bd5347fb6bf6e0f7008742285aedc05a4766b0de3c6458158f87ce5a811f35252ba2685c1a10a7e50c8943fb083faf57f0a2eed848d7ea95f2caf8a52a0784e
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a1873b81c324fedfb7a30874bb531cd1a6c661134c3181edd25e431d66d7765dc143c9afc3c641aaf0b46317af04a5043070584b8cee0d1d395133417d81c2dfc4f5896f232625d8a120159f8f5d28865d8eee1c717e693d30474191d438680752304ed208cc19f724d6a90937976986de7cf9272258a87272a9c97931d3f7c28c9866e5cde68afb173c4bc6b8db78087
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2451f6c86c3d7c32a3e2b5a7cb1f9014b1c2fb510c18a679ccb7a01ce030f5866848f9066cb431f2028e856ab498d8482ce34d2edb586bf2898583dd5b0e20bdef796f9e1e539cc13e820d3b53b3c4bfae3ead6ee4f3f1d217b946d53c3f08630feb98ea3947b0efa064650c2be7ea61945db0d42dedde7da6bab7c42a4f33438eed2668e9d03c43a2aa91cf7eb78905
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35af5bc521bdb3331f70bc6e108b2867b703b7e07ee77d3977c5a7610f3201d20b041bfba78439142639a931261be3ecd4c243ee936ce59676c3564e6268d255ad754bab9821dff795f4b02451a273b33babd380bf79ee016a56af9fc2d200d95693816ae33b5a17e6027aac69b4ada2242753f454a78baaf19dfd14e8520fa1057aa2da5f5dc8471f67c924f275dc3a800
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831900c8101397d770df96fb1f6e5ad5b24746aa5586d913bf8e7de42fdd954b14416d7f23e6efb3efbe1c9ffaeb7677497692e901ed2c39cfca5b5a03aed9cd3f322063a1aca1999a8cbbf626f239338ac205482aa6b7c1912631a5414f1277bb34ee7da9c883e3000b214cf59c6fcda8f97d04b93c22d42b1f77ba8b30637e6d28a
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa9208319028372b62337fe9bf92b5acfdcf364278f9ddc516733049b177b726d43887beb9c9d6a6d7b5c6934d52d7b6bcc60bdc858497b3349b2f2053319dde939752275ad122b3f2a188245c615d3ceb57943ccc63d3bf45da8b5d63932fc52edf0b9b3f6a3b0886f63ade65dc3aaa696a58e81131d0608200216208d0d86dae63278248
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa9208319054aeaf1cab8a9d96513c49ce0f536a7dd94d8602ef98bec7cbeced6651281933d1cbdc32684db2e507af113d8808313db0d46cb1e86e82d674b9df185de3802a210fa1b1b9e8fb47724c3a3c48b30ff3918b821d68b09ff536b3c9a60d59d2f38799a327119efd856506cf2856aaa71d8af87329bdd488723ea5b0fa44767fa1
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa92083190cba5f2cc79daf55c0a8e122b0d9d3a5e3b0b418f4958f6677110f9a3415866ff557b672f457f119aa9cb312f37544953d7fe6f6654233ba5bda98ba6fde6319d31bf521cd1b25e753e01e92f9a909355391403e7c66fa8bf7cb97b3cb6ac4315945c7427e6e173ba0d779067e3f479829716df4da08139894f33ef69a322182d
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa9208319008c66e75d6928538553af50ba78d91667149723dde3e63caf5ca4c40a7254e976a01a83b996cb17b50ea76d90b6d89f7992b1765d14b6b10405b1df99d8683d8bc94cd4956597d80df23a2d9c3d7fd654f5e5bd5b8ad108e3d53b851f5ba83f7d59926b3d7da32de28460da6acb39e8591a728295a5728fea402b38580135074
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa92083190a2b35a493ea2d1d3519c59b7325f531e6c0343943ea35454a3b04a465282fd5af9d46243166a40b3457001e766f0665036a52341efc8fa0f23774dc892cf89c958da476c3596474501a3322549a9bc138b7ff611fa2ab9e0d3e44a07732bf89e41dbeebf1d4f0e095e05f11f465293d68520a04d3c4dd475330298c6b951f13a
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa9208319086280c353e7579e8172dcd04239d1b00621e5a239c51da4ab8c6785345eb8dbbe954822f8ddf0502bc7883fc79fddf1d2ed593f15df3e39d40c53ceb5464a979a1f85d5398c9e68edcaec0393afaea4a39215f8d2b7aa2eda93a862025d6e5fa3da3b2f55d93774ae7e6985a9f2670696970510924a2d956241035f8877945ce
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa92083190d5fe89c5e5bf88f14f82e2cd77b78adde511066a286b7df3c813d8937c9804a47ba246a1ec095d81f29df74d28d3742804a7b233878582888fcf383541215b882da132f301d123c6cdda099e06266205ad6efb385eddfd9f6574ec201b975573d6f31bb75c9430844e17c7827bc66372a5bfbbcba3433ddaa72214c55a5946b0
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831907106c70be9fcc59102e7a5d30a943390b62163ada6b779fc08fa2fedb2549484e194b9968093ea174f1d331241e61706ebb2cf18cf02295e701a664216effa3a694a8d3340b4fa82bdd1c13b0a1bf60e333679c9a364710ed8ce2ec2425395dbcc7e41ff74d41f3f2d770ed427fae8338ed14cbfc8e9a9e21060a44755d98703
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa92083190b3d84464610c884b42bd485690d371e2a0c2448ec97c036394521ee045269bf500a45b5ef04de0ce7ab33ae7433b809f6c2e0901de1cf082139e0398fcf2c97a8f746f10e6e58702148095b77c894d3a81d935789ef5bbc33b0be72745c7b818d470d20cb55117d254c3a77a31517cd3c3d3e1a2f9395482e7269064994000a8
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa92083190c5c73d35d0b2380be1eeda8bc20d3a37ba0389392ec3224c65e7edc0e6d6ce73d5e66ca406bc5dc3262e3d03952bb6ccee02c1fdebd0e74aeb3430ba4cc57f10b53805a6ad3c0f3151f58f0e43c196e6918fb641c82c6411a247b3e222bad21c0ccd7c38ff34c2c07b347583e6786ec51d923c1e0463e8dbc9f4e843b2bf5f20
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831908df3161efdc36c2bed60d693a55062f113c005fd81df1632b4c694b3f5d2d2a600a4916a4c9f3e7b5ca3875c785d8e40b61578fff75a99dd85adda91fd8f395fe975be86a46728c624a045765088bb4ce278089d8380e10e1cdf8ebaae47550aa21fceb3c6534f17fddc28bd23666122b903583ea33ff94963c7176baa270546
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa92083190616d64020be87355d27f8d41285083a762fa6d65647733e186a07ca78d9e3f6e8f199e138c49a273384e08635078df861ac1b1118e371aad66bce6176eb40d621520f607eecb36c09d61899cd36a6341da6a4e7fcf350f94a618de395ddba9e4f43ac8942c16f42bfba6b6876010ee1a6b1fb64a2258986e4b72c25e022e369b
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831904e99824ae2119b36d75b8c7378224f1fe8bef513d8eff1c0f3e0fadf509a944b0c5a58a08a16f41bbc2a02732362d12f302d56146bb3fa1ed8dc0edbd12b250f64b9d57705e7f1437e3b6a05a7b58acbf959cfd929f8ab10200b5559ca8f1ea1029f17baa11f2cc88c44566b21f491c0e62cd75068335552b526e646b1dd7da0
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa92083190afafa12154322db32286a6b46a89efc7d19eb90a964d4154a925347bb5b73001707ca9e6e0098d2a551963b1a42b4bea80964d335d6134c6979b79907726f1c2d96959ba1834c88bcc8e22ab3c7a355797606bd844570334ead844cbef5130c4456735156ae3532b787dfb5af36fa4ee9cfb82aba13d666710add00db9c9757e
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906cd4a607effc96f61d250ba596034e7237852602553d720e1cc34f7878f3090c443b20db730c60bd481b599c9ac2366623699d855d6e3724ab986d7315e6617e18e610e91fc070160a588a346f63852a605e118605e9c24d7620e09ace2e4dd88f2ccffd141c8ccdfeb46ec4ad80ad44da86b3ad8d799f6f383bc05db63f7432
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c116141047fa9aaf84344aa7bf20ac0928dd154d83f60b6304c65f7265a7b826a4b5e4af40e0729ebe39ecf2fc5134710ce0997ae978dc78b8154eef2288d929680c150a61f0ae0cbbe26fa0ba901290340597df92875c1dbdcbea7e863ec6359eba84b6458859c40f8fb43efe70840ca9de5fec94
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c116141047c165a82e38653eb88ef84db361dd9b48c935fd692d46dcb84f7e5c2b2b18d09a59d810172e53f865c2ab60adfb6044d9cf4cbf4b9dc33ce949d3d12118796dee25e1d028912ecf154c0e757f2188e3fd8f0afaa68776f7d35d6d9eb8a0326c92d3084e4c5824aafaef50ccc27538f55f
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104755a4941c2f60857ff6e80bd1ea5a6cfccbc6e673f81cb30c9cb2c9da04230e3eaca9fa3946a8f6eebab33a48b0cf8098fb8f8fffad0ebbd7b639197813d144d2774ab368e56c7d21317360dbd6d628512613604e23edc9bd1ec4462712a7e9cc7ff5822e48db7ac792dc38e0b89cde44
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c116141047bc52add8725e90a704cc544c18c55a5f26b8dbd80931dbb2bdca4e7feb4761c08ac53aff5b67f171ba75555ba4a02ea92bfb47ac13d707c8863c614f61edd4b8a370f94840b0f4b71a848ca1655c94400d5f40c9e6bc094b7e1ec2c77ff5385102256d8a294514a32b8af13e979859b0
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c116141047a807c399a212080bf46a0aab9318474c142e6bc54957425861bdee12c25ac4879944d1287301b61409a6cbdedd00c96cd2a27198879c0a5f48a67184ca31fb843b9e2aedf474a768cee7dac5c4edd9b8c8f4ef64fa63baa3301a5071606920e880ccdbc02289fa5ec99e8ca7d83ceba5
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c116141047101daf826d11e16c9c446ebc098221962ef8d59c96d7381ce873a2559043515d975f0dc3b8198fff4a9663ee8c3fffc47238df53fe4606ed58e99e8ab6c75c2b993b87e4650c69add83f8e577b65b480b07e3e09c9210a988f5ae2f2ad6021b573dfdb7f6dcf03741816846e5f89ab34
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c116141047083d07981b07998829d3df64f98882aa021602812b940c0947d738c0b6f957f26c3d5e497a5e17c4c27e1ea56a0da64a629df99ab2e0f4bab31a5c64ae69be00d7f9435d4ccae4353d518f4b166caae430108934098222d2c1a4cfed7ffad054f571bf7b15a33bf2d63bd1b958b82ef6
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c116141047e9387e48f154de2d9436aea7fdd09499324a2c35ef5ed49d769243b09cd97481577270407c8280cb0c7b81ac0c20c3768a7e2de6ba1acb5e4a140c5ccef96aacd97a1e7e14d432ec5474173291bb33a877b09d6b99289037f7df406544f9896a991a8b06cb1fb3ac821c790935e7e141
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c116141047a8ca0050293db8d3f058e9269b1b76966d2171a638f48f775cd75b40fcdaa711fe966a77ee25c089f8aa145260a6ea861dbecc084ef71d5bd74782f1993e935ef9dfb1410f2a5077e430f7d1aacda7acbb1a48fb038653be08df3221d298432fef722df2b351cd3dd98e628d42161564
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c116141047f4dde9cd1daea24c1d4a151f881548d91d1411c304c6b9fe5d06dd794d2631f1d2e7a7138d6734fabc7b37a6b960191ad8146347bb8f2a75d401a1b62417f793ac365ad3dffd23caab3c2695ec8aaa671bcf9b8c7dd2d4d5cd2a8c5c5d38382bab817383f846c6c9b4edb417d5b9d466
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c116141047aedf9fe23dc32e6f5d55d73bfa3b8ef4d3030cfe171c2a28c30e46d9acff763752815364cfc00afe89e0a8cd93227457b25e5a56bddec2489494297f33e8fd7b7a1a871f7337f04d0f8c63c8e615b6470b78881adb326dfc9c1eae946ef74447752a4774435e00da7abe997eb151b7ad
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c1161410471e7c657424000e3c540fb033513ce8a4bd3e8e19bb691af840b631debdd424e3d395d85ae2b705110abc530cc1e3a2fe1443910812c910cfc190906d4f72032d82809476ebb68cc20a0bd9e6d2703d700ea5b333f8b2994440cb73108f1ec70aae4ad69ae1da278bb70cd0b3a5b141fc
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c116141047b1a862597b016c6d814d541ebc0d10833c186d89ba4a735ecc5165b32f7c88627f4b1cbb7b321baaff0481c7a88f7240d7de10f460ff8e894291b25b92c001a55512640e0ac259b828ffd9b73129f66691844a8438df214a667fb6c7ed129d638ac4aefefcba2dacc0df427e6e47edd5
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c116141047de6bff50d76cfc47a5eb1b45fe52aacf5e8b338e523d68a5672842494cd0dd7a749dc52826a7e69068500cf9ac816c92f6a308125e116dfa55a355a74d9e10a08c8dc21e9af8472b43bff7172e539c740ed4680b3596383dab96fe4856ddf2a02b7c6888cdc88544c3a4e0bd01ed8dac
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c116141047cd6612d49261d8695ac0e7566ee1575d53ebd2e6878af1ace30a477e81597ce97197feba029b8cfd8163e6a2a396a36d844ce6c9a6cbfc404bd1a2f490b337791ded8c673902a769189da1d6a687d77f3aed796156bfe22b0e9607489a1575355769c11e74323d0031d2e4ad12461578
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c1161410473e2eb9ac25b12dcd7ed6d67a7b96be6b1c0b2ce3942ad15d948e6e79a3f917475024885d8509acb2116a8c6cbc07fa501c9d6271e0df97daa50e39eb096d38322babe0ca1328a3c45b60315f27ab40039a2ba148308a07955eeb4738594e733b2130c0e795b5dad2236b7d360c49c225
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6dca5b9640c7c0da35f41bb00a49f79f652172b979f3c4cd6630b03f88af292c3d4dcdb5604ed380dd74d1774cc9b9882606c11e4607aa94db08b1c65cdea2dba7552a31aad3d28b1565939b0c9de19e361249c858e0af7b1894682cc36d0ddf9
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6933104b4870ebfd014c3b50d03df929c631ab1a96cca9894d25e7bb5ec04f401a466e409023f5e7fa502fcb3d8f846e29bda1d602445e5df28c754113a2587e1fb9b5cadd4b076c6fa3e57ca08c2e1a1197617f34a61a3ab29876a256b14146d
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6075e597324f004b34ca023b114c030b9d78336b655ce9a1c3fb5ca4e008c20ab39b5e353bb92efc4e02c614d30dbb3c996ed0023064abde1fa54ea6367d5013300f08a1853c7ce0071ae62d9a3f4de044794d9d3a06832fb683e275d2244de14
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce60a712536e54c3842acaa2cc9a9756744f168d395bf595b778f9994a45a924ae04a415ccc1a83dc41cda7769385ee9114ac6c1143f681e06c50109921fc75c53e5c2639468de93c2f164538cf9d8991a378dc83a0fe075fbca1c007ce4527ed61
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce61046b32203ba25a317b72207f76532102891aa0cb98680bd0a6682a15787158272197b2a05a82486c10d5818a0e5b2a1ac7e44795608753cd5b4e920bc4b57b3dffecbff4c373e7b6a7a85a66707d83b0dab0dcc7b1af01dc483def1c09709d6
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6f51ea1baa14eac6ebb25c894bbb0b0f1ef93345965a1bc5b46f7b77287ffc5dfa45ced0b8c0f337d180babfbd89cb73f89a6d6ce3437f3a833dcbca55109d6450263991498624f78dcad432e70898d6c762d0a991a95ccc0bcb6a6c00bd93ad1
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce605fbf9f3cc2901cc8748f4838795e7241640a6e25d06d99dbbce45fa00798c8bcf7121bba5071f88405c24e2db95c6d52fa3fc3e84cd2c129e448d4fc4572f61cd5eb167cd76cf86a83eccd1b041b1ba1dc9693ed4c9c3048842a66d5b0f884f
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6b076ec2a88a0494fa75fae994ade65a14433805ceedd17e22978f19830c84e3a94246029733e034ab7a76acf2db5b564fd0da5d1b5287262d534f18c2f32b329f192367ac482eb86cbd18160ecba85db050b2471accb0a555ed94d354bf33ad7
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce61e72bdfdb33f5b3f9e8ab9b1bb9a832df8ba04bbe6941b551ea5532571fd5b48d61dad3169e157ccbda40b7c5f6885065b07c6c678546bff3fa3b715ff754acfb30c3d982b9556eb41bc1d2e9b22efdb32f9dd8fa9b4c85a0f6dfa0e19907353
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6664133a90b40b409694781d907367956d2ab2ee82be3dabcfe9ba7cbc7a33952e72d9c54ad17d5b10c0f4ec864aff5da6583001a34a8844aea48add4b6d77151970da0b22d2726816d3c4df38bb5442785ec4c6ec7d2b0e45d8859833ec667d1
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6bbbd3530618e26b02b4da998342dee5927a38b0e723df015269d77be326267dfd5eb14efae355b5a5c5b2733329f2ec9d3252b46be009d8840d06ef54a0cecebda3768f79f315126ba931eff85a7b1250dbff94cb39f6e78c1af942ab2782b14
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce61a922fbf43f23c3cede19a8517983223afeff8552848863886af4fe2b5854a908c0ac1a2a4609ebcc28fcfe20ac503857acd04a9ba03935bd34c1f873b343cf660e4a81cef0eabb2104e4644b17a2b4784927dcf315aeaa199dc21864fa53e58
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6e206d2d6eec5c001a6b8eba1f76765269ce81fbce947a325047bd15af8838005212c215eee7c4da8d64b4e51c66433aaefafc50047876e59f761f0fbe1fe521b263a86d3cc9c027c9443711c0eb19d3def4dda1a63e677f13affde261edc99e5
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce60c075922c8a02cf7615c6a7267d341f310825f9c871d5dd9103998eb737a40a07dcf13634d0d01f49d78c367a9e2aa89883c254b76ed01bcc470e653170dba24d13ecb15d5e52f9a0624de7067ed29aea3611d18eb1f11fa8fe59c832af894f4
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce615de261a7b79ade1c98d2237ccf27e40aea8bfa67f3abc6f3b079bea63c75e31b4c0746b614dfef9abd2bc35f499868214b0a5ce690e0d962749df7bc0043bb90298951fbdd0fd779627cd235a086ffe8c5110c860060b68e0ce9af0ef78ec4a
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce65997b74ce3bba5431ccfc7f80ded6fa45814454cc38a5caeae0d5e430e4805458824d5a2d2bd5252e062c287832a6c2e1cb3586ab1e40a4c96e6a92ac2316f90b72a5b895b838a35ed80c1d55c2c301edee89749678da8b0f5ab66a8d5f95b34
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162a3ab476bbbaa0c34d6e5bf43c33ae8106a92530536814fd9c64056734272d19350183f07507e44dbb458166e9b42c0b969b506df95133312cc6efe73c4b25635e517874db9ddbe0b49ad53be91373aefc
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162a043096e12a22e8c62b68441dae8ccefefdb20c9e4c8d934318fe00ec6b43d95d512708e6b63fd3022b144de7a784edd36af2ecc7cbe149ff49f1f04d013b81ad21cc3ffb9d49555170c97e40a6698579
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162a5f626b1a77b92ec447c7815bc8b77a7863f0746e870f62a47dd4a77475459b425b42c0fc8c8e5dacbc30ee982933858b0000a0e6515e76e78320caee6a0048b7c0ff897f0a2be052383b68fdfc9046a7
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162a2ca3adca1557dee22780a8c678ec358b166d68dd3ea3858c81c1eb3dc3963816c44b69acabe0a14a042ebd6ad30a69ed32deabee60ed77a61ade638b8a573aaae4582b75ccbb1270dd0d437f275edb10
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162a3ed2ab39beb101dfb235b2dadd5151b11b66feb92d649d931a887ee5d4b26e35a4ef67ae31030072f6b83724ae2d9f2b1c4f330c46e90dd599d6142c6de19bad2ed1d8fe80258c4bf5b8e24ec92964c7
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162a2de2292b71e282ba086f3524ab8f69ca0a4eaf804b59654872d5829c702c637e60e8343c021764a014071eeb7629f9836224eccfbf877e62b0543d88d9c97d7c6506b7968ffeaeb56c9cfcb216fa7ac2
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162a702cbf3be86cba9ab359f35fd9ae056eb0dcb0c93985a62ed5204ccab738b9f95b3b88855c3dcacecd8048e2ff3b680436be2fbc96c5c604c1da18d986c1def3fa5d8f2f9930c73c98043de0c002f5bd
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162a01a27791e98d888e37d3e884855d55b3a6ce35b6e4f39128436d089dbc6b7e426eabf6534c2c3473a96909af16d1c53529786ee6a9b014df537a3e6314be7b92c4d6ef8098fbbb69e949a29406492338
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162a881d38d226743c138023afa1be39a91ec47915713767908922eb003f1a91aa2c1a7db713272c6f9aa1264633b75f6bdc92e4c3c4a01d62d351fe1a7281a8c7a5bccc5e114e8980099169dc546443c55e
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162ae257e836b9860d4f05b4acf35e4e3fff09616513167d7ae6c9bf2ba21566529d172265ea4ac7aee9b1804d7f26e24f374bc3be6a40fa676f397acabf3ff863b5e6beb46c6a3e5f2a64a4f061435a24b2
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162ad0e8cb804c0772a70552f0ceac3b79eda7d7243bdbbd133b7bdcd9f28d4563968bfc4b8ee31506dad4eac84add1be7daa266c740f8bf9a18719d0c0986dfa7ad959e65de4445d740269bfff920065354
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162a1af75b17e84f04ff6b28210158a1266be9083d7aa993165a7481550d7917bd85ffab05740a5137d946f61b1f510f87c80593e3ce50d8dbe3ff8b8e7bbb25c84eec393e08fafd7b592616d4977a455d89
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162ace0f4412d9a391e0f7eb831ae0719cda6def7428638243f399fd49818effc75a327d6d069b2198be3bf904d1391f4478bb520f1506ef7612324b06a90da097ffd67a9e6b73e1fae0202d4e836d3203d9
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162a04eb78975349dc0ca72958ba71589cb823d2173856e3e88e0ef18ad03e32e3b078844b3ed8b0ec11715705b7e8a64d70c0a3ebe944175f77b4bd8371cda4b2010dae692006ede86c93ecbb2b73a79f23
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162a8090218b865d3cbeb886aa913863f74b5ab86bc01782c1ba97acfc1888b47bed713fb31041326b4afec95d369f5b2f7e9ce58388347e92a2159adc6ca2c56fc4f1d28181526093bc324b1092beb6863d
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aaec97736ebcd4c206c89d4fa677bee6a45d69d4a2c1ebd4ac84db78a93785634c9d1f91c1a9b5245d73e50490a7e5e2ce7f36d478a6c38d7949d18a80e3bf7f7938d1f85f52c8a687dbd23cf89b2562d
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846d791f8fc6d6905429e78b0b4fd1e1c6d900c1c78b3e02cc0efe749bae139a456c9e9800b6596146230b8570fb3060552b7ae3e6a5588f2756e26890e461aa9771
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846d906bc6c25534cb54e5818fd7d63782314af4b8aa65de9989e73355499226463f92d62d989fa75dd8254cb4e9bf3003b6c4f0889476a67680e21dd3bbe710e7b4
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846d80c18b60c43b7d9b8641bad9708faaf2bcb809b0c8d639e2c687630aaf9817012cb446296d27fe65c7ec4901407fe65a06e4a071be930a2876eeee530363b26f
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846df30dece0415a329d00ac77e1f63aa2ecba9528cb74af97cce119221f71bd0cec99232f849147b09a9aa9e7a80c350afb05cb7ceddb5558cc638ccbfddb7b1a75
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846db1ee4ef1a05b86698eac204c04e46dc5f5cdd526c5e7aabeab751dc231bfc85091726d61ccf98a1717034f5a3fcbaa14fb1693a6948861214c2b2b5a7835ba7d
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846d6bf1596e8330255ec7e8e017aa63a23168d0c2e8e95b117549469b4ec91b955b7686ad1065a2f71313e46e4fba4052d639be43334d3efa18e498330d9fff9dfe
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846dde6ab81726cc8cd29f2892ac75df6aa3fb3a80ba664d509638a1b06fdd8924fe5933dd9e5456fcef5ea103f3f15c0b144ff4752cb8d27f636fdb3183bb0ae6bb
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846d135bb259ae4d6636315644a41beffa421b58b20f17471441c0676ebaae2fd3aac98abb68a4ba161199da28cf5deb146ef55d9d06c09d9d7abc83786bb04299bf
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846d6a57ac180669cafbf715b9168bdeed1cb6205f7a6ef405cde06f24f14942d2f893da05977382b9fa1be0e2d4881bbe52a95e42d8cf70b451219abc0953f44bf0
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846d7cce794f2f76911d8bfa76ab178fe73257c530296be2533358db129c82aee8e71975cebce9556ffa79fc26108a960780945ea323241d32e1e0b4ac867af75a17
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846d01adef7c2515e7954f82a3ea57721ba9641f59bd5db584c7eba9c6875260e3e5f18df34fe8c77a1fcc41446abcfe96b878e2171fc7617b68152d32706bbc93aa
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846dcb5ca3db6ca2653658ece22c1345d740388d54919ef17140bcab1b1b93062701a71a7e05535ae1c7135834f5a97ed570b5f9d82d5f1210ae9b94f93a5804afdf
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846d0af56107c7988099ea59dd00cd99869857a9e7b69305f07b6ee7e4e602f2c0229303e63feb5f260b9694be235313d589a02931650ffd968fd3e0947a229d255d
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846d7368ab5ce95d1d39dcde76e20e8cccb4b7820059762afca3b5f1cc679f2b01778e6cb56935d5dcbe6f8a12a1e0b419520fb2db362c7bb7831b78f3355855722d
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846dc1d2b07a58d4df8433c66f180fb668f395b78a871059b574d80ad0093dcb56b6d2e373ba14047d33e6275816e791085b6845454d03799dcf108b4bfa919ce6a0
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846d01e823c528a99f01f996aac79fa2cf45fe38ed6d041840cc4b82e20b4c79c58525a30320cf89c9534fe70c078d79562b8ba0473ed4b89872a978db92cf19ff8b
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763d80465704fa438f52d2b5ba709fca1027eae17fb71dc5ce73d5b8fcd2f123464d64884c359875321dc7e9013563316343
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763d2e0a983d49fd2b7d695394fc3947510255223322204c38edb96f7ef897779c4b3c92599f7be37757455d0a86a94a6a7a
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763d6284a540abb58cb78d7e195fc6e9c6baf3c4256dc7a3d6a50272e7eb9805227d87596bc788bf40c44590c1d7e2657cac
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763d3c9172b923f20ec069c79678174b6505d00fad11197cee0591ba7e0b31aeb5f7399e83b406b97371c38d5f8eae2f289c
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763d7f5bfc728808ee2f49dc49b846d504d3e0b7d35ebf09a68813f8825d1ee73f8022139fd12a2c0668d99ab27bf3d1b5a5
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763d250d130fbb722bb24f1323a63b0fa6ce0bd435bdedbbf1ed3573aac1ec65da5f7c9c97b79ba619020501ada5eecb633b
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763d038c6a8e87699da488f08fc41c0bd2967826b74ed155a34336931e5286f05d8f365eb743613d82e393d2fe2e4007e74b
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763d80a404cb625221bc8ad042b5c3ce5e0e574692329aab023b17e935c261d83c81b63711b686ab9a291531cdddc63d7a97
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763d52a1e7de84d4e2a24ea0006558a3bb6df29cb07532df9ff7a1c8ad182fd54df751b4bf4df2b37917b4abd02729600b67
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763d7007db41374283fdeb9542caa0866f77e5af69022a66bb35ab69e4fae97ff9fb667f3fa74fe3442e77cdff598d174f74
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763d2717d82c0c3c1a976965fb754b94948f9e85d2fff604b3bb76872807351659f5bcfcd7966d43bfc31888cea71163ac4c
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763d0f0a874f5148b609dee63339e905a665d7246a1ecbbb47959a9587ec3beb6131f7956d40cb07f18a12b8ea530a02fd8a
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763d926520fd8752d884f88bf0be5f0b420bf6921d793bf26b451555e871bd06afbb43cbf34c2f3b669d9c637a27a92d85c4
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763d72c30cc67e9f9ccad33b384230f1c21f286d1d7473b8e16351b3ff3035b58bfbf57b6ea6d6fe71250c464bbb9481da9c
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763d21b70b15d3a136d9cdac07fac99f4f745de7cd782009df2d1b02244b4033aa15f3421f36dfccab180750d787c7772c62
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763dbe076d0ccdad6956615ce720a9504fa8881fc12141266795e32c44e6de969b0cc80f307a711764176c45a2b61578042f
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637d97076ad63c09bd62b3021807d00dd12bc19a750b761d837d3ce7e23f87bfd955
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637dd1eb4f367328790d0c336519ef9ce0469baba42cc879905a01c789376dfba48b
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637d8930b1cbb8a27a5437b8884f40899ae1fff5b19f1e483afada346be3881497d4
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637d3759c77b88bf27b59355096b6c9fd8904fd53ec86214b199e5eaa51dfabb9c69
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637d9b25cd67dc32da238f4beb7c46b5b0b62c09615bec0f4215f14689719d0e9d98
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637d7bc0f6491793a639dab3bd21e2b9f2f688612a1f6a64325d76a5ed922808322a
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637df54b0f1aea70534243e0a3eef9a5276dee067cf0b2d7c961b6aaf3db6cd7183d
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637d95600df27b03fcb389c2ad432e339a49513c68d4f6468d274314b0867f1e860f
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637d3636c6f77341c33c856176d3730f6db832f8c5b0614240157e54e21d95d9e6a6
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637dc5c83ab7291ca53f5349a228dd65f3ad41382097b3939856438805fe470f1daa
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637d70db80384ce9fee793c2605b4c2f874190ac93968d6af4bc15297444ff9543b2
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637dc4cd19fa4b8dfd07bc79d67299f4cc199fb22c90f4d12931c0427aeb828b0685
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637df33282eea3d2d6ffb320f2a9c8db582216c76186a6839c6f7bd68c2c974ccb89
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637d791bb34a274999a4da6fe86dc7721c320cd1eeb8493201b14cc50d57d458cfaa
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637d608920d441336fa7af3df86c6ce3fd8c5f4ac7f63b60444ed756c4bb5025241f
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637d34599c44c43e41bdc14f66d5937da23156114a88ea843b84edbd9fdcb4ae234a
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637dd3b6aeeb71ccf2557f9725b86dd13088aafd6754bb6b69613d5c6d44e35a719d
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637dd3b6aeeb71ccf2557f9725b86dd1308887e235dcd863f455f46dcbef58eaf988
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637dd3b6aeeb71ccf2557f9725b86dd13088bd9e2635b36ac557c9aec20e9d956946
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637dd3b6aeeb71ccf2557f9725b86dd1308857849196067f9006d7f0c68e1d2c8924
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637dd3b6aeeb71ccf2557f9725b86dd130888cc8a6dfa951f1658d0e19659e646816
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637dd3b6aeeb71ccf2557f9725b86dd13088b7e6027a082d7c1981e33e8dabe64e9c
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637dd3b6aeeb71ccf2557f9725b86dd13088ea212c55051ce612c08bacf120da3ad1
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637dd3b6aeeb71ccf2557f9725b86dd13088e1199cb3294649c12ceee005499c28b3
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637dd3b6aeeb71ccf2557f9725b86dd13088170815e317055cf9047950c2b4a217a1
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637dd3b6aeeb71ccf2557f9725b86dd13088db324e45f343cd393e5c5a7518f38d1d
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637dd3b6aeeb71ccf2557f9725b86dd130889fecc904ac7849aad43fc2b71ea818a9
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637dd3b6aeeb71ccf2557f9725b86dd13088f48901e30f7a0f4a9e4c57ce18111fcb
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637dd3b6aeeb71ccf2557f9725b86dd13088ed1961c765d373a15c4246d7d74ef15d
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637dd3b6aeeb71ccf2557f9725b86dd1308827be87e8580773b1703ec6d37da6b455
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637dd3b6aeeb71ccf2557f9725b86dd13088d87472c3ea4d1862d1d4db423d8da0bc
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637dd3b6aeeb71ccf2557f9725b86dd13088200478cc2d41d11ff6032c9579c97bbb
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: f0f82752a691ef5866413f2b2e5c1d0ebb41ccc8
-KEY: 7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9
-NONCE: 
-IN: 
-AD: 936a91d0b5d2c0267218cb
-CT: 
-TAG: 3573ea7b63ce69f8201934d132287532f62cf9e3f76e29a7d32db4e5d02a8ddb
-TAG_LEN: 20
-
-# DIGEST: 7f3a0e20bde700d3c5596909282e5c3e764c99e7
-KEY: 86d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e
-NONCE: 
-IN: 936a91d0b5
-AD: d2c0267218cb7090c61713
-CT: c6281c1cd5
-TAG: 62c1935946013b946a234250ed67575910144f24abf6bb500ae865
-TAG_LEN: 20
-
-# DIGEST: 5b32faa93c18842b5cb7b075270438756d5f7dd2
-KEY: 97b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f
-NONCE: 
-IN: 936a91d0b5d2c0267218
-AD: cb7090c6171386d641b877
-CT: e22001f66a70505db0e6
-TAG: 06fdab054baa17e7012c3090a39ba2562febc61c54e9
-TAG_LEN: 20
-
-# DIGEST: 995a0f9b029aba3e0a3205364628bb76baccbf45
-KEY: 56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c617
-AD: 1386d641b87797b684e0fb
-CT: ecaa1fb673a01178c9cbb07f97da65
-TAG: 089b3d6183eaa3bb100bcf1271c050c7c8e7ed21c7b3d340c6b95dce75eeacf9cf
-TAG_LEN: 20
-
-# DIGEST: 023d08d5e5af3e0b016103c7c3cfd1d02577888e
-KEY: d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df6
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b8
-AD: 7797b684e0fb56f97c3961
-CT: 92528284fcbe4afcfdee31cfa766b130a569f80e
-TAG: 2da876ef0ff47db0ee913ea056cdfa866567ffaf89f68fc1596e5160
-TAG_LEN: 20
-
-# DIGEST: ad4b11a43bb47aec3e91209f98f99839dfa1d6f6
-KEY: a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0
-AD: fb56f97c3961d8afa22993
-CT: bfe23f8be496b3bc8f7ce56d98bd68d1fa5d34db969fed0509
-TAG: 5d00240221a5d84e7b9f7500c5c250d1df78d4026652c9
-TAG_LEN: 20
-
-# DIGEST: 580641286aa43bcef85be190e1967f627713bc64
-KEY: 89c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c39
-AD: 61d8afa22993a340b9b3c5
-CT: a405ea4fd52a1d4c062e1f39f8074fef3990ecb68913525d2d780461df8c
-TAG: 91d9b3da0aa66462756bd7108febe9c52c19a46b7ae12022c55465cce0e6ae5032bb
-TAG_LEN: 20
-
-# DIGEST: abb06965675631a07f380e80a05cff36c2d42ecb
-KEY: f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa229
-AD: 93a340b9b3c589c7481df3
-CT: 1d85149d836f2eb30de4e81629b6db810080dfba5ff8fe1ebce0e21d9841d8526bd843
-TAG: ea675cddc01dbea77e1ec4419ec20d3f08f9bd5046d31f2bc608e19e41
-TAG_LEN: 20
-
-# DIGEST: c6a1ebefd827cde32df1d38379ee4bb6a7f81267
-KEY: d8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3
-AD: c589c7481df3f4183aa23f
-CT: 7ac2b8a728aec2d83c9efe446bd4bc61d4e195d0bc84a2bfb8fade2cdc0d8eb890dedae85da0f608
-TAG: cc1bcb82461c0f62ed6555a18f173399da6fab6943f13d55
-TAG_LEN: 20
-
-# DIGEST: 77fcb5875838a28d24c4b6bd0916ebd827968073
-KEY: 03f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481d
-AD: f3f4183aa23fd8d7efd885
-CT: fba1a6e2f66b4f9e45d281a15de9acc0ab1d9bdf910eb1d7f666dc0f9920f57602beb84189085fe9032db35a35
-TAG: 3fa554389af4aff3dea1e20c4b6209c615c926659cd38d7d86073c080002572f222ef8
-TAG_LEN: 20
-
-# DIGEST: ff3c91da880d2942bbc51adafaebcf4c6fd50603
-KEY: c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997d
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa2
-AD: 3fd8d7efd88503f78b8ed1
-CT: 727c00d1375f9360f59bce3279a2058d47b580669a3725c4f655f9ad081f6e7517ac0feaa7f6b283381d4e42ca33d77a1cac
-TAG: ca3526bab09a860948a928b686839c5990e0e2392ee4c1368a92c07b66b5
-TAG_LEN: 20
-
-# DIGEST: 8c439bfcfb896bd106f94676b5626f2bc624c313
-KEY: 773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd8
-AD: 8503f78b8ed1c8e9ba2fd6
-CT: 7af81e2a26192870b683f696c80b2cb7a212b68a5a85f9af5775f9582a9a99f50945b4e81c21185a315cc328e5345cf309c70c230fb769
-TAG: 823807599ac74b90be48c48661e615ef7884fa97dcdf27aeb9
-TAG_LEN: 20
-
-# DIGEST: 35d9dfb89c1883210f03050da3166b6d13f5b8db
-KEY: 2a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f0
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8e
-AD: d1c8e9ba2fd6773e0d0c30
-CT: 98c01c277a1bd3e1edefb31f39c80968a9e94c40b702e7f0b69a39a9b9ea78aedcbba89b266f5a11e8cbcb64e5ff2d0adbbc10416110d9f7f9f1c5fd
-TAG: f3b49e183d08ce4fa72d2d78f4bf69bd2bada16d212ff285cf763468fe2104a38e095f7e
-TAG_LEN: 20
-
-# DIGEST: a07054c760cc66fc704edf950201005031f3faac
-KEY: 446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be1
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2f
-AD: d6773e0d0c302a5f47e037
-CT: 2e7e6cd84e03e35d8977c9e1d4ce6784c4db3a87fa1b82e6f781e284e0d3914eb56acdde0374eed6283cc10e1f329821fefbf888dfc8fb42fa574cb64df6d88d2d
-TAG: 80503493bfa3c2cd3817bb145fc5794bb7519429bfa85ae1382e165e104a4b
-TAG_LEN: 20
-
-# DIGEST: 63efe7af502231420ed5aecce9a28446b257828d
-KEY: 7df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c
-AD: 302a5f47e037446f5891d7
-CT: b2e315ef97a1b89b4625715c61946446fe1bf27aa60e65d0ad9849f71ec53ccbee951d3628efe2795949f88795b354df0ec68b21cd699cdd0f92f31f3d6013a4c1116165b4f5
-TAG: 4e9eb0387d9121ea239be370b7c0547ded846c811f422a71e61d
-TAG_LEN: 20
-
-# DIGEST: e8e41988fad6c8b44c56544964cfe0a347b35b1e
-KEY: 933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e0
-AD: 37446f5891d77df660ed82
-CT: 8795d6c225aa78fccaaff86101641081f4a440969633ca8d7830ffb14f629fa34dc4c15e8ff20a8940c7a484ee94503372e658615eb3fc07c2d2c399ae9ad7a77d684512d0ca273f77fcfe
-TAG: 534574a93d31c1c0bb43d3d482057e0d8b51a679a6
-TAG_LEN: 20
-
-# DIGEST: 172f4992e692a88f49628e5d3937959be01aed2e
-KEY: c55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d4120
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891
-AD: d77df660ed82933f62be8d
-CT: f2f3a3d985eb38c406bb0db0d141188c680656db8a4484abad2c8973267e14458e2be7cb52f06ee2a0f68eaced13db714296319b2b3557454f5e9cb47e8943ea3e66f7bd25c5757375be7bdd65fef53b
-TAG: 2c441fd3259628cab417df36374ededb564b3918239bd5e284ce22d0372f4ae0
-TAG_LEN: 20
-
-# DIGEST: a35fc7d25f90dd9cbd35910d5532aca8aba88b29
-KEY: aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed
-AD: 82933f62be8dc55b436965
-CT: cea9c7528706d506d75cf085c8475c081ee8c6145ca11610b73eb3e103a706faa66062f8edc10abaa7c3edb3fcaf43c202c4812e768fececaa04564414f45816fa5c0df5b7518ea3859be75c4567565358293e9232
-TAG: 32de5af09080604ec6b6fc6692337793c264f2b4f5f88570cd6e22
-TAG_LEN: 20
-
-# DIGEST: 4abaa8453e8cfdefd918571a961d8351754ad5b4
-KEY: dd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad40
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be
-AD: 8dc55b436965aabe477e0c
-CT: 03065bb245ba12ab90903bc081198fdfe45d7d3c6fa3b1f76bde831917376ec2a5b2ac2cf629de6bd3f23025b678ea9cc3bd7801f5510b58432a8bc17999304fec4de7ab9ac22d75897cac67ed57e30d4745588b36695dd005c5
-TAG: 92877bfb0998bc70cd20d6c1dd51a73b031eb1aa567f
-TAG_LEN: 20
-
-# DIGEST: b51001b6ff9d27bccf3103a4961280e0a1406257
-KEY: 1eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae0211641
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b4369
-AD: 65aabe477e0cdd46be9937
-CT: 8d7999ec7a80e528bd6a8d2a9724930c93ee5cbb0c888d9b7c79d2449e638c03f3143f1927a1b261d66ff55bdeb7ff6616da99a2155f465d7c91f54963e7cbda7b61529381204ba43c9681260799ce66fec9b0e9882fc0ab474fd9134adb66
-TAG: e9012cda52183ec3e658c42f819dd9862193c5b312ba42f288553e8f1af858d6a2
-TAG_LEN: 20
-
-# DIGEST: ad2b43eee27e6267d8c5c1c3d558a07dcd6b1f5f
-KEY: 997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef45
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e
-AD: 0cdd46be99371eb8da7dac
-CT: ad918e7428ca106cf043d6626772cd45ce998f32fea28c3253fd58f0fcc191bb4cd250b5dc6a7b352bb2aaa66601e280576fa60ad8c3aa58742462955fd7f33ddbbb5036128617c1fc3bfdf83100dfdd069042ad1887c2821afbcf822756226c69779d88
-TAG: edae83839ae4bcbcf7da661a2c2ee207e4eb4716dab8e0e11e4ae1f9
-TAG_LEN: 20
-
-# DIGEST: 7b17b7cb19107af8fc4671420e461060e2ef3e61
-KEY: b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dc
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99
-AD: 371eb8da7dac997deafd64
-CT: 5e654ee6344f96fa117a2e1f9cdc08bfaca9c83b1c4d61891e49077c8ae7a8aa604e1b19995b32872087e04a59ed367e42f0ad3998cc2112035b33104164403a948ecf73c516f74adaa57688cee9417456f996847e0c637120478f7d88288b5403f0697c4834e4ea7f
-TAG: 363ea1d1325e86d712a133cb4e4ed7b75715b2589f764a
-TAG_LEN: 20
-
-# DIGEST: a27799fc2e00e7abec4c5939451a834c4606cf7a
-KEY: f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7d
-AD: ac997deafd64b1fc65de39
-CT: eded0eef58434338153caefd914cb98ff516157445bfbd25c3c5cbcc0ad68ed1bf049ac292da027acab0310ef08d66040341721524982165cfe7f6dc495f7f5f36cc410470e3b42045b718f580713dac8074b0e76a0345d11c94a9800bb5e5eef1cb8d9ba5818799cd1ef69c4ed1
-TAG: d7459df78edeb89e01ea8d685b5780b94ac3cde906a204fc3bdf00e36d5dd00e464b
-TAG_LEN: 20
-
-# DIGEST: 7c52593d1d37b0dc380297231c6cb7b64e04c493
-KEY: 1be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb9
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd
-AD: 64b1fc65de39f4f03541a1
-CT: b463f7f24871b617a1001d2f73f9eb8fe39b5fe0b382d420af876defd68a893add2eb6cac45e56d669f4ac67a943a3b32daf0932072bd701f9291b5020bfa9133d2875d8f6ee78ce8c49d45b80329831799f1eee8c712683300e49c57dc8c1ad0b07465184483d669b04c183976289e3ad6070
-TAG: 2e8b0999a7792a9cfe5148a8733167317f341a861b3455bc33df9fcee1
-TAG_LEN: 20
-
-# DIGEST: ac6871d354eac507556770d8b6bf10b5240273ed
-KEY: 33c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de
-AD: 39f4f03541a11be112a729
-CT: 413d2c3fbc77845409ad66cc13432824ae4ae109379a9617e8b93d4f9b17fe0d0450476c3f98c229bf35e86fa792dceb4b3864761dd442c294e43b1cafe1fe086cd1ca5e1572fe2b3753c20a74b663b536f6e686d9765bafb10566f2b5cf02ee24e3dc69cb2be9392c991848b840418835603bdd83b2cf0f
-TAG: 5df250368694b1d3b13be94fcce671a810bd1283cffc0ef2
-TAG_LEN: 20
-
-# DIGEST: 4f498d0aa9205160827626ef80c163275eca1f78
-KEY: fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780a
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541
-AD: a11be112a72933c7b54ed4
-CT: f72c519566632f89513f3f278407845ff8096a5b63929f0ea6009c3cae0dbd853662c4017ee5729eab92f2c475f0a45533de67d4b941d4b16c1964986d8f4a16cc12f02c28442ddf5790f321b3942cb65964587f3fe55ab28064c52ce3d3598d3431788ed2c26fe1b196abfd35afa0f7c8206a6bc71d61cc4e1a086c4c
-TAG: f8c75274342950e4893ca3b0e9fe95fa51343cc9c204e3fdb1d9b5af26119fc874e52c
-TAG_LEN: 20
-
-# DIGEST: f0901e8b8083c39222fc940384eb73cb96b22892
-KEY: 41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a7
-AD: 2933c7b54ed4fad0be905d
-CT: 71fd9ada130acec7deffa6a53eab506bb5fc80ed7e98e656a5282cd88cdf9c253a87832ac42dae0e8a476011b11cd5c075c74b0f29c1c966983f3fa69e00df1ea93fad4942bde475e7ee08ea2c5f6676145c3dfb8d07521133468ce6e573b789a71e59d622587f8fb76e93af95b0c47e15938206774398e50a7e7550e2718270cc1f
-TAG: 2b2e70be7be2df4442f0a82a8dd4cf89df1e3103a1b3dac4d3b1fb973e18
-TAG_LEN: 20
-
-# DIGEST: 7af193cdcc8d7f17b55447a81eef3dfdf345bba8
-KEY: 998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9e
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54e
-AD: d4fad0be905d41203f5dce
-CT: da1b99574d59c3998b39dc057d093134c9bb4d0f9a38758e95273694e405b55d8047bf119dbf29c346ea5318a13c8eac769230c085cc2b67e57800279fd47aee9f2ba8e572bebb9f231e954430bfa53bd193ed74b4dc59d6c6e3687451c95d996c86283f10bccde027b90be52f6e20032ae1d83aea8adf183010f4fb90b9ecb96b6d79fcb98f36
-TAG: 632079d35e9dc29a1579727361d74d6db3e9d619394310261b
-TAG_LEN: 20
-
-# DIGEST: 4ecf44faa266de0904b093653c4d623a543d12d8
-KEY: ad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be90
-AD: 5d41203f5dce998f8fb2ea
-CT: 5e1086339724c5489cee84cd57e1b188bf83390f0d264e495c92040a1e56a616d5e2aaa3a240592f65ef0e1bc65ca5e18fef30362fa7b38749328ab2cd7d43c5a37931597d975101e59d089f03a3d99d928cf50db01b3f5e789d4b8b4addbca347f68dc94c17944bbc17bc0ed7495a800c6faa9c87a152e792a11ea7f0b551ab2d5377d780e8506747b67ba7
-TAG: 83db1f7ff26becd07a35f4fc178567cdad3eea5bc8aa12011332730a3d2adb24766de087
-TAG_LEN: 20
-
-# DIGEST: 92a938017497e0762115325c40b5f7c138d5c6f6
-KEY: 16417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da0
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5d
-AD: ce998f8fb2eaad409ae021
-CT: 5fb310ed46bd64cf198dc4b2a2e03a1cab6615e1d50179dd050cd538851669ab1ed4aea1970ace6463b5a910bf5be01e8d8196d6d0833a50a330531f61d962a4fa1767e958e38b4897514b08114e9c1ddceb19aea5d5ee079c3aaa8017e9ab7ceb03514f7d393ed60ba6fb88f7cf8bd93949426083afc9205052394680a7c04fa80c2f12484dd44047d80117e54cbe9105
-TAG: a5e895128dd29e99c4d955da935ac0c6d5cafc8c9c2139f848d68e93e7b168
-TAG_LEN: 20
-
-# DIGEST: 6b126413a7bac1069cbb5b338c158463a242d607
-KEY: ef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2
-AD: eaad409ae02116417dae0c
-CT: 553c974dbb652bbd9a573ce72b9df30ec0c01cd04c8c706d7121983d8e8ce23436bdc2e3bb2134af220dc1d70eb68ca340c3e4791755e5b7101a04de9f8c455c81c617577e2c23c08eeb3b23bc959e4870e0d64cbec4c1d276d31f7ad19190f0677d0dc0494a8053476591dc5c87cba04248cf5c7c2e17131af7dd5b794347045ca4fa7b30723d29b22c509ed91e95fc456cd87c5e2b
-TAG: 6e3e534722041d09e80e11a72ddf9beaa27c8cd8832bc082bf79
-TAG_LEN: 20
-
-# DIGEST: c72d214b42ed66ae0822fa9f3bda306c7d58cf80
-KEY: 16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae0
-AD: 2116417dae0cef457b9e5e
-CT: 8f269f0114fa47b84784dc3ef9a084d9d65e8bb10c345a9a9d13100860f2e713208c5c4886b40989cc165605f5719d5a8e76e146e6a5ec822a1fbd6b237bd0f02d41ae5f26032c202d5fce97ac0317c28d80b91343131ab3db438962b2e52bc14cbc286b50c1e4c9170e516461e24bf920c470ff7e2442f755aad133cf6b3e20e05669f5d86bd39a04cadc29b2c37dbeb89f0ff7192f497b3e157c
-TAG: 4a930cb7a078b1f1312a1baf186c8ecbd3cf1eb7a4
-TAG_LEN: 20
-
-# DIGEST: 9faaa58dd34a192550c3519f8c0aeb2ff48dd388
-KEY: 5607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacef
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae
-AD: 0cef457b9e5e16dcc5b6f2
-CT: 9e3b93e29ee6c0825e0150fd63a887227470d524fc52d652db43730c0c4dcc0f0c2f6dc2d26568a61336082ad638d91c4a3e149e0680321151771f52eab69a579b908db93d7a83d57c360f99de2b4ef1ee6fe905e17f02893df19073b2afd26da1729775ea4c6adac3bf7b50f2b7a8c3b8fe09ec371fe597d74cd15a32ba97adf813508ecab5aa303ecb9c20464a7914ab38255930448f990b058c89626024ae
-TAG: 066ecd13619b0291c37297f3fb23b5521faebef99b281cbfdd79037dd351b7d9
-TAG_LEN: 20
-
-# DIGEST: dd5e6be3644dcc888cc50c0b2ad0d55eb0407fdc
-KEY: 3fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e
-AD: 5e16dcc5b6f25607f00d03
-CT: a042853b92cc97b68982df3502800fe9ea7d8e7962002b7d8fca0ace62a7e4b24162624be865ca5010943f469b5793eb4fcc877c83b94c176f67f074704240e4c3fe3dcb1dc4f0f963b7550f280ae18f1b0bf2c727da8ac286386d852a71bd1a0b8cb2b39b3ca29b5570d212cd43ef0dbf480aebb6e246f300663a3e084e15affd00e44b11e4bb0afb7ba73ab6a37208fe63667d24a94f45a78f1bbfff37c5975a382e1733
-TAG: 47b11ccfb0ef7b639c107760b90f4e21dee961b3a59f8ae6133f6c
-TAG_LEN: 20
-
-# DIGEST: 1b8b627e1020d71318511d4c2078eed315ee0b04
-KEY: 4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed51
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6
-AD: f25607f00d033fb95fb09e
-CT: 712d1d5251c85943d3da1cf4ede4e648c64177447cb04d34c4417fb4b89676f3a59501b9da58d94c355f1c94b3470bded1c34c49b555238d3522e074f5c60cb0990b04d953fab40ac8c4589d16f7006de59a929b761cee5e4e43a708b53c4db32c49407697a65dea4d3b279fc0bc343f35621cdc097635affb7dcf17f12858cc20629461c88967b4a508703355421304d55ba1d4f07ac5e0d58b8dd76608c5441a0b7f8ae992750e2a00
-TAG: 85c2837b93fa27d7e8954a0e790c8e8a2f06a0a36c1a
-TAG_LEN: 20
-
-# DIGEST: b7370237d402dbf76f1a431cdfbb37f41ef2ad4e
-KEY: 780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d
-AD: 033fb95fb09e4d00d6172e
-CT: afc5e2e40692708b77a11005f8e5f8a81bfb418a9b1868ba8ce95d8c0d8a42872a980d8df4ee62e3b7cc1ea14f5681b21624f670c9cc38c39e02db42a79fca20527e8fbd84a5b54c08dcc3b18ecf34f651a51b922f634204d2699aa41e0db44525c9d0702eb7f31004876c2b34b60eaa9ec7d5a81e4878ebbb53fa7b113899e705e3366ee578cd6d3f2828bc32e3ea7c303bb94862fe340c9ab91a8c0b8d64471fd49107935802d48eae18a6a1d77f
-TAG: 71cbf93daf609a91b0957ab733dd5bb4c15c4f4f87b676e66c6b9ce50f57b18657
-TAG_LEN: 20
-
-# DIGEST: 0ad0e709e40cb2fd662020d420d97ae50a14adc2
-KEY: 433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc0
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb0
-AD: 9e4d00d6172e780ab8b700
-CT: a56be93b1bce1546c8e2ce1c44fc0a2551a82f8bdb89d6caed27589981add67b4c8f1c068d00c73b8821f42bc6268a4366ffa87c5eb122829d58423ed30015ffd10b2c4f4120d600bea00069eb909470a7c8cb95fa74b668ff756a2715635fb6603c27bfd9ab0e47ff19dc637bfb7294b5df8fbdb80adf6c7f1ac20b7a833c90619544e9df8f4b6c46846ec67dddf08896cd7d2aba20422fd2ebc287458b5b16825a2c938f7378a8711500f7968e2a46a4b4cd46
-TAG: 82e4509cc79cbf86265618c60124dae5b83273f274b2c021ba1f664f
-TAG_LEN: 20
-
-# DIGEST: 5f9967a8fba7184dd97dc7d5da22ea785e0ffbbf
-KEY: 1c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f419
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d617
-AD: 2e780ab8b700433a957a74
-CT: 42c4a44d5c32c5506e5e1aa6b5d02294a7a3f83e0b69b86b3bad5fa159bbbff88b1c691f19a94b9c09351e4c2da5106b4a98583250bf76156ba41605a78595410ef30fd5eaf6d7000ca24d2e3327d9fcd69ac842f31c7a5ec7798c917ce4eb0d1219b90092aa680c73baa42c4d930b3bcf3052d88d216ad7b52caddaae916600c6a31c9a4654ce4eb528c355d99a3349035b37b9df8f2dd07699631c54c6604815bdd16d9c06fe27f29864f7dc6d340d1c6d834d21e1dc79d4
-TAG: c716b8e8a35426e7b86baf32f17a3db30ea0bc012a83a5
-TAG_LEN: 20
-
-# DIGEST: b5aedaae523d9d396ad1d9bb175bf4c7c0b03eb5
-KEY: 021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b7
-AD: 00433a957a741c9eb80f2b
-CT: 29f67431802cb52308b51065f1592c6def60f3f503bd12deeaea4916ff8dc310fe84ac7da36cad4c96cf115862b2796d90a95f8f23edb3f495d72b0f71552975e37e4105dd70c87a3273e46d62e23db8a2504aeea3451ee6505b0fb0d236232861dc006320e36d9828e27d3a0fc607c74bbbcf9c94363ab49efb6e904b741d2f6c93c2e55ab9e41157d9342e234077770288efc77eb95b335529975636309836349d5d18fa7ec643e972ed0e9911f21eb04279ea8bb0b04e9b9e8cdf2c4f
-TAG: 3a039e0c32148a50a93e0eb29d9a093eac58013a426de1390c66b8d4a8a52688a3dd
-TAG_LEN: 20
-
-# DIGEST: 52bf12f5594b0cdefcf977c07626e8748cec5425
-KEY: 9da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a
-AD: 741c9eb80f2b021b144476
-CT: 170a91c57848e7fd097f96da09530676f65ec1e0e31cf9f8de86bb5aba87a311d37188abd1ad16fc4f6d8201b9dcf3aaf895fab0154c301464b9c9d1a082d0fd3ba717086f2d5d1b5b2e71eab58a861b53dc5c3c45b0dedd334e308648c9185200d4e0ea2e5f26bcb0bc6964d63aa548de958549aa2d68b455e46f2ffe6f9f3e8b59e18b23672600f1f44247600b43131e7530b2859fd7b8fa5620dc8da0b428f5a1e78015afefa79b504e35e1148fbc58b982179002125748c76b3d283bf493cfbc32
-TAG: 872dc1afd006674d15455a1ec8e67c5a7af2b979ad23c6ac7b5ab3a8ea
-TAG_LEN: 20
-
-# DIGEST: 900a1792a921b6a253c47013c9eaf01fc5c880c2
-KEY: 0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f
-AD: 2b021b1444769da00fcfab
-CT: 919a222be8cb73e456dd156c699448211b709e63886967b73a1eddff4a6ae575498823bff9d8a8966c22f8077aef5befe70492175e31daa749fbb0431c1880a8595475a48a299f082ce7f57b2f0a24b8cb8442041bc93e01e44253085685a056157ef6f75331566ab98e1598108ee47833b2f12764ab1ab7b5fee647e95599f2daae053cac2c02413930f81eeaf94ce3dde5f543cb219ac32eb20bc0d43ee92586b3886af60736fa45400d4bc848219d06e8063bfe739bd44fe96564d0437ac12ba99c5f02bb3be4
-TAG: f8d5f712d66f899357f64957f10b00a48e605137a8c830e0
-TAG_LEN: 20
-
-# DIGEST: 88d7ec35d88ff113703702955e931e802fb0d8b8
-KEY: 060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e71371
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444
-AD: 769da00fcfab0f5f93b511
-CT: 58006dd9eb2ea343d8bf40076a71c209375b5ed356073b946dab0617bc456391fdc21a93801557bb40699eebdf57693107f73ab0d777060569d6a300eba25c9dce54c621a25991b43ea18b9266c0b4e2571d9870ce9ce2e705e0a5b7da6424a579c3a890b9ea99c83d909b033c59ab2e0d9d48df70a04535a84738fb355ad579fad6e48803f5ef13c082f83f7f8f1f603a91b33f159c5157f8feef6d9f679c0992f726f05892a12bf6b7c2d97764e640e0174ce82857630da3ca7e032ec999e528fa63004b49c35661202ffd33
-TAG: 4e3e1e266a92ede447a0b876b77df48dc2fd4adc9331186eff899f8dd1acea003b8316
-TAG_LEN: 20
-
-# DIGEST: 8d8493b55d9b74892e77d3b730588c087ca9b1e8
-KEY: acefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcf
-AD: ab0f5f93b511060c9c5f3a
-CT: cabca6bfebb503df1a2b2cfb11c23394f1ee57edbcd0c8acf4546dfe383d7b71134bcbde9dcbce5bc4300964de3c9c0d48de13153a69101643c48842bb0efefe9e928fac973e69817a7fc35722e22fb21819107424db4836d24b429e8eef3b861099d58aef6bbc23896f862fe41ca72a34d9f41b8bc4daf96f8c7b4e01c3abf5ae4a7839785fb7bbcf50a93a9d621770797c68483602c30e2c8b91acca0f6dc08346c851e1d5f3da4eba9327ecdc56ba52b7377ada217b595e760935ab5c681e813454b037dd6ff31f67fc29fe84663535c6
-TAG: a259161d6b16a7d85d6ff59f90ae7624b9fdbaa9cdc72f22396e98b4331a
-TAG_LEN: 20
-
-# DIGEST: 4cd92ac16a807d2ff180df75c47d848749c7ef46
-KEY: 4ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b5
-AD: 11060c9c5f3aacefe61b18
-CT: c5d01436be8f519a54eb38637bbe20c56e6bcaec1e9557578cc1ff66658b83ce117092f33c40084eaea1db6ce043b35cd2a55f109db71567ab7039daebd2a363246b48ef0daff133d51b21020270f165056ec0ad3ef67f3d4525d14c50730ccd3d0990abd52319010f3afcf2d312054f6be80adb71ef96cff4377a35c63949caddcd52dc2a8604567e7894367e38db843060f8a34d6c6bef60a0ef47c31955229d7edeacaebeacdb45ad147b1d8874846c333a1136ec0992f9847465b07899e7d144555a8a35f65c25c7ee092de14d499968d7503f106a
-TAG: 11cb958d9cac452c9d89f0af8ae0ef497b74631fbac1944863
-TAG_LEN: 20
-
-# DIGEST: 64ee218c0c96ca8e2d2e50cd809d61ee109baca6
-KEY: ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c445
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f
-AD: 3aacefe61b184ad2463939
-CT: 37a3f88b2b27dad02c71c257d17331e7650f71a4632fa6dcd651c96dac0acd00106494e7aa6d7667a8c034b621608f5edcc4ac37fed8a5d150552e365eadeaa665e605c158e86462417c5c161bb4d4d1797718866368ab4518d7bb109a55ed2e73d02d9b94ddc624f869881d8d4762e733d44dc04498823ac137ec7ec7ea85281c24dc9f63ac2acedb9c46627f825977c58c61fc930b511098df24807d7a5a84634e10a4726a7f8c668f5cd07898821958ef074ba4397631be00269b95967538f4766584ddc1479b4bb104ee2448ce7186ff501b46184206660cc091
-TAG: ab5011ff99cdc39a37f6478b1cd82ca1ececa23afb81adc0b576d49f83b454a39c15c8eb
-TAG_LEN: 20
-
-# DIGEST: eef8eae201ae4e5af32ee74bc724e13ae5ed3978
-KEY: 3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a2
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b
-AD: 184ad2463939ed518ce97c
-CT: 1112903cc97cc872c44f156068c58992f1aca2a0a8f1b8a08e744ac1dd0efad9321556c77e9c64fd6a36041ebeb980c0ff064aba672e4eac6cbef78235325c412d80ba0bfd76b740623e457e0e600f375e47809c56c1b7f2f5359d08fabf5cc6beda669a495813aa0e8368f386fb9d7ae42f64a52c047e0230e045d9ff1752315af9f6c4348d7e685b3f3e2daef06e41a6997ed11b3fa0f2b15f074b1362c3096d010671a8abbce7bb5c729fb6babac9e685a1d64ffff97c17b33396d2fe2a920082445fe75c8d924ee2f5935dcfef6e9a88372e2c03be6a4447153e96d81f7bb3
-TAG: 4d9f9b3ebc9678fcded522b32214b890415a87105aa401c188808ae0a106c9
-TAG_LEN: 20
-
-# DIGEST: 2fe67a81b41b094a708ae515e28bcbde3bed724c
-KEY: afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12fee
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad24639
-AD: 39ed518ce97c3fdd293d72
-CT: 9fae07a37501e2382d004a399d8cd95a9cb9a4b6dc038ed7bcca0c85073acdffcc66a84bfd302c48a4eed40a679d5658c8eeb76772cf93584a8decb8969cbe7bac022b18fb86c7bc26f0974ae4e03e36c22bb7b3e02d182e25cfd52ef7bc890fe0f5935847f8652d42965757105e88b327e19308c88cfcac46a47478ca7a0643da97478b127f4dc45f61537394fd4d049d59e8361ccee4ac86cbb4e14050ac07dcda7495f1a1d34095a9f7d697cb6b88eb9a6421c7ab338ab4d0d5b2bb61e11ddeda49e75bf6d0bf0d12fed98d50d65d33e029cf341f0f7a58e85bd0568b7cc3db803ec5e9d0
-TAG: cecc027d5017b820cfcf74d78664b23fc2aaeb20bc8d73499954
-TAG_LEN: 20
-
-# DIGEST: 33d10d6cb5dc80751d0f8e370925d7c86cda331c
-KEY: f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce9
-AD: 7c3fdd293d72afc09ffdd4
-CT: 1817463656d30d6648bc628a45e20e231a4ff8dba4eab244abcb198580499c696b41cf256352023975a62e66d5359f9bf656cf098819a5491f1a113a06fe4d56ab4629665b93a017369a1e2d22f817a66120197e20aa92f174b5ce4e158a272b51acf766858864fc5c90c1ebe9bf79b61f327eb12a106a38662bb2317db8113c3301f00dfc54bdd79ba7126f448cd9f3eaac475bb62eeff16fe2de45af646929f797f69163864884279eb35ec9ad6137a694d2c72a2cd2fbd25cce1ee90b73b9c7e592af463057737a1db4da41b479abed76d3b601292544be8ecafdc43a48129ecf1d94dd9d59183385cb
-TAG: 0f58d011c758b6b59622c5f26faef2f7e2a97aa82a
-TAG_LEN: 20
-
-# DIGEST: a29f128842a48debb60699ae0df0da9a9b5e5dad
-KEY: d299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e89920
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d
-AD: 72afc09ffdd4f41963249c
-CT: e68230ce6101c64176f56a57c34ee54ab6e95b7aa28d3e3d262fae71ea66e5f1699e31b3f9cc1337d2ac193b5b6df4d1d10fb86b77c120faa9f67ad6d9cf98c49e1ee572eb8ef497611e6b5f84ff42dc3a2461a326424ed0e2c5978ab4175cbc15dc4cae9eefa24ddff8d055abd113f0fefc3af7405b153ea1fce067062a751c306cf0eec477d4b9a068d5032c410de991497b6c166233036841b9c1f6313fdd216200007089734d096189f4c6cf0a0e5cdd2328d8514d319d5644003201124ca71df0bebc8c61595a54a6a85f9a88565a0f7b517b20488da57827caba252efdc6766cf860f89c21128ec572c2a5e44c
-TAG: 8b92c00f8d4306201a1fac6797931b4600a3993e9c11e01b7fb92f01c20a213a
-TAG_LEN: 20
-
-# DIGEST: b5048d1efa7564966b6cf1579cfb4ad8e9460660
-KEY: ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffd
-AD: d4f41963249cd299b92e55
-CT: 7ffa8c3f882de672b6548e722bdf64671ec122187bd811240e0c8a62f7ece34743f3e8286cecc99ad2637f960134d80230f4b358422576025bf2d2e25cb0b2be8c93fe8ecb1a2a84367d075b03d2eec5c8ea3bc306727733918762088ecb995b61720cd294bfbea261cce90ba5ad6f5b011bfb2767f4388f1c2fc5bcdc9faf1517b734aaccd780328a0cd3c3e8a82c279231ada466f5789b0795e56c9b14073b9900046c7cdb02edb55c96aadb8d703f0f6d739d0788447fc8c47ae9ebf40f38355476bbad9aa239373a6fd38d0d4f39590d70cb1068729ed8e685fb905685dd549e333c670fe07abb04e7af6b6855ef574913c06c
-TAG: 595df50885208148d4c51412885c34bf197e3eece02ad0c969ece7
-TAG_LEN: 20
-
-# DIGEST: b6e68f5f0dfd8ceab56ebb657728c9bc5129fdf4
-KEY: c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1f
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f4196324
-AD: 9cd299b92e55ca24d8c078
-CT: 0638cf64bebd174c40cb462a85d7c6ea529619e2a7338e829f91227e5586e88e11bbf62addf813475e1bc024b60a2f8ad72541d3345898b1833f28db4d9e2754807c3b2888e01584590f879ffeffc2cd66973c65c3712f7a7704ece102a5b67e4d7414fb53ad9c16e4aa8d4f310ed787dd8c23b008f0a9667b84ab7e429ad7d2173421c8ac06abb1e4da82493a01a6872ef6cb603ac754d96ec48cc15ee9c127e321523aa02508595edae2ae4bdd453ee8b6326d05166704e1d358d7efe22c24a40be281cbacfc97383c4a0ef9f2aa45e0b31b06b8b5ff75bbff51b6c77880093bbf113135bb7c251c7123bca5e35e311b55fd7ddc84e507039c
-TAG: fa8112d34c21d32010e1815b550a05b971cd6153f281
-TAG_LEN: 20
-
-# DIGEST: 853bc7b9fbd640cc0654fa5533ae302e398bab35
-KEY: 13710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e
-AD: 55ca24d8c078c49f78c7e7
-CT: 20e84bf92ccc563048b5d130c8c2260974171942a26977e1b1716c1e73007433710609261743a0320598c80712c1c50a3e8afc047a5481ee38840486001ef9c7ee14c42e4b41cc6238bbc2c00f5f1ec121f5df881a12e98ecc46987a93fa2ab6c76279850fd2097f7312e699d10556c4899ba330ddbe52ccce814fd575842153698cfbd9602df8d0ba4765c6483de83232d9705ca82a866b78b1c782b13330b8637c0de7a0ac028c7da0a5510373d56a48e8bd1e59d269fb69ba7a73b1bd485859346d060677ca386c04f6d07b295950fa3ee91cd38928e29a38128b8ed73007182ae3870630b385ff6f212413260d083c61f1e537b6d1057f3972553938ad
-TAG: edc275bc6faa902aefccdf13f0825ebfc57f0daefcbd118e10e1d324056723a87e
-TAG_LEN: 20
-
-# DIGEST: 286a92c480192206a2153df1b6d0eb26e6507da3
-KEY: b8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c0
-AD: 78c49f78c7e713710a025c
-CT: 6da237176c778f67e98f09fcdc96ab9a54a9ece12c2e6de1223dc1a22c74902352c33dfc993b398728b8a62206a656ed0ac1d49cdacb22b9eb1ae70e9b7f511333054dbc26a26f837ed0213ba98820c31104dcfa60c6892a98bfa0a41fc220e81c219d3ab9312ddc534f314d35056901d04d485b3caec47b746445270e2276e02e8f1adc54547ec9efb1ad44354b25b5c09c58cd9480a68e758e87739888129e337419d9638482cba7259f5b150891818b58b24fbdf6211c7c5976cbac2e10dca06d425247005385996a9649240d680811a5ee4229d0984c11291f86b1e75a066263d3a738da0c98ba24054da15f6f11f5c8aadf24b547016f336beee210877b25e987ea
-TAG: 0dd1abc087078d0d7e93d9d86375891b928bf21763a87e31b345b49f
-TAG_LEN: 20
-
-# DIGEST: c2acb0c126af5282abe14058066631fd0c658571
-KEY: 89ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c69
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7
-AD: e713710a025cb8b9d71d29
-CT: 70e4d06f468de2780565a300966e410ee3e0ebbdd6d29b8921a047fdfff86da5f4fa2981c1d7a4013c480b8ece1fad84ea27ff0b87bee1bdb88a661954d078bb65bb6a2aa1ed5b00519bb0c56069774dde08b06bdf83335ea9c8702abb9098015707b00122eff2f8e5108e4fd6cd719131f919591d0c5198c1d975c4f038ac273cd6f9ab2f8136b48429efa57c6ef1a239a693086025bf6db218c2c26bf0ff823dbc08944f06c7be29278baaf5039e544a54de7208e0392bb5d9972f3c3a7e69532b5d4322c71ea4af6fa2167996145538735b3581250c1fde20c03b14d01c101a0a04e79f6c6a6390f10cdbb3fa3e3fbb03a64132bf82e965039f0231d69ae71ac20ce11bfbae7229
-TAG: a90fafe3412c5b67009dc185a9b38d00e26e9cd299e550
-TAG_LEN: 20
-
-# DIGEST: 500e5f2a56bfafb2d93e26224c9c2df562589f23
-KEY: c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a02
-AD: 5cb8b9d71d2989ab33e978
-CT: f0d7b956c586c029980ff8a78a79df78d14328a608b47cdb8ca3670f4bdca883033f8372b6267218b07dc5b9aa5b8104a1c8c3fab4d6f3d39c2fe8d7c997889a8deb970edef03204852873f1f9f07e41754996f57fec4d72cc438c7adf58a9e888aecc2bf6d7d240431c1481e7a0c9bd27743700141b7be5206a027165f9ae82cf1f3aaee97dde5ce850e34bc714ad67c617c6640905b1c067a214a160df4e787b48cbebe465cfeee405c8611c7d376ce913bc3a5c0e996e4cc252a89a48ff09a18cce553dd5ea3ec9b7d8417abdadaaeea44ff233ebb45fb6385fc2c4d9be76cf2ab7f803cae25fbcfa68bc05cedb14492111696884995046b5959389081690e7e4ec9c1af09a482e7428324632
-TAG: 7ac73e153a515cf974176c0111800c5f76ce31a1d08772b950754a82e6c5b7d5dbe6
-TAG_LEN: 20
-
-# DIGEST: cfa6a42a2cc0ddf1c7b20031c95e331696bb9ece
-KEY: 85a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d
-AD: 2989ab33e978c4451e3be5
-CT: ac2c01cbae12fa7572615a755522dc5c0aa6d7782167e4459e5dcbc6a5c2cd8164890d2715a61e4e80cc13a35c48b537f441ad1bb63e2d3eb2cfba711fa3ea878cf0b4961ea3a016fe0a918f7683be5a243f02ba3e651950f15d4df7b7f144a57feb3d6bd50707731e273a2b78d7733be4be6bbddd4aede0ff29ec67d280f159210ac1ec62500a8f0a2c17a6d05114eede2ef4b393c4728d3045e48bd381d616ad13d7672083b55aeb1f6bf0a043bdf37712cafc7d57d23b1fc96371bd111cf0facf75d45e28f45cefc76ae50a5a90c00915fd348d5dd2110174ba52b67c6158c1ab541ee57cd7e29155e6a18bba141eb6b5ecbb2f22f68e37a695a2e37aeea8e2f66209d9664227344facface4d99f2ecb03f
-TAG: 39f33e804488bf9293f087647a39f5b594115586268ac92bcd688e1580
-TAG_LEN: 20
-
-# DIGEST: 2d1b27948de83e32a0fa5be7040d896824ac1fe9
-KEY: 2feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e9
-AD: 78c4451e3be585a29a2af1
-CT: e750bf0d24339dff581342ad50a30cd209bb3a4ff8435fa17428c504aadb7520804eb83698f54c13532655c032b83f824cfabc9513faeb6bc63641e9c76c019964699ab8bb31bc22c0a1acbebcb76a095cac94afa630030e036a48cd49ebe0af001604bd753234e706b48183f2bf93028267ba8622cd661910a6e147c8af31364f3aee50b14a40cc6a8a0227615c4cc6a139cb2a33374145841cb58c44e0dbe5487294ff9e3691d89666eca0c3edf6b9b026abe508f1718a86a7ec35c2719265fc1424e445335d81afaf02650f4dc41d752dcc2c272a006be8e98bd80250c66a616ad87897f7e5b9a8a00f54e942914e2339fb2e08359b3f78f8b9c8927a5fbb0a810c4fd826db8e0167d535816e4b2d6d4d199b96ba1c37
-TAG: 18a564e0fd21d17bd5530d73dec0bae15222bb76a8903d15
-TAG_LEN: 20
-
-# DIGEST: d35ac8b9ece76d43f1497ac8681c5077398bf2ac
-KEY: 63b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf7140
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3b
-AD: e585a29a2af12feef71e10
-CT: b1def7ba0c05f8acf42e15cb052fafd63c2febcf277cc6aae7065d606b502852696a6081d096de91a8673e3a96ebcc2b0120ad68a2b1a85457dfd38e187ae42e8279c3e2b57b1f7d69e11a51d1b8d7165c6e74d84fc1df402ae551134939e5a17e28d5f415a491c12b3c70d473c370542d7794103d7d639d9dcdcd5f67ff7a2420d2d38a433ec767efd5e5d9aa64ce3570e116b50b2514ec29a7afd8a831ce30342c2cc79066eb1373e4d44fe432271dab68bf1fe2a6a1c45a4060943825bbebf790a2298bc9dbe4891320d3325a309041b411a629346b12e3e929bfd1fe5eff9068713e6171a89a2cc54085a2224792ddb9a7ffceb5431d1b8fdb7d7de82c7db78d7f80260333cbae973c7f3ced0752e792546f2e65fbed672ec98717
-TAG: 2308ddb2e01ff8f34d767efcf93b5d989b11b610e5852a480286b0bfab442e52548f4b
-TAG_LEN: 20
-
-# DIGEST: a3b33fa67f5c471a60a63dea915333550bf3af04
-KEY: 99200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bac
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2a
-AD: f12feef71e1063b0b4e6e8
-CT: 046bd6d55b37dc68cd7cffe008316544ff781e42afe4200864178ae7d666ca3f83f25ee4ab1f2847e132d762225b87ea77dc30bde8f3ed156251f9366573cc759bb5bfd129e3c3f799832ba8b489ac3616c3dcbd30ee75459ce15e7885da51ca277ddffe5756b22781cfc00ad7eb1283a4ddbacf5f2921b155b4646335069c03f62cc01d75ee33b40a20f46e2a8e9fb1b3b02bb7d7cc56913cf9159f12e2df6b166d1d2a064807ff296f774216fb4b1a31f3b1da9d9dd6cc76f6d365a6fcf6e7424694b88bfdd8af1237cba450a7ad1bc8bc7ec3335eff5edf0c95f8f0ef051406513c910fee9b51326b4e17cee5446ed7477aa9399c4af75ee25b56154b30f410c47db1cf9ffe8740e52501d4295bd3abbf75b88691d50488b07f38abc8a6bab104
-TAG: a701c8a1a2a0182421059347df07b84f8055901ed051dddf5737bf24143e
-TAG_LEN: 20
-
-# DIGEST: fc45f684acf19a1dcbf767f671396e793430d7fc
-KEY: 3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cd
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e
-AD: 1063b0b4e6e899200304bd
-CT: 818d8cfb3cadad479e68b2ff3f8fc79e098ac47e2bd838fe955af0a66afe07b216f744f3d1192bbaded6127387742f8d45bcf43341a3f2bc9be47fd9ec413ab0e2afae4b34ddbdf97988a3a3af1b578095502f79189dde995b234daf811380fb12c60b0910ae663c195fb5a834e7575487f1c4453ae20c97b622bceb018623a107a26a9663a62b0ef0ea12e3d2cf37b4ef2770c977c06a17bd6fac29483f6c56d2c4b755e38fbace64b1ee521ca994b86d2b1f9610b7c46d1b65a490b56f4518de3fbc9337699a5c2c91818b8df531149f6fbc0860d5ab93abc5df22465aaf6207f28eae0792ceac9ceea56672262960bc6d821d0ca831ac1ce81dc1771f1ee8577fb3ed0b72a93b80e62fd3ce2afaf7668a0c4c08c99014fb254381e02979d69b2ef411f67d3d
-TAG: a7489dd0cc26b2ddcfaa1f7ceac677cbb88bf0839b9838047c
-TAG_LEN: 20
-
-# DIGEST: bea3f11679bacd98ddd996236dd603d319aafc6a
-KEY: 7d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed0
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6
-AD: e899200304bd3508132a02
-CT: 35ad27b44bee4b205fb9224755d1d79d5798db15916050287c9ec894e706331a290d0e32c08b5f417e1cfa07a1d176a7830e5aaf3cdedec5ddf4143cffb045f55cf7b901ce3de905ecb0a4541db8161082cc12b0872d3818e793a379fdb9131b3d521ca7d787360f830ce7dba5f79cd204dfff53ace458842153c3b0489ff04fb09b9f2a4ced538c64caaaa09713000ab48f0ca6b283d5a59a7d1845ef228261ac41d1a71a134d28bfdbb92b6cfa18258702e33f9be85f2848fe0f052ea8133468b70aa86de44adb5f31d2415bf852dde608f1e6673334416e8b17b3010dd53d95f9a5322e025a9b259f9cae0158f8864d98a8297e2a3140ea4ec962ae8c904f7a5108eea7583f13d977008d685aca7e8fa7cbe80645aa1a016e557a6234c5c96171c017b8f4ef1a2b9a66bc
-TAG: e7cb365011df84ce4c1bb1ad99a47ddfc2dced82907168cfcb15347115231c288f5de339
-TAG_LEN: 20
-
-# DIGEST: b0ccc9b5ae13a7f8a01100af61a34be7ef6ccf6d
-KEY: b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3d
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304
-AD: bd3508132a027d1ff4c047
-CT: f454347ba4e2b6254e66b97f8ac519c2e263ff43c65869553ba693bbb54a96c042228493f97292e1f5798e73c86ad8f4c521e0c4f199902e534388c9d5d2d2c54fd992a3e073381e0cb2fad75331979c76690c8d8c1bf3e966f7bb8f5dccdbede2f628618eba828c8336e2914931613e12f7ca9e0b674390bc6128f9e18f3491f98a073013d1fd78dcb4f0ae4eabc054f8935563353c4b6bb44c3bb99f76568acac0df85200987c67441d75b48312e98847301b3db282058a31f74197cbd4d1ffa6eb69bf67e9cce44512d35b9f141231424dae335797bbb16c16571fb607908324ab86d8034341e341f3a4646a2636ab5326bbf1a63445007fe8fe4d5279396c1a36d04bf97bdaa5978d9c4e598cebcd80a1a2f0045f1d0ae626f92d09f999bdcdbd889de2e4cdee882b757911fbc8421
-TAG: 312c1d345e3526356c9cf7e7bdc63b30d2adc79c33b0cc32143d2894b48fed
-TAG_LEN: 20
-
-# DIGEST: e2b953c833076a52442a7afab46150176c47b730
-KEY: 4706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a
-AD: 027d1ff4c047b3ef4f57a7
-CT: d8a6fd43a147414840554083c11d5fbe0b12d2298af893294f4273df0492f5d8bcefe2c811587e124d26f8cd7c737b2f848b2b25945d4f031db45794ee24b81103d172c0d0e457059eb972371f275a0c03737ad02b4f8526b32a39c460931f05914ab3c2a16a48405bc662693cd08e2d79cf722b9d57b998f318f25dc267395c195d83b32c87c8812b65b6db999d64560d8967cd0ba99445b1601aa03b290cb6803a8e6b0196bc9ba6dca507fad6e4041666735747f08f0bd56f1f5097193f373ec062750dd462d1d6e987999f7d0f06fc1d0144f98fd163cd0b0aa64f2edf9e29afb05ea1f1d055f740e162cb14466e01ba68ba9fc942a60128e2b6d58ca12ec2a905747c3035f7579a1eb8abeaff88413b52624f6372fd5f2664ba69e71b100178b88e365ebd0489c48bda8a4a490df66bb167de1f
-TAG: e77e14318d46c2bc8d71ede61ce63bf623a1f2822d78b8a7e70e
-TAG_LEN: 20
-
-# DIGEST: 8e84935ed1bb79dd38ae38924952e1105101533b
-KEY: 1c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2fee
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c0
-AD: 47b3ef4f57a74706de4b38
-CT: c2c1f17e309846fffa55e6fe4137029fb8506ccd4b238523812d61096c4a533737c22ef0f940f720d26563d2c7c90a48c3b4ecbcbbd9a641242a68b466f4eae6f663ddf27555b0b492419847bf333f815b7467ac4ee70ab683d37c1f966ee8d40d34c181ed1298d2084b634d4eb49466b21f39909317cda6a900925b32641184c4165cd3b6596806b6482c02353802e5ca12c72f111b0e0f7edb9c373124b5640e06d3163d4516a233db3183f67afeb3cd33db49998eea63648c69f441357f092b5dd5e5c3b69254640ae313b71e741c00cb9bc4944b1bae449fef8a32c08ecd316723a286d25598280a1ae189f4a321cf443135cab43f4721663848ac1373208a28d3640e16e792bad274b2d98b182455e56d27211e97b94e6ecd95bb33cdf8c42f04b5c4536ee4838c1610e90f312bb5b0a1de5825a261b5d089
-TAG: 67070bda84ec98b059629d10d0d0849495d1a8e0a5
-TAG_LEN: 20
-
-# DIGEST: 99ec6b669dbedbe99548117f37189e669fc5d8a2
-KEY: 101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed8b1153
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57
-AD: a74706de4b381c692ef164
-CT: 352e3b5b2a8a9552e0159017fd9ff4c169869ff3d1d900711d29889c4f1365b1e3d15c7162be4a1dcaa6b7209b9ea600916345cab1f2c1c79200826f180e1f7c92af192b92168c4f73ebf2a671577c5b995a26eb24b125ee24a47f78c94b48f69883b1ee5dd5c9e53835640066ecb26c631fbd18c41a67e59ede2d824e7d7f6d1ddcb14fcccc85a4faa5d46f91d03d543ff87989e8d1b3b2fd87415edc709abdaa7baa5e2a78c394302a630ee14e908fa8dddfe0c3b1830ddd036ad5e65e4d3490321dd450c01bb566427240882b07c0691f2f37c346845da3a8b50e291d5bf9b5572e72b7a031ef71f744acd6a3ed9ea32ada739184b6268954af35c6c293e64c83573e95b166e76ba981ee6f1723fe3865e0f17b28d72a869cc0cdf9c21ff97a11ccb6fb08baa5093f7acb55cd5c534389e1564b187a6bfb9cbf98044d718a
-TAG: 99b9c8254967607e0bdbdd2cee977c194e315505fd3dbf288be63c3fc871917a
-TAG_LEN: 20
-
-# DIGEST: b55f018cb06f74f0a9f76e65a23c1744ce7535e0
-KEY: f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed8b11534c870dc695
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b
-AD: 381c692ef164101b89b476
-CT: a95aae1040d61a7b44194c20233270ac94156ad0d735c30356beba1adcfa9abe3bb55cdd41a4f1a27446afd5221a3abca45d7b867a999d9cc1d89f19cc32907083e72c43f5e39f6b5d5682923914f4cae6fa0ecbc02c9d7c289c39a9a159b714c9e0eccc143b13fc5632ff079d4216b331617d2dc62ce9fa5da2b1c59f413d211022c79ac5550b0c7ae525e0af3d364138353f4ff208215393f5667359b2f97b5852959c6e4ffae26fdb93c1b15720e53206f2721c58c8a7241806c80163796ba087a073eaaf1cd3f433fa24518d0989607339c2d0df01ce1fba94f755ca5c43243f16035506bc7e69b21eb8d2970f35dd282fdda64736c92229254aa6b74e3dd929ae1cf9607950407b01c5fa0e9990488f5d07fbaef1062f51acfd745aa3bf27cfbba630aaf19d02aba5a55b95a6949ddb8669ae8b0f13453a905a43fb6f1fa97fe1c514
-TAG: 820beea65a549f03ea186313e6d0eae129bbdd8cd40f3ec88f3f63
-TAG_LEN: 20
-
-# DIGEST: ac3202e483c67fbcdd751950e1497feb3ebacf52
-KEY: 520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed8b11534c870dc695b814bdf1a8
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef1
-AD: 64101b89b476f72b27f06f
-CT: 458997cfcd9de1ef0222884a21e1af8773fc492139b15eeb31c48e5c32c918036618f4969d34c063cf759906a92956fa066d0045e8acb813081a55cef1fecb34178063b4cf6489b35374db4cb422b2f88b28fdba361550f087bf686ae0f7ebf4e5ac6ab0e4351d7682dbf825a79bc9a8ece0f5679517d33593d1fb9d1927e6f944a02cd2561da59f01634f4328423c7a4e1d1d57debbfca349e5fa1fd4735a87cfa8737ca4cc447d3249d6e1ab998f4efd62bb50bc079399ba250eb24cc43cbf3bdb30e1c5a4d6b3f679b742f39f123e75646c4a42dddc3714042fe0651e1efb0078a636d712bfe51208f8ed2ad86759726942a9026e5e158c8f42333601e9fd54457183a7253543f6372b57fef6dc9db5a655f37b265fbfad0693c0504038e36883d61e83ef9faff4a795fb21787949793ae00774cd86b8df51fc5492efd7800c223374e59adb59bbb6
-TAG: 9ad18f00aa5cfdd05b3586477d882fab3bcf49a0d900
-TAG_LEN: 20
-
-# DIGEST: db82ae5d79573da2bd7215485a92063861879c3c
-KEY: 71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed8b11534c870dc695b814bdf1a87bb1052c67
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b4
-AD: 76f72b27f06f520c9267cf
-CT: 8ee287bb4179d54a23ac238a457da5317d6f73129f16a288d5d08ce503395ec9354a9babe85135aac28e00fa66e16867a09e9c6c2366d73d74b80544b85ae48ade77800fc82a3ea14a7d645f0cfb19ce2281d2de096ddeb822d838123806908c161b0372771d9281f4471fca2f2fe6d4d33bd6de70b21bb66728f15948a34c756664019369efadeae8d84a777a30d79aefe978f6803c56ec8a2138bc294787a1083cb5aa0835585acd7239a85dc8b556fa78f64f45973e97061591f756069ed4314a2275e3a540417d87a2709b0d22a02c2d6f7a34976290bb83cfb64a3e90503879fc26fca103cf64f925a9c87848c736b349145d86351855216440eea3f6454e4ba4d7316662b04b4ddd0dd66bc99598f8824d062ba29916799859e38fe17fce17c83b83a7b4e90e6b112197724005a70f5440fdbcb6a2b6fe3bcd660dd7078bbbe6b1d00ac7782edbe62ae0ef62
-TAG: 94689a1c2d12a0367c1961cd21cfdfda24a5dbec4eaa3d68bebe6b12bcaefb1ea1
-TAG_LEN: 20
-
-# DIGEST: 902d703861f9872e7b6482f854709a214aa98731
-KEY: 9bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed8b11534c870dc695b814bdf1a87bb1052c6755a7a116bf
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f0
-AD: 6f520c9267cf71408a4172
-CT: be32e45e2b86ca112fdd67aece84c9a4ffe6f773b616aab51eaf3d5d9bee1622f377630d65b496169d5c724e303fcf652fb8275a6b6857768a067a77710ecefdf85666ce3c35d7f0b7394035f220e1d944e823bd2c43c722cd7a9839efcaf23142320d4fee27e0d5e4499e249b3b662f7cb24b48686d533f55707c7f09e70eec383bf1c022bbed0379d0892342914230ac0194fb067959abcb1b7eaacc4783ec10d9ff1ef334ffcebb468008e8f0fac1fe342ef71718731577ae555bf0786d2cbfd2a3c8d7043887a720e514373d248452ad24eb639b35564d5e0638ea4d6a560a4e6073a45d02c0f42087e430cc52d0536587696f694d05a73b8f61056fea619234673ebee12c82eba2a51e0ed0006cc4884a20da9cb4db5bd262513250f48ae4f86bba13fd659db46b38d155532f0c0c54e7a6768c169b9bb420ae0ff504ab632f25759896fe57e32775b65583d6c32941a529
-TAG: 4ff47a3c8ffc5ba8a5beed898ccb282d69807358004d87728afbd3aa
-TAG_LEN: 20
-
-# DIGEST: 4becd26b9b5c7bf831523f44cb72c8e50ff8033e
-KEY: 72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed8b11534c870dc695b814bdf1a87bb1052c6755a7a116bfc9095da49d
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267
-AD: cf71408a41729bacb5877e
-CT: 596949b6d943048a68d9c5e6f6b6b91836c497c3c160337f4b1a3ed44d0db20d00774ee636262481fd61e81d5717feec56bd1b2ab077d205b4c8ac78bf225da9cdf72bc1665330a87a31774e282b676cb1dfb857f32e56806c1d6049594136de222041d5316df307bee6031ee1de0251dbcce0c3fc6f121c0f5cd84579b65055ba71a429acca3938dd0df53647a4a4dcb4321a86bd8f96cca38814937d6262324e1cb76286858cf3c62e9272e1b3473eb7c75a60859142ffe27daf062d0e05b643657a3cc30a0df09c101079547005e22e8cf833e3f0a7c4609e3c80924a2e1e4f61c329b9baf20fcdd8662b6dbd02a4941c3e68247bd00aad3ec3c7d925cce788a05b2518e248d68337e7f9b1c8335fd8f7d0c0ec4454709495fdcf191086d83b71707f97bbb3dcb88a0dc572930ff27c0cd9b93ac1a962e54e726af68a2f1ff4e15cebb06a28c61c5492a08b3bb73f0f7f747968dc6653ac
-TAG: e1085cf56fd0172170fe14b89e755f8ae4dd3a89d561ff
-TAG_LEN: 20
-
-# DIGEST: bcf4785d0e3b34c55cb2505b559fdbd525deaac6
-KEY: aed06707a07c3dab699719fe882eee2fee55ed8b11534c870dc695b814bdf1a87bb1052c6755a7a116bfc9095da49db3d71f4b97
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41
-AD: 729bacb5877e72cdfcfa76
-CT: 4cef7dd855fcf77232ddf499ce5ea322ab0fc48715fb2dece1c954fafe396791c8dcf4ced2f3ae865f6e062d193509b264858dea3d05a13b62e9c958971040bab31fca1b748e05fca1967a5aaeb0efaa7cb2367149e0c5493d710f2862eaf2030a7ebc2566ed4995879cf27a58beada2a97255f1dc09e2bc102bfc47fca7503f39d04311ee546a01d3854574f389b013425ba1c2142b9a8654fd6bb28be2c4a5f6a923b23867b4c9e00463db4a1c774c101e08c911501853791ed3604eefb2057df9e6a522ad108677ba0929132f86357a91873d46d0d78d1e7278e9fe9e29e6c988b07cfef195953435f5a2004a05f0ada6f75cf6a63297b66a0c1cb574d7c87e99bae61a614e4ed5c50271d9f1e8d3c85393a4d219fdb3bbeb43bddca914eba85e041bce2b7a4b211c628aee1161e93fd13e1320c2e444b15bd7027bb40269e15712e1908f03f52658b85786b3378c4d3bacab39d956576fb8940481b1
-TAG: 0fff63bea1b1f0cdaf656dd5588b81a4019ca07ecc27430d947686fe19fa9b5d3272
-TAG_LEN: 20
-
-# DIGEST: 13bff121568d7c32b2546132cb4ad490cea9303d
-KEY: 7c3dab699719fe882eee2fee55ed8b11534c870dc695b814bdf1a87bb1052c6755a7a116bfc9095da49db3d71f4b975c5d503f47
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb587
-AD: 7e72cdfcfa76aed06707a0
-CT: 1a8d2a54eb61c49085190bfe8dd6c6423c6a6c2b147343f07746cf45c004e7ccd780cf0bf41d7f070590d1b649be4df0e9fe7df3919727f78966bcb5991a92016a9090c7976ea55a0ba039b416e61067ea414d87161ad03592ddee51d40d2bfcf53873c4c92d869af7614ae780814aa4aa12a2967cb8bacbe5d40542e4e8c619435c0daeb3b01c55a3eef62c633df798e2e9d7ae350a9a1e5aed3ddc64039f968cf9d918ec57cebd4a69b195c8bb8082fc8af05e5b577e886b7b258fdd7b60503742eec8f861ca6d8f7cfc5262afb97aed6205765e9d236a790680183fa10d302a92a2ccbf8ca3153882c829c1f70a449748a6e08f302acf9f8cbcafbc2d04fdbcb57b581e04d8c15120aff497aab1e8d3b4b2f30d9156a213c08692c1dc2273e6a9c835a962311e9a8855820600688d10e00861abbd63a43b1a5476d9f00c304e74cb254291c51a8d8967656efcba8b54e53453fff0dcb44fb53317611d2ac8bf15a0
-TAG: 0315ed24d43f8610403e7df1268a84c4c1b604e54b410323097fa2dfe7
-TAG_LEN: 20
-
-# DIGEST: e0ec91f0baa3c5fd0c50f135517909e26c204af3
-KEY: 19fe882eee2fee55ed8b11534c870dc695b814bdf1a87bb1052c6755a7a116bfc9095da49db3d71f4b975c5d503f478b22dc8253
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa
-AD: 76aed06707a07c3dab6997
-CT: f76b9306112d329d3300d7961db8e83a93de9a1de25a25505b428e14479e142012e4d140bd327cebc7eb5f45681d863beeee2161e0eda1d55f20429fcfeb104010d3db857a7edd43453f0889d8a54f97eb406cf4d0d57e8e86562c55ed0ed4ca292f77ad1362ac5e154b768926aae31f9e2b7f67cb4d6663fc44aa9249604d01a767b7bd32d2124644b7da4c08a5dfbb17ea57c0b7b757cd2719030371112da299f73159f436e39bd3e18319724ea2b89cb82ac19be902d1df0b0555d5c4a375c2df99585defa395d860be8ce4693220da4bac58584e35f4f46de3de7d8538f11c20f04ccdc9daf42abe19f6a4347308ea00bb764e9f44fffb3bf7f7cb0b8d790301dd47c3d823346a01c68287ca3a4641290c51749ea2d56d87fb6abb533283e7f67684069085c16a9be4b38f7fad01c5f8ecfbd4a2ed75f79f86868bdeb7bd4f964c19984c3d4db3f54c25906ef9f11ca9c2852a4c1279d96e07880be6aa2e1bb5df14a2d8812a
-TAG: acf9ff7129a4ef26ea7f17cc78c25903cca527d06af831a6
-TAG_LEN: 20
-
-# DIGEST: ee7d6f651db434a281b5cc57c2c418db731c65df
-KEY: 2fee55ed8b11534c870dc695b814bdf1a87bb1052c6755a7a116bfc9095da49db3d71f4b975c5d503f478b22dc8253bee6fd1b17
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707
-AD: a07c3dab699719fe882eee
-CT: 76f61331693fb10e859759bfcf1d105cf9609cb381e016502aaadd2db381a27ae8065064ac38f329b79861d6968ee1e1ccc8bff41bd8c38e82c91e813caaf1db5d8cd420d67e58db6a8b6b8b65566f8dd374490d28f0d33ea88bdeaa1fcddb4ce77fd96c72e5e646c5e5291db6a376a87b0f54c5e39b38f26f367807396ea8b11a6fac2546bf5d574a59b48c61b7749778cdeb52acdd54baf61f19802ef03a322501031c40930e9160df61a6946f6782dbe6b917c2138194a111e0501b775db1a66e5c1a5df5c42f58058b9868ec525f8f45403ba27f1f8a8ae9728b2ea140a00c822cf434e41b3105fdd6af4c2162376bda1d3bd5938ff9b486a11ae53c243cd4e97c0f632ea07099c1a23bea9b4571294ab518250a3570c1ca7fa01e11e1e245b15e8c266f9f03142d0d16cfac8dfa4888368082c6ec86e652c8f1afcd32dcc95b3e2cdbca6f19887b124a3c205fee32595bfc933dae224e2df5652c772ab6941a470386e14224b565639abd
-TAG: 8a71e85da5d5e89fc0f7b0aa6f1a6761354c3d7be6e00f6db3c79b69d91cf8bbb13c5f
-TAG_LEN: 20
-
-# DIGEST: 810e1f01bfcf6bc13ebae7861454ac133b2d6cd2
-KEY: 11534c870dc695b814bdf1a87bb1052c6755a7a116bfc9095da49db3d71f4b975c5d503f478b22dc8253bee6fd1b174c307f01be
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab69
-AD: 9719fe882eee2fee55ed8b
-CT: c76fd203ffada1af37acc360b1d26ab9364882831ee2f6ee68332165d863704db18ef1d5921b8134ba1a9a16d4da0d47670b2f5fde4d1194d8b8a62ba57f7e628cb144d605b7ad561ec0c66e3e7cb8d782723758e0dc2afc57c399d440433eb911b6dc3873adda54e62719c0e345f083e88797321232960c2c406776b371a64bfa82c96a49f07223c3cc8470aab3a7cdabf43c06349f0cac94a61e2503280d869b92ce7f88e281caf490e9edcbfffe7a7528669d5ded607e7b51681b06003ff061bacec4bff3a4c43ac3855142de282584e76eee9d2af0a543c7783fef1af169540e712b5d373823f1c31d1985f3edd2685edbae95b9b095d82ce7d77a79f406e5b44e7784c2d647feba197a9cc44271938ccb5a11e962d188d80d1aed890499f569d14772010ed7078518a196fbf2110bc5bd0397ddaeac981a00865ae4255f60b4660b67a828d855344e5dd0db5df6587cd8f8a60fc652c4626a9bac41bf28f6095ec6953e7d2873ca3ff14c068d259585
-TAG: 80513d3a7f34ec7d3ff7d085062ebfd5b6829f69086235eea68eb2195e08
-TAG_LEN: 20
-
-# DIGEST: 881551d50a849b7e81f0cc0d722f631e32a4c97f
-KEY: c695b814bdf1a87bb1052c6755a7a116bfc9095da49db3d71f4b975c5d503f478b22dc8253bee6fd1b174c307f01be95abaa9bee
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882e
-AD: ee2fee55ed8b11534c870d
-CT: c5a11b6948d9ac5fb184b7df3ff5260b03d6e6c1cf5830a1bc378de13e91f8bab09c96aefa60948ee51035bd24f3dcc0982a385372b2d30aed79b321717cf50973971483ccdf8121b5117c8930043dd229af9fe9b84fe817cbaeb1fc306fffc61e7e5965ea8367e42f91ebdb969b74300b1329e0b41bd94f6d5c53acfa55d088daeed3777c42d01ec2e53955c428a15e48856d6fa774788b1dd591d45397f89b6718885e02b4635f48078f823d2ce914e122bffc007d894f3a50aa399aef33b8255e4b1f84ea591f1898489516ad6a3f4a62275578fd9aba2203ae079f60743961426c5245ae672d01bf294ccb5ad36da0a0462db05a88aaf16670d03179a6ccf06b5e872d743e57c924d2a2bac38abe0ad23b44ef0a15839c095ab7467a5d10efb16bd183b5766bc51eb9c7ca8ca1e2bb94a1b54f8e80b37b7393bb207d7fd79c01b09943145dc5d603247ea08866f3b8e419e9f04e55f610e0c4491a281af0f15e11a863ee747aec65f65da5ee7b31fdfa8a120ee4d2
-TAG: 9988e65757069fa6ca1e062a9163d4fcebea3e7220258682f8
-TAG_LEN: 20
-
-# DIGEST: d525f72dbdbf54db80ddeb9c2a84aca41451353e
-KEY: f1a87bb1052c6755a7a116bfc9095da49db3d71f4b975c5d503f478b22dc8253bee6fd1b174c307f01be95abaa9bee5857772305
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed
-AD: 8b11534c870dc695b814bd
-CT: cc02b0c77ad10d25b9c16911516db68583194f48650131ccf55d29c35ec9d2de2b3d3ea2ee9937b6a87212779560b4ad9cd49b84304128329587e5d3abb71402d5eb0411f2704816409b2ca24f9fb3f2a4cb03e9e74ba1345a60bf6577159c8fe82b7747621311eaba3e43bfbc688edb7de11603cfd13ace7ddb6974e3dbd2b20e86e4e35e006ff87c06ea69a6e6b8cf2e02a7ba0210e4d10a474a06ad9d75559c0b9966811f94d5c209eb74e185de3bd1cf4d675de9abe7b2f11b907fbab8c128fd1fbeec0697ce9d2ad66e600068037a6a89ffa19b3c66d146655acf93028693a3bf0c86fb704927a9b10ced07f0b6cbac917f873a2e97cabc8b6e1b428d4ea4453a42d582e42e5586b7ced5c187085b1113ae5aa699b5951c3aff18bc1fa6d4c18e075c53ce657af855c4522a0c3d866bb7b0592ee3e04676b433b5f1097bc1cfd119c3b9f5af2fb69ce8200a8188dd4ef0d880258bb60ff2e9a276e7f1fb89372d835c32cb577fad96731b0891d9a23bfc4fa1bde25e187dc96c
-TAG: 5007ee0a1a26c37857e867ec5c207581fdc1cb334fe2cc8adb94874c2566875c90d87ed9
-TAG_LEN: 20
-
-# DIGEST: b25882426b4730205533cfccc0da1de1f6f2c459
-KEY: 2c6755a7a116bfc9095da49db3d71f4b975c5d503f478b22dc8253bee6fd1b174c307f01be95abaa9bee5857772305daa4b550d7
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed8b11534c87
-AD: 0dc695b814bdf1a87bb105
-CT: 152a8f32525deb44c4fac83d46a32177d6f70edb8b7f5469ed5af0aada4b68d0c95c6e86293e40c25fbdf15570aeb42f3d1f055fd855b3115dabaaa765c5844e9578d8ee9f63c8cb21b181b556b8b687ef856e0cf059adf1d51064b7390eb95b32e2ea25308b4a04921d55240f64a5767fabbe3207dabd28b5f442597e75f3c6a1c6a26f0b44c316b0834f47f8445abf978509fdbf7cc65bcacd655c4eae698e6cc605a811c56a4ce31f38b2d0114bbf32eb591ad08e9f64434fd535bc9b73470879eba47eae13487edf13423b898e00efde2ff3f93576eb6f8e6d9131df10998ceae836310d4000a5905ede4db0c24b15c83d3476944f19eb7a4e6a493583f13486e5cc1604e01c9f6b47d728cb5dcd40d581db1ccc263ceb23375402395898dc26eb6947600a006294e28bcd1a70a2d89c1d1fc5ca5e6e28c16bc26a1fed1d8ec85b0daf7d4a2574c8d6bdcdc9fc4cfc37b79281e1470eae42846b223e303e004afa0d0f811c81f1da124c92c3d123284fd2199b645b6c7a86742d3ed2d5de90
-TAG: 0590d1b96aa2cc86a542ec54cc7524500c7997bf02fd492b08c0262e2e95b0
-TAG_LEN: 20
-
-# DIGEST: 939442486c730c2cbd8df213d81310e50534f06c
-KEY: 16bfc9095da49db3d71f4b975c5d503f478b22dc8253bee6fd1b174c307f01be95abaa9bee5857772305daa4b550d75f05d80898
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed8b11534c870dc695b814
-AD: bdf1a87bb1052c6755a7a1
-CT: 4d05fe0669ff88fb0fb4c053661c7fcbb79942de55c9c83648990903dc2af904086a05e683f71263d3f471a5c5f60cfaad78f79acd972c85f25ecf41f033b7fd8ca5fb13f011ef27bcb27bc10ed9f0ca233f533eae78e95f7dee6dafb592c66209bc946b745ff843544182b110540cc33615814a779b92ef8e69394d046d773086a29b3c7d70eb18d580915aff1490681e78efea704f81e2410617d2d92d2c62dfd78d8626b67b1800695bcb979bd6dac36bd4ad12073eeb0a4bce6026d02f92862392e3ef81653b6b28efca81754e99112e66f12593766e9153864fc7d6ffb46c0c95744d3a96ec069c27760ab353db33492f195d49147b6b166f09e7b0799ae329b30b60318ea4adb91fb338fc82bffaf47674b5d6e0847b317290b6ee46b43ffd5548c2c2c36a04971d6490019ec83f174ca095d5a983ddd5877927e5d6cfa62992327afe6e44e072a18a122de78569170e20d36b63f17049cdd01da3fcc50e4915e6b1aafbdeb0e5da30368552ce66a0bdd318deb534eaebb441111579c273338cfd9f55
-TAG: e0479da82b12a047d37ec97cab3d5f09a0dfd19632841cf1eac3
-TAG_LEN: 20
-
-# DIGEST: a7b522c0de411517839342925e8acf703ea12e8c
-KEY: a49db3d71f4b975c5d503f478b22dc8253bee6fd1b174c307f01be95abaa9bee5857772305daa4b550d75f05d8089850fea37112
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed8b11534c870dc695b814bdf1a87bb1
-AD: 052c6755a7a116bfc9095d
-CT: e0015fea482acfd931875e6af31a81f2dc31103849db0354c7775ddbff6dd3baeab029bd6863b5a3e0bb4b3c5109bdc1d289df63a2b6a577e3c7af1000a16faa2a4acda887f7563ef227a214ec4343840058f94833f9ccda64ebf7e14358bdcf1224aa7e79153d4c128c13e23b5c41e76047e069070e522d62367a3dffe2418e1d2ea71f84f1c032568a8ba19040b1e06d0302fbe1b95298f7f16b75211f4c45d0015e049677874681b309f9115b33812e57ee411c43f8bdff6455368985b2c3b455c762761828e0a952cb2f51500317f95968eb275f52f66c80fcd1d454e2bd2b7c51bfb0e84cd5f8f1d2ee848d6cef1c2b382f73aea027a71dbfae5711a6a6b60d67747115bf138c7e88bbd5eeed3720ae5d9a3cd03a18ac7ad05ba0aa850814060964a6f324181c26257522e7e9db8848f4a26c13eac3f71132d82620d4d7bdd7a6b13edaff628a41a05de3a24ecede59960223e1a296bf1d22e268632f4e1cc4044a7548531efc9c8dd7488fcdafdc3ff6c0d7f664f537471695875f9da4f90a642d0134bb4659c79f
-TAG: 9703ebaf5b98044e677ba5ce1e5155cafb39a4ad6a
-TAG_LEN: 20
-
-# DIGEST: f61096694be30b85b6571dfc8b5bfc4d364bd225
-KEY: 4b975c5d503f478b22dc8253bee6fd1b174c307f01be95abaa9bee5857772305daa4b550d75f05d8089850fea3711265bf782610
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed8b11534c870dc695b814bdf1a87bb1052c6755a7
-AD: a116bfc9095da49db3d71f
-CT: ce8e2a194f41ff1b79391f55bd476fa95060f706df76ef47dabf84b2c8c5c2390e2b6e95d299cfc316f0ba7df1ed7dda7ebcff09fb1928a341361132200bfdc5ff36bf6260980569edfacbed09160c009405b412373e8102709e0107cf4292efc32c6d7991df26bf862e36bac504341916b6b2378bb82500e0f1a323d6e668acef8cd24b609c66225d4745afd2ae547793206d0e76cddcb9dbb22854508d7e16a7419a63a1d6fe6c2eb353dc7802562b83adede2fcfb02ffb63080d4113a0f011659a1c243c3ae834e726f2d4ee202e82d174cd2df26c35e157ff3cefbdcedf98dc438ea8add64cb88cb0ded1c8873673947e5698cfce17c2c20f8570241a855b7ffd0800626e4fa17ef59708b7968676076b42e4816a276dd0a0cf7b7eb0624aa4fa8c2a05e11742bd1a29cb3a4cf3a319f8c66874d2fcc7018bb32fc8e51ef20e410197c3a0173e22bee6307b732be8d610c1ea994895c20f45181b40de55c04bc70e971821d5c852802fec021db47d2d7b8a3f91f8b21b2abb3b7e89e6e181cae3baa1bd5077b749316f78fc44c8c
-TAG: 08f6b56fa105e8d5c3d5a52f4e3a66874f74cdc4f9cf304deb02040eeac9e72f
-TAG_LEN: 20
-
-# DIGEST: acd9a5179a0ec782a63bc824188d838776bc1b81
-KEY: 3f478b22dc8253bee6fd1b174c307f01be95abaa9bee5857772305daa4b550d75f05d8089850fea3711265bf782610460bfd24ba
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed8b11534c870dc695b814bdf1a87bb1052c6755a7a116bfc909
-AD: 5da49db3d71f4b975c5d50
-CT: 8a610f075d994055451e514414628e2c30d72d5567cfb3d2592ffb1f4a85d553f85563a0352381df79ada451e8d6ffb6939edb73f57919abdbf37da41a3db4bab0406a73c6f61b84581c824d72652c36062130edd4673d0cb22c009fc67dbd9eef0365a67473e2672d522a3753b33ba2ece80974fd9550b667e8c942afd6a22924100b89abf9901053d5568197e9a11c85183f45385c2f3b887d78b04971e091a5d2b20dea01b60e61ef687c708fbeae417c99522e23dcc37ac2a23b785a6bbdfd41937f0e40e5835587c72118ea97f57c539451ba7bafb844b8cf3426ad973d8ddbae7a3eeedc6f5dc77ae6e05a752592e0d2ed0bdd92770952b0c11af898180767ccde0081dcf8ff748c02206ede73dc32bbef560e507962808fe7e6f3c130460d975757b6dfd2449fed5838bf4e3140bdc83688b156c22cb32f1b41aae2e53c66c06b81e85fa17b45763507f3fc9dafe4f0d8b2d71d4b4e645ac5047162988e3bb342142112294155dc646646c4bd9bbcae5238b0d8ab782fd7e4ffb383a4fc48523b8d28258d3b42e5e02ff3120d025e5b9097
-TAG: 8a7c839811873d4b04e948b26a3acc920035433831086563526a6d
-TAG_LEN: 20
-
-# DIGEST: 152118d780c866c5eed3a08d2d9960cdc5acaabf
-KEY: 8253bee6fd1b174c307f01be95abaa9bee5857772305daa4b550d75f05d8089850fea3711265bf782610460bfd24ba022e6da12d
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed8b11534c870dc695b814bdf1a87bb1052c6755a7a116bfc9095da49db3d7
-AD: 1f4b975c5d503f478b22dc
-CT: 6ee0912f8730e5e8fe419530addabe3c51e95d2261b032755287969f8834e473226e4e9113c586759fb812908a64c3ee020f4d15010b903b4c5e721cfb208eebb3e58707914f9048b9d89d53dd80d53dad740394a943db83bff6d27980ec681c7b9ffa80bc6464c71c0c807a7c8e445fd94edf77270e79080cd597ea69dc69617b9edf3d088785a47fe0b67188a2a058205a166e3bf8f61246509adc0d1d833f1a96f09970aced95a110946e68cb56ac439a2a850f97be36fbb4857c470f431ee6be051c9eb7148261e52889a789b14ac5d6009d925674ac8f22b46edd8786ba24ef920aa599efddf948a62496dcee2d453697e320610bbb3cfa7e657cab4548b92d0f40c7c927761fd6ab1cd50b9bd941768e7147515dfb3ed5a7e34440a75a6f9119e7bd0cc411ba3181adf38252230b73823daefa3295b71e2e967ecaf7916c1049f3235fc0249ffd7ce42563c910756eaded217d56e188738792f03938901caa6b23a5b1261033fad3e9743ded57121945f2f1086e567de844ff71f88920ff3925bc28055f4e9fb3b6eff0adb7d94c3e45c2842b4cdc6168
-TAG: a6c9db0a3a86abd5bfd20bd9cc96063d04791e407c80
-TAG_LEN: 20
-
-# DIGEST: ca91b15125e07b81debf75ff84e7eed4da5808a0
-KEY: 1b174c307f01be95abaa9bee5857772305daa4b550d75f05d8089850fea3711265bf782610460bfd24ba022e6da12dd4c27f4372
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed8b11534c870dc695b814bdf1a87bb1052c6755a7a116bfc9095da49db3d71f4b975c5d
-AD: 503f478b22dc8253bee6fd
-CT: f39aee42285906c6ac413a75c9c35aa8990cfcc1404672886cf6b2c26013396c95213823f09d2f5ac5ee06b500caa7abc0bf72d1f00ab37a12daee95a9a867e570d6659dce22f8b4bf6e98964349cd96ad2c2adc7261c00732729d4e4fb1b70ca745ed300a8b75622296bd4fe6b2ffe5428b42bb1f5ad709a868a5fa4571a6dc6ad44c3cbf292c961bd18dc23d0aff520a344f3c964bdbd07add2af0bca8355a3f71e4a11779b8f0ee7c9ba514ba10a7663ff30c347f96902f86d77deebf0cc8b384382e509b2114c0fa9931c3c28d737a7f46945cf9609c7cd4143f0c62e5510aa5cbfea578a5e8f6fa2e4235b13ee4cf2c90666ba7225b042ed15b84124d53b14395574960586810e2cb6b03d65817fe6ccfcfdb98b35e94b0fa076783b60296f6bad6ba20e12dc508e1f6ea9e4fc9a50e233650d997ffb17792fd8803c7515955da482e62e18051311fcac5b6915d814ec2182593ef4b7a6f7d4cc3b8b65470a7f16180d54164ab0bbdced684dcc5f7a1f061e755d801364097d052234430062640edfd0a122e20877d551be7a92128c1ece727fdc237d37af2ce223e5d
-TAG: 9ab881694f96395be0c06430ab88f233b90e833d3fceeccb3b8371b62868e99647
-TAG_LEN: 20
-
-# DIGEST: 93d06638fe1e836ecdf5d30db3e4fd0660d9d701
-KEY: 01be95abaa9bee5857772305daa4b550d75f05d8089850fea3711265bf782610460bfd24ba022e6da12dd4c27f43724809744548
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed8b11534c870dc695b814bdf1a87bb1052c6755a7a116bfc9095da49db3d71f4b975c5d503f478b22
-AD: dc8253bee6fd1b174c307f
-CT: 8693a4385e2082f13e0a89dec1e8df98242e30d84d9b0a1fe5905201846bbf34ba9e04afd3fc9ff4ada361cbae026a0862f7bdbfbca6c895ef0977852fc79821942bfeb89e8a51a46e99726ccd7d2477b683cbd9350fb9ea0378a543b70699df0bd9f1d29262dc6a9a116d8eb62f3fa7237f0e098e713ecea3af72d9daa702cd961de566f2ddf91de0e5a5d1bbfc0fb508b6b81c27190f4f1f05a8554ec96dd63cb2adbb10fb7e6662422130ebbe7fe36cd53bfd9cc7e21d1777c9347c79834f46406e409472fb747d20ad0ea516bdafa838adfa031e0d10415a55da4a46102cb72338922724554c5f5a632ef40827337695295c3bafebc537fa88d1f648d5c459bfa24e4956bab52084f8c0cfed8db6ed3d4dfe8f21268d5aea323d16f10ed304ba909d816ff848c1bf643f0b3926e23a39ee79acea462d7ceb91786536814213be4eb44e85d540af000069ff0c7b533d7f614093ec4b327555e1e3f311fd38138fb47c509341142578dc69b03161f9beed51708f7c7e14314f48a8f10a958179b189d27ecd1c9d80aca2d5c87d68f3b785a070e6922fc7b332bb9574c515d0e940c01a
-TAG: 8ee8037916b472d567f5ab24e993e303144cfb49b62486bcff710dd0
-TAG_LEN: 20
-
-# DIGEST: a12c8aa71387379d0e43afa0321979e018d56547
-KEY: 9bee5857772305daa4b550d75f05d8089850fea3711265bf782610460bfd24ba022e6da12dd4c27f4372480974454879c41de9ac
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed8b11534c870dc695b814bdf1a87bb1052c6755a7a116bfc9095da49db3d71f4b975c5d503f478b22dc8253bee6
-AD: fd1b174c307f01be95abaa
-CT: 0895c823437435ba580b89e28d667821b5bfad60bd76bca45bf922c31cc889f51abdf9b47aea2b4f2c5459f38e8e5e35d0ac624bef8dd3a96a06f3491ae629a05d15df535e1f2f1dbddd22fde0ff631fc298fd4f79a67879f4367f4e5a372df8b881b32d88057357ca1b5fbcbc7efdcef7e143d4e1ca35fda0bc19fc6da65f08fea0a381c4e93d5cc7c7198959cfead892f8a167631326da0905bd348faf7b7df25b621d7b7988a7b062ca6ff4c7ce931a901f2d509aa42e9bce1f20e68024b991520c43ee2d8689ed7e1a4f14f53b05566dcb9487787243f11beb5dda2c78b145b47fd4c13d6589d42c7e504c55d73f1bdbe5fb4a500a57001373fe772c2211dcac1eed0004634ab851f2e58b0234e1aa6d0d50c45695fa8cf24b1b35f2ede35406927e8101395910e865a3c44d81076bb246c15715bf21e3bc8a0f1ba0221755a17d5e4d72aab1a227818a7009fc4d4695a69a28a328c60903595236de7470a7af21bb0748ab7936f29cc5b0198d222c69800e0229e041fad4393bc16f28025403f209e0d266271f232ffdf89808715d51128514ec1936c7c924d58fd7521597fa44126d12b11d4a
-TAG: 54fba9cce3639ceb31a80a5ae5ec4ea7160421c604a532
-TAG_LEN: 20
-
-# DIGEST: 8a524c3ce814e3059b4c7a6ac748783ce1385c68
-KEY: 2305daa4b550d75f05d8089850fea3711265bf782610460bfd24ba022e6da12dd4c27f4372480974454879c41de9ac9f98233b5a
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed8b11534c870dc695b814bdf1a87bb1052c6755a7a116bfc9095da49db3d71f4b975c5d503f478b22dc8253bee6fd1b174c30
-AD: 7f01be95abaa9bee585777
-CT: eab2468c2d5343dfcb43ff97e68caf92f032066f92d1f918ab524c3c89deefe814444bb6c24dec9dc20d59a401443905c653bf42ab7a67d041bffbc6940b5fe55afa5e15e748e779f6023b797b2b1cd929277bf6b8a415f93566fde4a773e4828aa0704caf46321d48332da01c7cb8b6b295ea13d9a9855a9c9499b5ba38370b6bfa982e3538302fa4ebfad9cd5324fed77c8e70437818ae275b68fc029d2caabaddce7dc50df388fa986a985e2df6d0450c9a00e16005734c7966fb7bbd7312957da2263fbd88a2016134aa45ece2ac93b47151acb0e38ec653ab23cd6003104c2ad254ec98f64a7a27a0d7c58f35e548ab6a291ee927190e7812c7a71a71d765943fe4fe9cc22a987917a4c35d28e25c8d2e0354f17a0ded0e61dc6609e8ddafc512306e71d0e8bf2cb3a04221b6d1721da96836e8f155ee0c3461a1d58403f8fe7ef13e5babcf9fd9d33c59a1aae25b082fce0f3c5299df0b83714ae9196dd809b750e9832702207fdcefc011f4107cf8424aa29552d3307d0e4c14db84751c086275400b5d3fe6eca4f5499de1290d34894c45187e2dc33086ff93feb97081d300931323297a8f1b93b41d97
-TAG: 3c165d9a8c85f4ab226939b775c48cc1565fd1cd6117c864bc0a9b7ec5369e66cf35
-TAG_LEN: 20
-
-# DIGEST: c31dae836928083019ab6902865d9f14c88fe27b
-KEY: 50d75f05d8089850fea3711265bf782610460bfd24ba022e6da12dd4c27f4372480974454879c41de9ac9f98233b5a7379a56179
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed8b11534c870dc695b814bdf1a87bb1052c6755a7a116bfc9095da49db3d71f4b975c5d503f478b22dc8253bee6fd1b174c307f01be95ab
-AD: aa9bee5857772305daa4b5
-CT: b2a0474f96d94bf836f29da058d80da84d60b11126b3a9f8f6975def0fd2b2ea22f1c3ebfe8b9421155c364d38f24ef5e4e4440edd34113008e29179fd6637d6a0b2cb3b6d50a7cc3c4fecf56166b5a4a59eda1fee7ced7541e203fa9e07b2d43e136ffa3ef17eb0a59c9d333f38a4e7da8c5416f537c56cb30ea671674a7af92d966ba6d2d320c04791514815bcb6da500b469527b0eb66e825d81bebae70c376493846c41ae85c94318750a499f30f02e18eb4a722c47e80c08cc7b5f28bd7e9fc7ce71c38feb46aba20539716bd224d26e482b352fa1bc54a987d990b330f55c3eff7364247cc1d4b73dfab96fb8fe21a6f61a7de4bcd27806915bfe89e6708e2c00249bb847cde5056a468f94d6383a0ccab628ab96ef47b5a7b5e645f35af3159318bd913368bf276bd15a6c0981462ab7bbdc39246c98699c8b8369781277a58bc2a322f31077dc71a2feabfd900fb5ff851d07a2dd4b72a26c8e2a1a9787b83c13c4eebf0168828dab4636e7f419b72e7fdf482a9821d7785e18d110a5555aabea1762be06ed15a3ec1a42480bfe53cdf03eb1ec0fa75e5b2aaabe7a63beefcc4d059c4402952c97a8857b89542c84f
-TAG: 525a996312ec2a07812cadb094771cf21fcea2209be5a6a6bdd550ec61
-TAG_LEN: 20
-
-# DIGEST: 4b2db052fc8a09f7a0c26afc66dbcd8ae5c9bf62
-KEY: 089850fea3711265bf782610460bfd24ba022e6da12dd4c27f4372480974454879c41de9ac9f98233b5a7379a561792c0f311643
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed8b11534c870dc695b814bdf1a87bb1052c6755a7a116bfc9095da49db3d71f4b975c5d503f478b22dc8253bee6fd1b174c307f01be95abaa9bee5857
-AD: 772305daa4b550d75f05d8
-CT: b5791488db7390a80622777e45f78e9154bb13e4da959bbfb824460bbda64f776864b921d07968201bbd570a5fce10d6c10777bd237130821c0df9a0248b604b9f814429a2c435b3154a2f05cb237a271a2f949c9e82f8d110524a48531cfdedf07fcc08c88d3a90c6852c0d91fb4c847dc6c69fdc4ce1c684763892b09159de9ae8b57720da5a949c7e46b5e34739820fac62d472dc50a3ccde3c64fd47d398c07372b0a37ddb026dbd8c27d698716f12aeecb4b1dd3ef3411ee6b71d519caf74cccd225c2d445c469503611efb27e3bf9f27d74fa796a07c8acbb8f6d8d567c51891a0daefa7b7e948d3292ff927825a08769492ed47e2f0f54dc2cde68486019e7ee93cdcc39305dfb388156ca44d1e22a16083168ff74a647424afb0c8ae7e589a68bf372b49ea9aaf0e58690cfbf8d014c3682588a1eac2ca6663138b35c7a76b7c099a2e4ea0ee4965ea3ee375ec279ccdff3d38a342b0130f2c962fe3b0b54185fa7dfcc59a783913557afd00f5f9ed55c3958eb5d1899ae70f3057e05662881f369d9816b2e86c8cc6c40dd6537335728443e2cbbce66ab22e86335c7800b170cef707364a93472c035542489ea8681d3647d2d6
-TAG: dba0df4eabb18212526497bad9f0f8f25ec9c1976f82bfc1
-TAG_LEN: 20
-
-# DIGEST: 881926d37fae9095362fff56efadd9fa3c455ebd
-KEY: 711265bf782610460bfd24ba022e6da12dd4c27f4372480974454879c41de9ac9f98233b5a7379a561792c0f3116430e8b6ea058
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed8b11534c870dc695b814bdf1a87bb1052c6755a7a116bfc9095da49db3d71f4b975c5d503f478b22dc8253bee6fd1b174c307f01be95abaa9bee5857772305daa4
-AD: b550d75f05d8089850fea3
-CT: 33e5dbddc7a3d14f78529c8b97fcff71b6d4e93354361f17bf9243c5cb1fe26577d8b2dfb5205f72def5923198e294294a612bc2064380fd2e7367a84afc10b7db41a12d38754205937444a08dc11bbde5565a8e103eb305f85540405966d6f3760096c0b54bce8414dc539c91da221943ce0327516a5e8f4aedc7997a64a7bad0f315dfe9b8472f934c67efd104eacb2c3ed3c1efd8949d66033e297cc655732b781399f215463a8c053ba05b65680166d7d5791b39e4e88c82a982bfd85061bdcfd4b52864a0e9efba5451b5aaa9a1bb3d59f2cf9214c994afdd87c2ae389d095e380bc33d66f802f635595da58e2ce0e1fed44032c940e6c1ead3c1b33d820cd8a754b8592a2f16ccf7751a82c36da56b5e6b5ba588d33068ce3e7f4e9de1fc87612b55c44b61fbcf6507e660e3ae5f56fc3cd751f505a854636cb87067ced759c1136325b58cad2a2558565cc7aa006c9dd88155003d5dc1922177bb61142da62844956fd9d4b60fbac403d5a92b122e8f63ff4ce6fae70fd824322d8607fa59c6b0b2134d8165214d41deba7d28f99e7fb19e75c4358cade4b5d478aaefd957cb8698598857f65c382148add2d90c6cbe34c1f330f611b7e8b265
-TAG: f936b75a9e3c18e6fbf320eb09bbfeb26cc01704e704e1f22c60cd5bc5ef1b4256f89a
-TAG_LEN: 20
-
-# DIGEST: 92d143942e6ef5b44ad7a4b8e71c22f1ecaafffb
-KEY: 2610460bfd24ba022e6da12dd4c27f4372480974454879c41de9ac9f98233b5a7379a561792c0f3116430e8b6ea058c4799eea80
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed8b11534c870dc695b814bdf1a87bb1052c6755a7a116bfc9095da49db3d71f4b975c5d503f478b22dc8253bee6fd1b174c307f01be95abaa9bee5857772305daa4b550d75f05
-AD: d8089850fea3711265bf78
-CT: 93314bd06e0f9511f8577aed88d71c6990fdfe4ea3564450cdec06392e1759dd356827fdf82ebe96ecad77f2da1ef961e601d93237ff515e46b00dbe0b0329e17bcd2a386ad9942f678f5f2942b73a39e5a7de74fb6f22911c697babac2b3a29ae9534dcf2a262227066574bf830850d0993baced9a839c80159d7d91724665e06e22268106e9eb4c99ffc7b2529be6ce06308e064e69cb712a473b25e6f84f6ed1fc72075245ed6db6fc64eb5da492fb8fa4b15dd4424dd2858e1d201044dd147b08adb4a76b63c3fe2f4c0ee49dbf0ebb1b7651be3f28edb38418b162fa0f8dddab8557e55e32b63e2e8fd401d3dcf0454ddf995a77980dd131fc48f1299a246680983d4667eb1429e55779da5c8c0e34fcd79024894577d24886a1efecc6ffc1daa6ca1c9ad7c7bb4b707f8cfd767085496145b2f65b6e755359150da8f2d5c751dede44dd061fe40ad76a5dcb509b593779cb6c8536490079394536a25442aa1a12a0d9b75d5cecafb9ebca23eed3489ab975b9442ce706511037271bd022d4bb69d75ad93683764d40b0135c85740348ad6142e5ec18888304375cb25be53d0b86bf2782c8e626b7b20b2cb2907334e95037f298271e6cb3456fc322c384d94
-TAG: 789413ce734326aa07cf608624f01bf72a6f7817b28198605cf6b6378e6d
-TAG_LEN: 20
-
-# DIGEST: 7fcec4927096421498e91df912cfe43b2e971d4a
-KEY: 24ba022e6da12dd4c27f4372480974454879c41de9ac9f98233b5a7379a561792c0f3116430e8b6ea058c4799eea80abde04ee1d
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed8b11534c870dc695b814bdf1a87bb1052c6755a7a116bfc9095da49db3d71f4b975c5d503f478b22dc8253bee6fd1b174c307f01be95abaa9bee5857772305daa4b550d75f05d8089850fe
-AD: a3711265bf782610460bfd
-CT: ef33a63fb8fc5b6a4424fa6644ee0c833a6db43d65f67729378d77ab88f73416f6a63c2419bb6ffdd2378fd5280aa0bc6fd34bfaf7687f9697d0038a0e509c5826daea0c2a3dc41352f437cfdbba7012a470f42878fb127794b49476cc5f9d5f1ee34299e155d394947b2e277eb9c22b1eda29a2c538a174b7dcbe55a8af0614bd54e5ecb54d59f6393b30300354f9d1655c49d2ace998a02211e242088115421ae2c89e2fc91f5c3e63a78c24cf3f228e421d8148131efbb83df5350bcb54aa4f543c8789a12c08f2bf1dcbcfc1d4bdf2ae48a657b9ad7deaf4f82adedc92ab630a649da8416d9a1f4e4788fca2f8abd79b8e3119cf5a8157589f8cb59c9b1e0b53af9ffb6ddc69de771ece7a22d2536d3df661fa94a278276a0829cbc08c8ac613b0aae3f1396d4bcae75ba0481015f389313084e0fa7e3c51421f85bfc2335e98810813cc474a3c7954e3f9bf740ad4cb0bd7cb77363fabd3f7f2464058a3bd72c864c9e58b23108d9ef91f633ba7d5dbfd397a9a9034cff23f88b5c014b83641166948bc1769d3ce1fdc196c385867f398c06ed5d1887411fee29079b1e7b4256002ea34003ef00fae7cf24353d72385f5070d0f7306cb4efe1934571f46fa4ed0c1d00d94
-TAG: 6fc6e19a4ffaf8a22622036eb3548c75b2c4616d216e9ed282
-TAG_LEN: 20
-
-# DIGEST: c1c6273ce723df9f2033c7150d466c011bb457da
-KEY: a12dd4c27f4372480974454879c41de9ac9f98233b5a7379a561792c0f3116430e8b6ea058c4799eea80abde04ee1de13e937af8
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed8b11534c870dc695b814bdf1a87bb1052c6755a7a116bfc9095da49db3d71f4b975c5d503f478b22dc8253bee6fd1b174c307f01be95abaa9bee5857772305daa4b550d75f05d8089850fea3711265bf
-AD: 782610460bfd24ba022e6d
-CT: 8308b83db00f58f91f79a25ff76d277e13cac5a76e00c65a8a4b6ba7c2a189ea487f023c456f5d7e456a7a5ba18fe7af240b71a82898b640269c1402866f4fd25cc41ffd9f883b1c81fc4255c3425fddda7367a9a1ac231e8a5f694b41a7d22cf9312d2372dbc6d4e50d26a902fb2764ae1da84acf5f488fd29364b52ab6c5d4945268d5746a2f06406a9fc8eaff98dd509fb421a76b1231b5703f366127352d516f5416634b7905728c45dc3ee68bec892fb58d6cf713f33f7b09e44c7ae4b8954c6c7ac7cb156e57612d5f153b22fe0b6a8e1733e122d48698adee8705d8d3258f266facfda74c6dabedc2a4c31ddc59c08d367d929479c526a6effcaee8576b3d4d9fbc0b008a8c4192d6363b6f0a9b79e21f91d2e65d9817fe193ae62e1c81cb84de7b09203f07e0af073a9324ee4ea580b125a8e380a04ea48051d7cfaaf67145cb93d7a3a2985f723909552b9870f5144b5961f0ce965058ea3e27d9a79a5dcf75027ad15b17a3fa6e18259d134eaacd1d601bb75ab05e50b27c97c81b037e05ef5a1c83a74d08d853d4aecb7c8fb29ce49f1ede3cf5d9e1fc95402601f560b28f55fae01644a68b664f1c1cbcd1851707cdb3b191fab5e0899b75c4d5d3f1511b7d7ed09adc946900
-TAG: dfec7c40918a7fa5043fff860e582301fa6eee459cc5f7e681c7746c9fdbd86a475f3abc
-TAG_LEN: 20
-
-# DIGEST: 11424a64d5ce78fd71b30a8070aea071d873afea
-KEY: 4372480974454879c41de9ac9f98233b5a7379a561792c0f3116430e8b6ea058c4799eea80abde04ee1de13e937af8f1a6944f44
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed8b11534c870dc695b814bdf1a87bb1052c6755a7a116bfc9095da49db3d71f4b975c5d503f478b22dc8253bee6fd1b174c307f01be95abaa9bee5857772305daa4b550d75f05d8089850fea3711265bf782610460b
-AD: fd24ba022e6da12dd4c27f
-CT: 9dc9d73836a8b568e40e805a7508f7259ece28a4f4b83f1994ca9078d14b785091226ade8921562912fc16ddaceb1958eb92e6688f5eeae81285508168680e648a42908309be71c92dbd21d23d6e80ad62d6cf3fea415e7f46892e01e4b3eda4bc3e17acb7e65fa1d003ea9b6791f9923411680ae6e1d012c3b383e46ab698f0d572523d8ab87ed28ffc00b5c7a2d1ff6055509c3c2d67c0576289b65e73fb47dfa48b56f9b5b42f934e32123f09072f0e409d2a98e7f78901a02b7e1713c72e125e69dbc15c99b27510a89645871cc07257827e3058168990e4866e16afbf5de7547f3f6f3de7c497616e8212a11440ddf641c8de62e0a96b4220edd22b475a175a73cb7e8d9f66633e23c53e7e78c33fe54dcc9fb20fa6400400fe893cd770f668b6e763db9dd8881f0206a8f2769f1d53224a60c15b65210a12de00d159820e8dac8df1ac34388137508743c18390bd625c848916639f035df39daeb48ff13890ec8dc3f8b0dc64c57ca6e0f6b397e5c7d8aec2b5853ecf3dfeb5468589a92d7c1050fc07d3787e3c367249716c514fa63ebb6788d6875d2167c396109ae7ec6ff4684ee7f7b6f5c2e9688bc23676d3d0e6d11da1aa2c977d7741242381de004c320259a6e7a6cc7ad22cc44bcb27bd
-TAG: c41f70e4bfc77ff9f73b2fa6ca7e5060ecf484c8cfa6d75edf76d37375443b
-TAG_LEN: 20
-
-# DIGEST: 6b7295febce7fba8d79d1e7ab8fdfc452191e2ba
-KEY: 454879c41de9ac9f98233b5a7379a561792c0f3116430e8b6ea058c4799eea80abde04ee1de13e937af8f1a6944f44d722271233
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed8b11534c870dc695b814bdf1a87bb1052c6755a7a116bfc9095da49db3d71f4b975c5d503f478b22dc8253bee6fd1b174c307f01be95abaa9bee5857772305daa4b550d75f05d8089850fea3711265bf782610460bfd24ba022e
-AD: 6da12dd4c27f4372480974
-CT: 02972895ffc3e4cf8325f5ca5b26ee8a4301df3c45fc2f43412b827ff9e8314c70dff0ffd3c1dbdffac98a4407e9179557f8df243b0d07f1b672aba943ee38eb677f20985dd542164dadecee488f0657ca790f54d26741a1fe6f246d04c46781f0ebc0122e1c33a35c73065757e98177694d736db9388b4cf48850ecc62cfca7dc94184ef8efb0b1ad9987d76d571f2a1a36981aa1baa978f7b91a65c6c25d006d8a3df86e2727903404922f480dab3a5d5996b07422f3b1a2da3192f41fc34cbebec64144d4db00757f62fd0eccd592bdcb7d9cba618797b1063a6398f4e4cd8886ecb2edd1d75fc011f37cf9a0c4ebe401efdb64cd2d7807766fd40e3b3d0aecfa0d49d6747a409ac2036f3ad6f0dad8e6dcccdf7dec4048ecbb0fb7882dfe603e66a5d7973b29b956d1332f040ed405d97193053e52732aa677994a02cf10e3d4081e6bd1ebb1f3d3b95125aac94fa6637797f6db5674c1d588a30ab4739f8738a299ef60fc5eff5c7e7244eacee4dbe9a66ba60c85567c64c86a7bb11e211d2f30bb45f037f7bfc95f0bf9a87a65de21a04f1955f887c04029bfb0ce689f6a46e84c5f8076dd9806c3035810f674b417379ecd5b4372698f7b2dfb61a30dca69555e49d6f6ec3f44e7dfd6ca533b6dc2341aa63b
-TAG: 9a1e1d8f8f1183ced733218bf5c9dcf17b3adb519cfc8771b1b9
-TAG_LEN: 20
-
-# DIGEST: 1dadffba439570155af2509a548764a93042d23a
-KEY: e9ac9f98233b5a7379a561792c0f3116430e8b6ea058c4799eea80abde04ee1de13e937af8f1a6944f44d722271233a825264e97
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed8b11534c870dc695b814bdf1a87bb1052c6755a7a116bfc9095da49db3d71f4b975c5d503f478b22dc8253bee6fd1b174c307f01be95abaa9bee5857772305daa4b550d75f05d8089850fea3711265bf782610460bfd24ba022e6da12dd4c2
-AD: 7f4372480974454879c41d
-CT: 0f3f2b8e85620a4829deb7ce60af43acc0da265bbe6c61939a327ce4a93212cc525edb28a369d54f8e116d81f136d555be33ebfb87eded221fec99f4a38b4fa3ccf58e15e46cd8ab535cc6f62af5d3f38cda649dcc3051a038406430e2b2c088e4b6c5812237d1ac113b0a47364db16632390253b3aa6f3d90f155ba771251ea35a52df0a0969d4f182699aeed419f631c0a22a48959bffa701569743177867e0b9cca18e243d77452f311ccce9c63211d6121a8f97aacebed9784accffb8e6e173141b3dc512a3414bc3a652cd8f0e2faf8fac59e3eca6e613d8466c27c21ffd772c6b18b4c19edcec6f4fdf2005050ccb466737a9ac629229b42effb9019d370af0f7944f7d2f5ba8505db265b373e051376bbcca7f9ee6ccad1f5651b24a516b213d6e90e6b01fde4d673972084d90f44c6002f65dc5acb49ec625ebd1ddf8b9884bfbc6e012ed0214c14af86717d61514927440fad1c1bcdab86b57bb93dd922f51f557e32b6501d99a0a4fc810f0cbb74a4fbdcabd9bdae42214f3a690d5e343498a022acc34cf12c0bee4ac19c193b7537b0400a26940a5bfbc5e1fc3a4b7591adfa9bbd5072cfc6b77e132da8aaf41d9a71b2e5da61c0b26a6eafe2e9245d98540d24286f7478c73b28c351fbefedb46c7a2dba1a07d005
-TAG: bc3abfebfdc7b862b965ef5919df45ac6578d775ad
-TAG_LEN: 20
-
-# DIGEST: e654b4c78e1c0061eea2996fc126c9bfd41eb6d9
-KEY: 3b5a7379a561792c0f3116430e8b6ea058c4799eea80abde04ee1de13e937af8f1a6944f44d722271233a825264e977045318c9b
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed8b11534c870dc695b814bdf1a87bb1052c6755a7a116bfc9095da49db3d71f4b975c5d503f478b22dc8253bee6fd1b174c307f01be95abaa9bee5857772305daa4b550d75f05d8089850fea3711265bf782610460bfd24ba022e6da12dd4c27f43724809
-AD: 74454879c41de9ac9f9823
-CT: 04183b22cc3b9d14e40a7ea1b69be68bb2347bfef9ff9a1ddef915f42255b89d5f0cfee79eb0594d56a20fc9a1cdd263deb0242f169eabcdeeffbb64a00d8df58c058794d36cae1ed22a078baa51d10bcc28ae25990a29f400cdc725b479ba7c67f2b7da61fc25d3f063e72130eebe852fe696152c221dfec1056d5c67bcb7e38d9eb45693aede0b0047ef7b064ff1fcd0f4573fc70194a22582054f76ceb2792e2606d07099af20f76535aea63446200c49bdd188e26f784192d131f2494238b610f6f600d89f69b54c1e72c1167b9f41065888b9410c6ca631e9f0b82a72dbc02cb94b0e8aac9cb673a2ea93d53b0f382959c0df460eb00d947ce1cd6c41991f52420046314204318e364d5f8bd6d3d265cde880aff7cc16342a24f2204ec33fa00f3b7ea3ff74c6bde45a3224764bca6f8998529dc59b9a50c1db15263bdb8285f4a4360c1decdc7f2613036bd059705aa5bd651167cec76a3aed48ed5eadec9d558f87865bd1e95da7894792d84a7be856c7892ce585daa6cdc498ecc9ba39f6504144bfeeb4e098087858d008ba23a295a11a3eb13b38c9d86758fb62f133c69973a61a904844352365f007e229fb3c1450e74d5961457b5719268b4a23663de7680115e84b0dc6b118537fc0d9904eda1d9034db6794c51d798c579b34
-TAG: 4702f446158e33bc30825d988a3ed847cb93cd89e4412a8ca0e83fdd53406897
-TAG_LEN: 20
-
-# DIGEST: 654b8591c7f0506261713e9ce7a6fd24a6b9357e
-KEY: 61792c0f3116430e8b6ea058c4799eea80abde04ee1de13e937af8f1a6944f44d722271233a825264e977045318c9b66262c0f03
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed8b11534c870dc695b814bdf1a87bb1052c6755a7a116bfc9095da49db3d71f4b975c5d503f478b22dc8253bee6fd1b174c307f01be95abaa9bee5857772305daa4b550d75f05d8089850fea3711265bf782610460bfd24ba022e6da12dd4c27f4372480974454879c4
-AD: 1de9ac9f98233b5a7379a5
-CT: 81f1e6124dcc3ad1c6aff527c8d9be440b276cb9a78af0eb13c2656ad2c53aaa06b0bffb486100fcbe2ddd944826d6a4d0c749e4a4e646aa404b1a5c4bdf2c37c4ea58d5ceb59aa212e93adc34374a10fa1e5c0e6d1c927e4abe18f00f7caeaac7fd49fae791e04c725d2804aa73fc3bbeb636dcba401ec7f07781ea5103e4802fe94208ef07b78e7a04ea1340f135736a69da887f2886743787cbe6e4c036d04843bf617def845b2d287acc741a707eadc2bbd811ca7987a09bf3b883655de05b07783454e53d55ce7a604e4c5934f846dab6e8b9677e5de5376d38d8c4d0cb3b4dffb9cd423ee61beb74b622d2672dfa22bcca5b0e72806ae48d83a4d683a644f5049199f004256e903bf6a4a24997ecbea4d9feb8048400cd583f3ec860165acda29ec81e3cb8c735328ba0c2ee9a972d9367d5c09c029a003c0cfd0617b1659f5ec9aecd37a3307bff5a19d08d7df6061e5f5d442e76fd3aab4a249802a6e445b53276166bbc358648c0c46f56e85c717b7fd73d5ca7dd6e58ddc9dbe22698c54b9bb02a245629c761a0735db0813ea97d6d13a9e72531f69b0ed623a156dc99786cbc6099a8e11b2fbed401a8a2fcccd6235584176bbaaee17261a66457c714b12890dffd152482a72abfd70fff4fce8903712567a1022b3d4488a3f2beafd9cf574b
-TAG: b5cf6348163210be611c95e090cbde73fe628076bd1e5eed337f18
-TAG_LEN: 20
-
-# DIGEST: 1eaad32c8d0cefaa5e2c503bb2185a73e6387fac
-KEY: 16430e8b6ea058c4799eea80abde04ee1de13e937af8f1a6944f44d722271233a825264e977045318c9b66262c0f0368fe9d0cb7
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed8b11534c870dc695b814bdf1a87bb1052c6755a7a116bfc9095da49db3d71f4b975c5d503f478b22dc8253bee6fd1b174c307f01be95abaa9bee5857772305daa4b550d75f05d8089850fea3711265bf782610460bfd24ba022e6da12dd4c27f4372480974454879c41de9ac9f98
-AD: 233b5a7379a561792c0f31
-CT: 1bb52d1264ea749417b516884fa9a25fbccd4a07103bc00213614c9a61700c8fe401c438c3be664bec96b81b6b68b808e76d1af01bbef8cf65488abec789e973364be139800ebcc4c3e117271162c249ccbbbb8f6a1fefa4b7e578b8b344519364082f4afecdb3a1fcc267fb1e0b77d42b574cabf7bb3a339bf4b6f90c652b844fe78e3f3e927252cf33b68720caff6146d046211547682ba9c13a8a88438b920598c3a687cd6b67a96c589b4b827e09d644cd188e78d40a793aa0121a6c8e16ff9f86821388a995b17ec16c5d2ea2e28bf549ebc7218096f420946e296fa620d9a9241aca33674013550a054e6b7c543c5828ef38ae8457b5e9a4a2a52f1fee6004f62bb5018aa6f7853e4e5112c34b93fe12e347125c1c3a2b5e007d5a9e026ab13c196636feebcd0470a9864d50c71b4e29e6d71b678c7223f5ea34d52b17b2bfba5f31d228a203dcc1be74d2baaa6c718df27a8d1938a6a0552a305870cd6607118fd525877189d9deed6f1bd14079a19fca57d98cc2db5b792dd6431564e625f00622e384935085a0e012424d11ad122b9fee40ab5c5ada1f12f9500192d07e16ebf31e4d7ccfc983cad113c547fba55716f7c92f9f633beacf853ef53dfc3c8f8eefa2ea767cf9b338666781080e1692413909c95e492d801673bbc5cf9ef941c68981835e91b6
-TAG: 1389fe1b9dc1f8202b7fe5f12f6db61746a2264d5c52
-TAG_LEN: 20
-
-# DIGEST: 862c0517b3658e9b9cd27db608d49e24e9b4667d
-KEY: a058c4799eea80abde04ee1de13e937af8f1a6944f44d722271233a825264e977045318c9b66262c0f0368fe9d0cb746bbd55813
-NONCE: 
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed8b11534c870dc695b814bdf1a87bb1052c6755a7a116bfc9095da49db3d71f4b975c5d503f478b22dc8253bee6fd1b174c307f01be95abaa9bee5857772305daa4b550d75f05d8089850fea3711265bf782610460bfd24ba022e6da12dd4c27f4372480974454879c41de9ac9f98233b5a7379
-AD: a561792c0f3116430e8b6e
-CT: 1a969ac3a7a86368c76919cc844ae3f26eb0698717b84b8ada3fbc1615b8cfe2c3e845f9b37f145ad495531c9340bedf965ce24194abf9986c2d6a5e0b7a62f984a276e47b1f51ea1ec45497972cbe00e8699c623c2f4009cdb3b32f8b9ba235512785c0f8dc46590ddbb05bd630febe7d0e6cc2f96f143c66aaae1d5d0c3bcfcc148f43e999ffce6d49dd4bcfa2b095c883659d4cf7f0940dcb1ec38807283621516d0f1b375e0266eaf3853e0bc74aa6767da3961b65792ea4e58644488fa9995ca60f89a1c533547fd764b9cc5ffca134725754be270768848e4ba0ae54d5363a5f66fa71a52107625c9eb3fface5ab5710f87b4b516415b4de3e3b59c56d2f33c6a9aa295b909da9b0d19956b790a4f082607fc59d2225651a6767471bc513b81a3c0218d134d38ec301d3fd8065cd3cd9c2fded778eff193ea0b7bcbd2ad856a931404501da9eb7226014c28371862a9eecdcc58ed8ef86da91f8e58f49c7f99377387b9676f5ae9f05eb0212e6b7bd706653f3f70abbb8ae26fc4f994821b986e866bfe64881418374886ef549cd17c883b3f1386ce4494ed85467d48f827fc28daa252829bec2a36e6c241456ebb45fb264ea29e1a3e379f1b3dc746c0d012ebc9e38a54429fdb6008fcf2ab518260ddec20a4b8db972e8e0e0e2781429513062d7b9756e277529750f9098
-TAG: 8e85f86a65c047f1867e8d942c6e4a1975a52c59682e79407f73a9d493fa97b0b0
-TAG_LEN: 20
-
diff --git a/src/crypto/cipher/test/aes_128_cbc_sha1_tls_tests.txt b/src/crypto/cipher/test/aes_128_cbc_sha1_tls_tests.txt
deleted file mode 100644
index 6e57ba4..0000000
--- a/src/crypto/cipher/test/aes_128_cbc_sha1_tls_tests.txt
+++ /dev/null
@@ -1,4477 +0,0 @@
-# Generated by
-#   go run make_legacy_aead_tests.go -cipher aes128 -mac sha1
-#
-# Note: aead_test's input format splits the ciphertext and tag positions of the
-# sealed input. But these legacy AEADs are MAC-then-encrypt and so the 'TAG' may
-# also include padding. We write the byte length of the MAC to 'TAG_LEN' and
-# include the unencrypted MAC in the 'DIGEST' tag above # each test case.
-# each test case.
-
-# Test with non-minimal padding.
-# DIGEST: 7f3a0e20bde700d3c5596909282e5c3e764c99e7
-KEY: 86d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8
-NONCE: d7efd88503f78b8ed1c8e9ba2fd6773e
-IN: 936a91d0b5
-AD: d2c0267218cb7090c61713
-CT: c6281c1cd5
-TAG: 62c1935946013b946a2342f00e08a2a3e0f0bf6c98426dce5d0ff98773f9560831e8ef348f50b35a2fbbf2
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with bad padding values.
-# DIGEST: 7f3a0e20bde700d3c5596909282e5c3e764c99e7
-KEY: 86d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8
-NONCE: d7efd88503f78b8ed1c8e9ba2fd6773e
-IN: 936a91d0b5
-AD: d2c0267218cb7090c61713
-CT: c6281c1cd5
-TAG: 62c1935946013b946a23427970932c1b21fc2d10118e7e685e8af3
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# Test with no padding.
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# Test with maximal padding (0 mod 64).
-# DIGEST: ceb2d295bd0efd37c6c34dab1854c80e986174fc
-KEY: 37446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac
-NONCE: 997deafd64b1fc65de39f4f03541a11b
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba
-AD: 2fd6773e0d0c302a5f47e0
-CT: 2840fb36bc8e03c59de49315bd8a6e091f41fb020cdb174ed0ab84fab8f94c14e840fd37fc13f48490c2d2ffd4efeb4da8d98840f6ee5af812bcbbeeb7f2992b
-TAG: a767b9c80eb4ab9270c0c08d6adc1bf56245929a79a4511a8a4ccd2c996611a0154c8101217b46b049331d3109a42093f223a8224e11fcecee906b2ef52e5650da0498e3f832101b7ef66fdbcef302f362e570e5e42d5dbc33d0d662913c78a8caf3a9e2e22949cf6d212efee4d9dc8d03fd6a00d41f3073c4b73149e8bf05d23b2dd88aab1c87ac948a3f96be79c52efe9488ceb9a1c5511b441a6ba4204beaf339539ff9b4443000b5b7c00261c663be3087c395ee448e724d1cfcbe10e15ccddcf50378fef972fa3aca38fdb1d131f1bc7ce166f4476a008883292f8422cc668e1c8e0cd53cb25a64324d187b14143563d8d1af9371602a068da959c587cd6a383d1ffc74190c0499b2d71390cdcf
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (1 mod 64).
-# DIGEST: a07054c760cc66fc704edf950201005031f3faac
-KEY: 446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac99
-NONCE: 7deafd64b1fc65de39f4f03541a11be1
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2f
-AD: d6773e0d0c302a5f47e037
-CT: 2e7e6cd84e03e35d8977c9e1d4ce6784c4db3a87fa1b82e6f781e284e0d3914eb56acdde0374eed6283cc10e1f329821fefbf888dfc8fb42fa574cb64df6d88d2d
-TAG: 80503493bfa3c2cd3817bb145fc579ebe050bf0e6310a29c9e1a7e98371833a25bea5c82bb6128cba6e27e7e796b49b49cd55ad123f90aade4d76a636104e5a4f6fc9c92997c0706d709145b208523c0c890394fcec38507fa0bad3d24fdc921416501e5c9b6964db81572bb933b67c4b5bb2070ad5068069592d35902ab93bad8d5121fe15bbb2bd27ad946a21f2ecd7e95c7f4c63ddd00589ac304d638307e798d9a55bfde231f5bd8a8f89cfae591b0234662647c3b42278f4157c4fb44fcc51862bbb2f03273f680d6dccee49b51bb4b881e5a1768dbc537e67073b796047fbce6f90eb54776d9f0237978f129af7efd4a3f380547e883d9976b38819acf9e0411769fc6898eaeca53f5def25f
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (2 mod 64).
-# DIGEST: d059c266cf6233af730b7a229b19356a4c6fcf06
-KEY: 6f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997d
-NONCE: eafd64b1fc65de39f4f03541a11be112
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6
-AD: 773e0d0c302a5f47e03744
-CT: be77b79780ae8ccda54d5f995f7c1beee8ac61735285e34d9dd137058555e723daeafe392773f428ec528a14c2f52a86365c4929d98d4504c669db1d984e2f84f7bf
-TAG: 24836360777dbacbbcea10d08e3d975a0bd32669871000178d167a1e40a6723b7c47ebd32e5df52cc4e0ee5459b355f285a0a93bd9fd016642221a335a2f09a4635f71d8575bdd081caa14b083aed01444df63e5cb01377b8a3ac31006c92621a894b71d50c85964234a5aae094a931e5456416236001f46d771767aee47f6b7c3493fc10b9f392dd629852623c1ff6f1e7dd3346d1aabd132301fa16ce88017fe3ca394d1c685942f1ed7b37f84a25682142b02ce138ae9b21c85db410cc3c266f6a490ffdaa0ce95e8b1f2da7f6e6ddda2d4570dc5619605fca903e47eb62d7419dfe49f354ac18762abbdfe5431a863b6f7371731ebb09ab41aba79e41be8603060fe921e4dc8b7f422392640
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (3 mod 64).
-# DIGEST: 8aac0687e33041fcc18da154b41f20a6af2bfb28
-KEY: 5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997dea
-NONCE: fd64b1fc65de39f4f03541a11be112a7
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd677
-AD: 3e0d0c302a5f47e037446f
-CT: 82aba2e22933737ef55346865375b574f24066eabe39fb800ec790df3ad05f85a760332e8a1d45e7b0c2d969ac5689505510fe035db4ac1c5a8a01a6f6ac00ad3d8344
-TAG: 090114b0a31c301edc2bed8e25298d4f913558ce3f6f607b0fce5f9e7b1c953601ce9890f0d8e8d6a71c5ccc4e0aab08942628d21f467bfbfc4996863e8fd296b7ce153568999980ac2980ca68b16c0b2edfe5efcfff121a7e4dfc8dd9387442c4847f7c572f668aa990334dc50a54480f673c338f1ea9c81cfb9d482f6e4ae163e412108ad5775aefe89173229efd58a0f56b411008f87e3aa307413779538057f5d846a1586920b1448b4fda27b65647b946bd5b7950a5e3e37ccca55b359b4726e26fc3d168a9e8bef56c1a61fcb2b55cca61bac0123190572c939584ffae1e913b82bbd8057f302a900d2a1a7ed1ab4a1b7c8c5cd56fc472d69d013bb897ea3d72d299da0df5fcc7a745dc
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (4 mod 64).
-# DIGEST: 53658226c112b86438dd27b58a71f9e36fc73c1e
-KEY: 91d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd
-NONCE: 64b1fc65de39f4f03541a11be112a729
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e
-AD: 0d0c302a5f47e037446f58
-CT: 3eceac2e338b4dfd9f4840d77db69ed23ee286b522cd4a324b04b1865cc772914c8d84abbf0db1a3a2d15401759b18d6fb3b7020cca1e31d136fb97b26bc772baf5a363c
-TAG: 1b6a98c7f9b8c5c560add0eb46d2d7559ebce0894b876f0de8ec37031df30667cc3ea54a4e71d8bcfe575d6044d9f70852fcf9a1a6756643e28944b59856ed1ce9958045eae0aa64bba55b64aac0cacded741293262550b085b4cb143d8bb8f7061eda2911c86e1afce94a8afb4db1060c2da1e9bb0ca8747d71b706134e44bb7e4b73518ca9201d610860961a53438d6efb51031a1ba0fa9b437b8a3aebc0479bace7843b319c02b4987490bed351be2eced028a2d0c97a1e30ccbd820f4b3f669e33b74c1b550a8d9782b9ec7fa45b24dcd5b6788895d6246a4cdfb015c605741047c1d2323e207a8a622e55b6a19401bb67de62154392edb28ab3cdfbb2ae2f21c3181ee8033130e95e05
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (5 mod 64).
-# DIGEST: 6b7d5268b0b5037afb5be5af6a0ceb34e7656ac4
-KEY: d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64
-NONCE: b1fc65de39f4f03541a11be112a72933
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d
-AD: 0c302a5f47e037446f5891
-CT: 5cfcf9e4dbe1a74e748665bf393c6fe93807ea36556590a1f2814c2b445988c1f6c2815f6b1f0fecae452d1bb89a055bc6f85bea11d99d0b0c62db8a81e3f0f3a557c208cd
-TAG: 8e73adba964c6868bb3da63b0d528a22eea8bfb4be0b1030070436f5c442649857c9c4a32759c5071d7d741692368497a978b5668b912cdfb0c404e514411ff111ea9f1224cb4a9256dc57a8a4677fe576b554cf6e4f975ac3a81eefcaa0bb68ac5bb26b1bf54bf034a50a1b3265e0baa8a900f048246c7ea825234732c3f5b34c4ddc0adc46178d0adbd9a524502061ad4c6df62dcd8f8851f270dc452be39021d5f054b7aa35f5235739894c659bc06333d0e564c38521d820dd7cb0dbb8a018543ebe7799cbd674a14821a6f92d776aed736fb4ce19ffe6ad5b456c09cc597443ae1bb41be9ea0213edfc1339636facbfdf56a8944cc548fd35fd5fa4a7b8cfbce736c6c96465326a49
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (6 mod 64).
-# DIGEST: 63efe7af502231420ed5aecce9a28446b257828d
-KEY: 7df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1
-NONCE: fc65de39f4f03541a11be112a72933c7
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c
-AD: 302a5f47e037446f5891d7
-CT: b2e315ef97a1b89b4625715c61946446fe1bf27aa60e65d0ad9849f71ec53ccbee951d3628efe2795949f88795b354df0ec68b21cd699cdd0f92f31f3d6013a4c1116165b4f5
-TAG: 4e9eb0387d9121ea239b27016805f35c09c90904d9becd9ce23d77233e8b68c86e17f92ac31794be17386e5fe2f40e83147a7dea38bee4b9776fb4a4da85408b80ea7718d542a47e7e5d7db38c18560dbc37d49f4fae2e013c4b89ab59f2a529b389e2ce5b2c9f0883df472fb9ac58bc5e27dc21938344195de25f1e3c015b68e6c6f6111e037010a075e78e852f9b0b8e568359ba22eddd71714403309987ed20e381b8ff67f5fd5d9e8ce77b1517da2cd4c2909f83fe70b65af0ba8dfff1e0860ccd217a19a96d94ef3cfbe1214e204d4eab8045f97aaeae0946b455e01099513c5a763596c7495de135bd2ea2b9c01e7fcc5daa0e88bcb45ce5bd044dc300a281b2bfd18f6090f7eb
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (7 mod 64).
-# DIGEST: 1a555c300a1d1bd5b03cdd6bf2a678621624eb05
-KEY: f660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc
-NONCE: 65de39f4f03541a11be112a72933c7b5
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c30
-AD: 2a5f47e037446f5891d77d
-CT: 8221477092da15c94ec15f34ef2d540c87ab24236ee4d97ed3543f49f2daec059be7c0f157f2d869bae0bd4b9d214bd40ed01484c28019d6349cac27db29050831e5974b5426a9
-TAG: 9f10a7816f0b558aaed826c53d63677dc443bd48fe1faf9d8e8542db0b3959d6754d0771ce1a23d67561626c7c521401c0a8882656ded33ace7965f5978bfa1c960ed9eb3831f45d28a4fb0ea44cbd9118f39eddbe3c56886bb4bd6593e13f2bf641e88adccaf76ab0356cb77654a1b27597b1b5fbbbf15b6c7673d92aa7073745721a299797b77c5b205ee44da405d634f971abf26bd7cffb21cd6f952eec7bc214d6ee0a31622c78259ba14072536751b87b968cc5e6ecb21d1b64c53f7ac24dd9344c2a03dbea3c5704bd283a8d28eb2ba5e4dc1b16a0edd6f4cb76aaf746b1a987d58ed73eb2b266a148ddbc033bd45712a3101f7b536d2d902b7e124e199442b149e3b603f199
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (8 mod 64).
-# DIGEST: de9156349b578f2f44945ec6a676a67a829daea1
-KEY: 60ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65
-NONCE: de39f4f03541a11be112a72933c7b54e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a
-AD: 5f47e037446f5891d77df6
-CT: 8a9f0d731d72929136ed9e6993cbb28013b336540f602c7203e6a38391dc07c8c3ce5b4ca62df582dea366c4b0b5aaabcf1959a7f0bc92047023c72225f5c071a588d95774f2e2c1
-TAG: 84d60af507164a4f4958b6aed0525028918bba60b4affc1afea92c0ef485679506ffdf649b0d9bcefcfb8f1503b2e48937a3e732785d85b11a524363a55fc994e756148a3b7b2772881aaceee2ffeb0f18bd85feb215fc8352dc76d8ab5255d56db5e9f10c42b4a3447321d459ed20e536062a33e6cc598a61b905bcd579e6d68cbdfb94c3b100e05bc0009b9841fca15d909de6897276f9177cce5b049c45954b7cddb7610127c9dd40a61bd8e47b7a165940ef3084a0b523955741414a12d34aed68db231db939b1417069516333b2c0c57e843f098a55e375639ebd2acf658de1f385a1e29c5eb9efe14c16e29488a32bbfd127592c7c45807f2b3e8f57144b9cf60130592b62
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (9 mod 64).
-# DIGEST: 12812df3aa7f3bbc899f6f248f5590e02570c292
-KEY: ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de
-NONCE: 39f4f03541a11be112a72933c7b54ed4
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f
-AD: 47e037446f5891d77df660
-CT: e3af374fb6f33c64fc2e4cc1e1b635bbe890f02359b6adb2a747beda433e003e30e1803f2169ff6abc81ff8095601cdff7aebae5fd8fc012387a70dd7db18e7eb79f87fcc1821ffdf6
-TAG: 4f9730c5eeb9cb32e005afc571d2ed5b2de38670704f854c838d00584becf8583ee7e79d9609bb73abb70bd01ab228bcf6070ee1c1c97d4f6003f6a3ccb4b8af43dfb37bbeb707e1efa51b0447e6b31e82a3fecaacad99014a8d502c3db8a36665f85d62938de6ffe30c4749535bb124129caa1fa465d04c1005e64f7f4397607b4e6fc31b9c34961b7276185fc3211eda045c06a28aec0a1e0a0e2f1f6829a1ab372d0bedd711158696b062b9dcfbff4925dca71d4ad7f7c610d40bfc6e7d04f4990d6efdd059679c7137b5f5d28c9784fca307e2e1df33dfec10a242379ff30984c62c201738edd60007c9d56557692e8f73e5d0c83059d568312b3504de9691ad3d9b30a4a2
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (10 mod 64).
-# DIGEST: f3c89f21c327fca4aa400fabea9e39780378e901
-KEY: 82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39
-NONCE: f4f03541a11be112a72933c7b54ed4fa
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47
-AD: e037446f5891d77df660ed
-CT: 98b22a9119610480bdfc5cb6e2a950ccac8741690574730b87fbeb113d5daac699c333ff21efd0e73d2252e95f64dd2699b940b490259cb5fd698756713c0e53ff69a733ea13587cbcb6
-TAG: 63600a3d7fe8a782af7af230da63bc84dd993bcffaa5f76e5f63ef56407d0412b831dab138d117fbc081139cc49946a7631f488c11946c10530806ce7a781baa3bd072300a5cdf8aaa3b2657ea3732c1e24271c447e6d7f6a2afa0bef27aada30585c33479debc10cb72febb181c7f5f77490b339285bfbb0bf07c545ed5a0f3f183fefdc7138e330095636956328ab85a201e3cd6a2edc573d75327bdf615ffc8e6fd5e133558b831e24b67751098320e9afdfe7c7ef4598c29563113052c568263612fdc3c48d8e9a8a407bc2918ede467636dc0185d9423e9eaefef4126247012d5f1930c56dd9dd7c34d397f388e4f741953d76bb1eec911079936a8dfc584fb5b7c84e4
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (11 mod 64).
-# DIGEST: e8e41988fad6c8b44c56544964cfe0a347b35b1e
-KEY: 933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4
-NONCE: f03541a11be112a72933c7b54ed4fad0
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e0
-AD: 37446f5891d77df660ed82
-CT: 8795d6c225aa78fccaaff86101641081f4a440969633ca8d7830ffb14f629fa34dc4c15e8ff20a8940c7a484ee94503372e658615eb3fc07c2d2c399ae9ad7a77d684512d0ca273f77fcfe
-TAG: 534574a93db9658b653cd395e981cd4a8992e817ba058f692c5f0c1682745097ed441781afe30827bcaa29d061e2d1554a949cf7b62077b768bc1ca8679618a5d2b32c0b7e735db6a27fd762a60aa19e60a60a9edb02f20e3e99fd4653732525a0c8d8042bd3ba5387f93a7e0da483173b3abcd3ff876badd75b81741abfe2baf21be1006d1cb85bc543ddc7493f8faf4e27619686ba324cf651a16e7ffc23ae7786eb8823300a5c65982228aecde99f53d43f86d9ec0d326eb3ece9f6cf1c6bf92d1599c5f9c391e9ba189195665d3018c38207717502bb60e020773618df614bb4e0309fa0809ab215f68f0d9d46c28950d3edad6c4f71dd5af9d03dfa39ae62482601ff
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (12 mod 64).
-# DIGEST: d1c7b2c04dc25fe7b742a1d659aec20e1475ee4f
-KEY: 3f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f0
-NONCE: 3541a11be112a72933c7b54ed4fad0be
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037
-AD: 446f5891d77df660ed8293
-CT: 694868cf990a1b8ef42fcb2b45cabf1bd78eee4b429c11b27a827762b9c319bc54a2b2c8eb2ac85063ef8ac7da8bc35b16c0a98822981dc9b246381780da7833eb718bc8518e2b176656ff5c
-TAG: ca1dc8a003fd389a1eb1cfa4bf9746cdf45c548f8e52e0bb0dd456c1369686e0975fada75cd8fb261a01828fa1375941dcd8c718f82d6b64222dfbf7143ce980f3936b78e525c961b7d72d5d68127d0f98de541853ae36408ac489c5629c82f00a44dbdc89d665f94fb391c4a0618f31df9bcf39a07325b600265daaf53c2762396f9f6e83fb4f545aefaaeb447d4162ad401e1da2ec090d78d7b354d80fa975dcea9b897fc0f16681cd9a1aedc78cdcbf26249e18132e518b75849af55de38562ac32c50819a35156706510688f3a81e13e3bd5f61a0c2a8655c251f4732258c3cf34694be21caad599996c9a13303be173f916e90f606dfe1640bcf35e892eab6ca70f59ca019d27c58cb69b4cb3bcd484198d
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (13 mod 64).
-# DIGEST: 116e20ff1e79e0af464d473b1e7c187f4dd66007
-KEY: 62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f035
-NONCE: 41a11be112a72933c7b54ed4fad0be90
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e03744
-AD: 6f5891d77df660ed82933f
-CT: f2e78e183884c99ad7f199a02d87a1026c832b9a953919a98c2487bd0d724be407994fcce9e19b5a69f15ceef5d3b95c79d5fffede18a143cdfade5c0f80254cb38e47cc9c82488116640aebe9
-TAG: 11f4ab3470df6f43596f9275964c3ecc22543daebbdb99004eb6c1e001b2119ef9b247f30481117102a179a7ca72c556a029b77d0ee2167190923012aef527b8a432576f8948a7dc77ebb79fc7a9dd1d981a4bab9c00e498c09902ffb9362113f6ad3ac6c1f792fe27d3a71aa19b9f769f2417ada3d303e3fd2600484c9f6b43e4ad834e60ce4d4885088087a96eb52ad989a9e9a43aa53a78e513743a8f08cb472a144af5a6abc17f217715e074aa470ba71d2b1b75e4ff3f597c4d1993412d37f94989c1df016f72b26c8d58d78a8a3295108e9bc061facdbc4c708a1d7e7c95bb8e365d4e933c0e519d08abef948abb67c5a3ebe938b91613ae9bcb6079436af3acbbdfacf77e8b935686d4ef7ed47b5b10
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (14 mod 64).
-# DIGEST: c081d0d09b2c9eb39a372ef4a7b0246a0956b0f9
-KEY: be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541
-NONCE: a11be112a72933c7b54ed4fad0be905d
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f
-AD: 5891d77df660ed82933f62
-CT: c7de96bb45663dfe6da2a64ffc9ddfa7c3dc63077079bd4bc2ce52fea89924a75664782a5026fb5a099ec460eb9c6d7c3d5ea383092c8f4c67a70fc499a7689bfc27df4da7c185d573e6f8d70cc6
-TAG: 1d6cf11ee4afa8efb4e025dc32e0c73a6fcda2aa5c892031c7fde0d0d69e38e9e64e88a714184fbe73ca0f1dfd35ba3b0378a474cb4aaeb942a529cd199e20b7dd62654b97d92dc317975d5e26ca1378d41799a127c44a157982dc3677a4dd391e22b6906d303c2c60cde6052ffbdbe5f8bce22bc2ee42975f9892b68f228cb1f584b1a3fb2f15cb7bcf3d9650e72e796c46f7738986be7f7c30dc56c179299c9c368090f68b96735673f2279366122e5cd94d8d4ca2cbeddc3502d833bb365756cd511577a7499c199f403ce114ae47aabd351bd27e4595e3955e1d1c617a3d0ca2d6e4a2bc3275f5ef706fc4e02e48719958d37d172ad1473878686fca9420dafc83e0baaa9aefb1e50c98d6006ead6bd7
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (15 mod 64).
-# DIGEST: 6f7bb1f9e2772eb909c315e653e4737cfed78a18
-KEY: 8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a1
-NONCE: 1be112a72933c7b54ed4fad0be905d41
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f58
-AD: 91d77df660ed82933f62be
-CT: 3a77c0f70f9044fb3817d57be4f4e5ee4b27ffa586327f77c18346f9fef2608a552b551ac549f9e8d47c4959196162862fe2a35e44581971c2974d4a65a47ae719a7f5f070ad902b8a9e022abcf303
-TAG: 825fc7dd84de7f3bcc941d0234090a9409e47dda077e0f3fd000965bde1d4ff30e15b23affe14d94515629f8c018d085f41aa3ebfd0498f621593d57aaec4bdd0e22df21668451b098429967c8eb8789f92a5578d177e5d2e326fc14fff272eb90368d56a777849cc5a1d54c6a458d32c26f4cf99e0f80c91e6df29aa53edb03df176b9873f5827686faf26dbb038813a8170f59e3ad85ad698308748d112b7fbca45156a4410cf32fb34fbbf27b66dddc0680f2bcd7cac6b8cefa83945fad84f77a396630029e6bfe9f15cbf5a884332de5ea7f558d783858c18761983080c13f9c06be367ad856cf159656ad140e84d6af4b4c3517b90f5ec0a8e6fe18d42ce3d194f695f9b7440d4118b8170705b766
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (16 mod 64).
-# DIGEST: 172f4992e692a88f49628e5d3937959be01aed2e
-KEY: c55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11b
-NONCE: e112a72933c7b54ed4fad0be905d4120
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891
-AD: d77df660ed82933f62be8d
-CT: f2f3a3d985eb38c406bb0db0d141188c680656db8a4484abad2c8973267e14458e2be7cb52f06ee2a0f68eaced13db714296319b2b3557454f5e9cb47e8943ea3e66f7bd25c5757375be7bdd65fef53b
-TAG: 2c441fd3259628cab417df36374ededb37b9775c0ddff861a5b957a9237265000be0857b3b8482ccc5a348dbb9f4529da4baca8a8820468b1219fe4680221bad9a527d93ca499a988411021e0f9cbfbacc7851c63cc1886e934238d9b7f9cb6b330ad00da830b34c7e4398d148af7599a87770102622e7a68828dece16d4255bb319c75ab0046defe72269fe67780b34324eb3d57effa216411caea5661e64d8151707ffa86752c876590ec46926b7e963ced6a7fa95b1bd958e618bdf1775a9b3ff18c91ed490f39cffe0ab03bb5006cd321d8e6bbdb19597ad7692eb7a7685e075de1d383089f46c8a4bf1aa948bf08b89fde28696147c767f5fdf2aee8b8d4af2903452fc5876aa226d490140a55e
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (17 mod 64).
-# DIGEST: 00133da1f7c63fd5f0eec364e9a359be02c1d3da
-KEY: 5b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be1
-NONCE: 12a72933c7b54ed4fad0be905d41203f
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d7
-AD: 7df660ed82933f62be8dc5
-CT: 02fd26e7b51a1bc6ab6735045d2e42fdd1f31adba98ed5f8b3e89450853104633abf6cbb70ecfba2f5b39dc06f419746abae4a51d33829bb04140275021d183ba079d58c37d4147e8114bc2e3d1542b0be
-TAG: 4bc0c3d3487bb74931c27253f0f0931d15a627ad88ac1ba563d97bcec53524870d8fefd1300feae23772902058f5f4a0c1c67eb5e4ca9d4f98692398a9019c3263d2191361b73038e3c9252502ca72070f1155952b3a0c787508d7c0c96e02036b2a26513fc69b19f1c51629fd7bdf015c0c45da5de1d6899f3cc3bdaea7a3d7bf1d0e8a8430fdd7ec70f93d7bb62fab821c1f0e9ad564d04081a3fb70b43b5ffd990e53938cd34084411c0c11db13bf2e28c6fa299c720f3f68ad751c20f6d12ce79382a1d0c4bf3a6bd3a695b3040193eab3c73aa4ee751447a5a46845c86e22909cebcbfc8b653f352072aad19b725dae4cf4d1c8bfe55605f0eec27682a6a365cf2e3e94ff769c2aeb328fbe6f
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (18 mod 64).
-# DIGEST: 60a6821269be6c5b985576b245f106128eb0b325
-KEY: 436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112
-NONCE: a72933c7b54ed4fad0be905d41203f5d
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77d
-AD: f660ed82933f62be8dc55b
-CT: b2fe392acc286bdc73cac1aee34ecb3a3e3ae2ccdb065618e3c4a17f2b2668a2c11108b0bf8a8ffe20800a698e73c9b6ed4b0da61bf6fc22c33c75439445061e198f018f271a8698d87185b7df77daf9e757
-TAG: 7a3dcda8c73da41cca4a85a9bb5226d8a94f2a39abaad492ee978b6051961be1f0023b673348fa17eb29430a340b3597c6aca9304be30abc5129bd65073aec837e55fe06c7787f4272e75c32b3f1777451e17853f4a4696cedbeabb57170f77efe9db657572035af08cbde5432478dc339147d433457d3a15f8820515a6f267dcd14cd9489352e1561414e3e1e0a85129976c24dd016d4621af0058ef4e19fe4bdfdbbec370fed7ef641434eb629fbb16fbcdd117e9b84ccf7ada8324f9815e4aa42c12d4f0609060545997afd4e6786a0457b0b2fc73ff7856adb51223d2408ce4c414ef2afe52a3bb67be43997898ba846045e96a27acf3f1bec0b755e424f57c69774cc13ada5227c7642f563
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (19 mod 64).
-# DIGEST: e2593f3b6741a9ed9fa188fc06efd057556ee624
-KEY: 6965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a7
-NONCE: 2933c7b54ed4fad0be905d41203f5dce
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df6
-AD: 60ed82933f62be8dc55b43
-CT: 8780167385b8856be346b71b042332368067d5d9420b3793fe94bc1ba92991756523c7a8e0114af8fa7296ffef8fae01796b47edea43bdcaa8832a08e823c45c1ccfaf1190cc7fc73a67decbdf407c72740a7d
-TAG: 974451fd4d9d6d1f88be4404869b435b4b687a1150b31a0671c93f52f76f2e4dd71bf4a3583f68ea5fa4a0dbf8c779f83e8dca1882e9bfca3e914e77ccbf40ac94769c44f9a8bcbc35a4f9920c6860078d369f57b407d353e8022263061bc974df29fa7c862f3d06213b1190cdd3e2091b2e26532356560efc3b21a499f4841869c993272b70f153985d45756a0b3250a1b91ee3f25a6afbc202f3ef81dc607068fc7214e69255342e662c64ffd8acbe86992ad20ce376d92ee0bfbee6a72a1f83f470d0bbf6ec22b364e842b84736d3923de92c488c102344fef6f78624989460a2c45fadec2a7bf722e2e6a34162363cc04720a50f0d309f64f9322a11b642b97f023cb82a521af6b1759d37
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (20 mod 64).
-# DIGEST: 17450a437efe239e1858ac4062f34024305372be
-KEY: 65aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a729
-NONCE: 33c7b54ed4fad0be905d41203f5dce99
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660
-AD: ed82933f62be8dc55b4369
-CT: 2cd2031084f8742da110ab5d8f7290828857c867b38427c3f53be0dbe2cc94527d2f0aee90a38dee77c0ce115ef650b2ae65094e99ac9bf6da89e5440c1bb4f8ccd163427bb95b3ccd629e6881107d6c9a80cc37
-TAG: 026560a6675920dfb199359bea1a03ef0d7d67d359bb6b94074eef54047e92a0940f8eb5d08aea137b7caa73904b66a8c99775e0d859e4c91d68dfab271a9401fb650a9afb83ec4b42b97a74db1908fdca0a06603cde524524ecb3bfa15a96b6e250edb83e7c59385357c075bf077ada33489dae99c2e5d5f17cdab9d23dfae4171e564bb91e3e78d61dc7f1712c2a4431e9451cc1f58df004d04ec50f77a2681969ed91e07df4ec90fd185ede409a5387538b115107a1fe22bb999082d4341ff5a6ae7af33cb27a64eff64492a08eae3c18e5914971e514f55e65ca93a8a19d7d4c2f3df76232cbac674c480e9f4316a8df7ed9d62f8144338249732dc1c3dfcc8647804c13a03a59eab926
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (21 mod 64).
-# DIGEST: a35fc7d25f90dd9cbd35910d5532aca8aba88b29
-KEY: aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933
-NONCE: c7b54ed4fad0be905d41203f5dce998f
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed
-AD: 82933f62be8dc55b436965
-CT: cea9c7528706d506d75cf085c8475c081ee8c6145ca11610b73eb3e103a706faa66062f8edc10abaa7c3edb3fcaf43c202c4812e768fececaa04564414f45816fa5c0df5b7518ea3859be75c4567565358293e9232
-TAG: 32de5af09080604ec6b6fc5a0a542837a54131fc87b1825666e5d56f09e15b76d47fd8086dab709567aacc3e59d395656ffadab861ba9a0e1c1b30321ce334b68724877ec6806245bdab9bc0f8e5af6582fe91a2ad95f7a6bd0ad1df9f9c2d2c20f78f2fb0bd2653fc8e8fefc9255541d789a0059820b30902c3e4344b68d4603b3fb8f5001df91fc9383dcfe76f219933078c602fe2813b9e59e8f996f8943c96c10f27d02f5bae69789870a61abb6c3b118f6cc348188495798b07424a750556a8d1e444b47283b096b9cd8b98b790445ba8ad8245a040a3cc96c2d72aba1474f949dc607c386c7cbbda952651f6d3260c82e5a06c517a89c5dfbefa069136e3c094ee1af26fc4c77e21
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (22 mod 64).
-# DIGEST: 73eff0f03358879f900b6ebd515f0f4e5a6929e4
-KEY: be477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7
-NONCE: b54ed4fad0be905d41203f5dce998f8f
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82
-AD: 933f62be8dc55b436965aa
-CT: e967973079db00d2257d84817ff4c5faaf98024ac7eb71d22af3cbb92a001a558f5cce2e8c293d6dc2a968f69cb2731bf65954affbfdef4085123aa06baf0d80edd8d04ad4b1d48120f0db0df02ca13708f66a567ed0
-TAG: b8f6b6618dc8b59b07566c1aecf97a9933b6546fd8882d14cf75b2065f17518722b5fd77f9449cdf4feb87e7943f9d48b56ab891514f608767f1711314974b020804b7227326185bcdd338e3a9df31f6c3a0190b25d02dab04ce23fab918d6176814877ffba65e410bab2ae256d4f5f937458d24a144f3c45f6fb27e9f95490e95eac4575d49d7dec6f72ebdf3efd9dc6c83ead51652223b18963651b8d957b7aa050b022e4beac68f928de0d1094dc756d8e1d2b89a1bcac0d3d40f0f71e67b166a6a56d8ea91df5c930566640be524f187be2065127cd15b2417f7d80b6a8cf781e0e90c6ef61cbc902e935ffd2dc9e84c4170fadb6f76b15d77c72b49b8aa30ad1efabef37d55b4bb
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (23 mod 64).
-# DIGEST: dd6cea270655225cb4f4231f54c19eaaa146eac5
-KEY: 477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b5
-NONCE: 4ed4fad0be905d41203f5dce998f8fb2
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed8293
-AD: 3f62be8dc55b436965aabe
-CT: df01c1a140da0e422919c0d34b231fa3cd767766fb35f8d78d715c44b9003e42cca112fa1543d74ac05e00da9b5740c03b5c4d1e558ceb8629adf3adb1771e6edd5b986094f724e675682e65af15bb3c0feeed8cb3407a
-TAG: 25a40fa2eda366cc951e8965249500a657316c33538f874f861753eb038dc5cce0425824f138abde55bade8b0500af1f61b8ea69d4bd68de3fc403021c2224635535bc83dcbb429a8ea6c0ca2687a34e02d1dc45e7bebafd26b4814c0766e7fce5238767280ce0424a3f16a30b943622b8c1abe4eb6c279333e9d8f7bc32afb915bc5b0328147b57d02d68584afd85107302e3c84983cff39256313c4462b693c256edbbedadc50a52cd2a3c8255c1c34ba87a70cb652d74d8375ede59a57514bf5bc50532acc8be4b438daaa2d7d2caae6c291ea2c78e27766b6e2afa2551f3287a6a2a4bf747a1706cd66fd724fbe0e7e81197b1ac612c05cde5a62fa0d5c43d01e6300c7066057e
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (24 mod 64).
-# DIGEST: 34dd9bf0ce19eff890ecad474388779f63b0af70
-KEY: 7e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54e
-NONCE: d4fad0be905d41203f5dce998f8fb2ea
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f
-AD: 62be8dc55b436965aabe47
-CT: 889ed4c7bd5455821c5b95a67a277a197140816784e820ad8e126b3d3f0ddaca73e3eede78c1c1d3ff5c2a98c0cadd644393b7e3c2273aea2be1c6fd20374b71edbed5658237d819b5e4e206698c8cc8c12e017196776bbd
-TAG: 57da1b6d2a9717b7f6f37f21dd9c686414ecd07bc24619b9d35c62c3548586bf726bdd33fcbbf64686556d1ece930f37c6f4c8bc1931a10c50269cc1dcd95bed9d9edb0463a266e6e51d2d90fa9c1a1a4dec6d21663df4f4b99060b37441cdc09386eb785b7cb0183df692d7846483998269e36d06bc7e3a010ebc798c83a5de0c4d6201f2b5b7187a7d99d109741a19e267cbe458063aa1ee66c7c2e0449549d03a9cac20d356c393de63d466ac3e04d63b88c26768f0b3fb18564acb1515ce4be0829aa99cb293adb9a0d3dde529827abeae270611c35277a4b373fb099cfc86a99483063014ec189429a243438447c9cd47a333b22e2c1c84845b79e23a661d411570c510f42c
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (25 mod 64).
-# DIGEST: 7db8cfbd3b29f96d752346eeda3c2bb0bd070099
-KEY: 0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4
-NONCE: fad0be905d41203f5dce998f8fb2eaad
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62
-AD: be8dc55b436965aabe477e
-CT: 13833f78c9383bb4455972d6e7d8f22597e65de7dd01afa28fd99f9734366c522bcaef59c41487d84b3f84c1e0b7e5ff6de84206f54d5ae80ce80fe3cb68ea4edcd15897fd6fabe2a19904010538005668f2b05245e28bc0eb
-TAG: a76458445b8ba4572e8aed335eeb6ef8126ccaebe8b4be3f799e1def09f8a81fddc2ddde86e2d011c4b61eb16bb74cc5a2c7e1b6d0107f6b749b93fe9f6589bf4ea2444cb63f5bdd3b65827fff3adf32044621aa164160ac4662506b42b0b13ac148e09abc016102ccc988362f5cf64b969fc056e3f302a830f9a0b7f3789bac1c940d5cd7e2dd61aa3c6b970c3d066504093d658fb5f9ac7fb22ce306f5a9d495ca7e29d02bb39123b5387c43ed9fa1b8a061a339ced5a9393b7dc6401921d0fe424c1f168451286961f8ac199c3f8f8d4b154c89d290a27cc53695e082bbec8a338ee09826555a3fba8fa4bdb663ba932db800df0a1b570450f33f936cb71622854b84b260c9
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (26 mod 64).
-# DIGEST: 4abaa8453e8cfdefd918571a961d8351754ad5b4
-KEY: dd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fa
-NONCE: d0be905d41203f5dce998f8fb2eaad40
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be
-AD: 8dc55b436965aabe477e0c
-CT: 03065bb245ba12ab90903bc081198fdfe45d7d3c6fa3b1f76bde831917376ec2a5b2ac2cf629de6bd3f23025b678ea9cc3bd7801f5510b58432a8bc17999304fec4de7ab9ac22d75897cac67ed57e30d4745588b36695dd005c5
-TAG: 92877bfb09987df366759a1776b758dd9943472b933d5720e4d199002d4f3ffdd527c2cdb16993da7aec2ee53a24f6681c22fdb9f9f69a89704b6356441c6e87930b2ddc47bdc1fa0df00f7490c16e18a095b53288042525f60f0f37be0036f9a7dfa37ed3977456b3d8c4c4b2c47879a4495bbfd6a512fb59a40b20bce316ecc559aa825b4be8dbbc5dbe06fdd074c1f2132e954fb74fc97075e9c5052a0f86bb431f7fd99d62080140e0457f8b5deadb9b2528e61731488f25f0574283a1b30c80b2bfafcf0e4343ceb83dd20d2179a38866780025516e5f8216ab70c158ddfd0ad7a446969cc9f6eaf5c984ce8e9c38fd3b8a007a1c154bb4330fbee4329b8335f4ec4b23
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (27 mod 64).
-# DIGEST: 0fb9d7ffcc7c9b84f34661d472ae2d4fa25d3d99
-KEY: 46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0
-NONCE: be905d41203f5dce998f8fb2eaad409a
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-AD: c55b436965aabe477e0cdd
-CT: 04c76011b9c4cc8ff18038d36a8c8b91debc8d0929ec173cfa5450f434308234e6a368f17a04ec0556dcf5ace0efb5ab51956d0daec5c530129aaa78309c3d0a04af17d02b0f91f70a82b2ea03522659f76d1919731ca52747da3d
-TAG: bb70d9741043c7d3d9a3c5f7d2dc1517a91729b54dc8f49291e2201331a24fb24ad212398617237c77de3d6266fd32341893a9c8bb42e60123bf3bd4fd70a065d6f3d0ae98434d8cda789be46a5e5ad05033d18cdadb36e33fca58181909dbd3cc1733dfb4b6dba689a66f19bbadd35f830d6af1edcbedca45b2810cc82ce83d39ef9d6d17aefec9b7199575e8d08df3ecb9a407b41a9c1d851e923072c96c5ffc60d3987ad10f27aab7792a198a17c8bf88c586ab11cee5008ee7ea769c56ff8d644b51059b9b2ddcfaa92d3b3055a4b3921bf95c5c131c2485d869f642cd14cd4eb9b73740534f6c48c63f76c6f1e4dfcdd9dc3c07593ee6032a98aa10e1b7f095c505d2
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (28 mod 64).
-# DIGEST: c68fec315401703e49722fe4b39cf28b14e9f50c
-KEY: be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be
-NONCE: 905d41203f5dce998f8fb2eaad409ae0
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc5
-AD: 5b436965aabe477e0cdd46
-CT: 5d9af50991ea21f041a766d8d9036073eeb0ac083b8069619ee50c64c661bad73a9e2ca7f8b49ad9df79e47b49ca3c8ea9dc254854f116a49959c91481ba96463521bfdb74902a4b454d2c6af72d130175c33e8764b64bc93955f9f3
-TAG: c3ccb45d8e69eccdb1f058a490d8de92f255953c16f27e21b49e4f29639452ff846aa45394972d895a0fcde901fee45211e835f6e4152de7475075e1e7ed832d45e0407eac1c6a0c88de4a9fb44d961b3be197e45af38a88d1070416c419046f6e43496e6fc1750de734c7773bba9b402dc96683d624117249f3d3f3d87f83a140018afde34dd5980e86e157d632acb7fa5400dd272fe74abe46652eab999b9ac1cb65a4a609f3bf9cf3c8434f9eca0bd440d665e772629c0cc76e0d9009e47f5667c0a0846ebbb1c1b23523262d3225bc23e3513ebed8f67c721cc0886efb251b374ee4e79f60c6fc7bfb81ad9ac88c0a782d3c4bb918cd21ca1f3b8e311f5e48b9e6d738ade59dafd07ca721aed0f6f7f98f1b
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (29 mod 64).
-# DIGEST: 15e1aa5285beab679aaedbf51a86b4aebbe3d7df
-KEY: 99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be90
-NONCE: 5d41203f5dce998f8fb2eaad409ae021
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b
-AD: 436965aabe477e0cdd46be
-CT: 182dc2f9f412f305a8fa4813e8c8eb7a41f9708efb516fe3feaa6ae94c89b4437cbdba7c738fb97ef9739ed94d988bd60af5359194d2b5f8a48e3f5482c3be294ae65ce803e21acdee157d436188980be8e58c95a7a5a33e427473d4ba
-TAG: 2751722d2433b908076080c82895c633135bed9c7486d2fec286ea11b279b5029784972d39c8732cb1631841a60e86ad8b17c41e9c0b54ea3dba7b15121532b7d7a7fe8f92e2280481c73590cc38bbec7888932be3d10ab251157ed0335ea1b06a379c4d19d7d860bba5164da684c9d0eeb20e65c0c63a60bf94f65fa4e0f61bb94786271d5ca588093446fd563a6d513d81d590244807ce399f4bbee2f09cd8145634c1ebf06bb408489fa362b06af21a934b1114dd8233c8cb629df7fc5ac619fe2701de7daf7d7295049e1909fda9864fd7cd088316be8dc7770237748de45c3dde6d476d233983392e1a3a96f9c6550d5a7df61e3818492806db44121c277df71b9e1e176e335a68f2811637a9ce17919d
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (30 mod 64).
-# DIGEST: 8cc0b1164fc844e958e055b7ae43f2f95c29e8c3
-KEY: 371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d
-NONCE: 41203f5dce998f8fb2eaad409ae02116
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b43
-AD: 6965aabe477e0cdd46be99
-CT: 0990f57d9a7e9b64bcee741e158eb5749e9d7b34d43c6429754689d87fc45daaa618fc62d3dc111e5a1a7a06b2b14c5b0f3e2e463085e80da6ce4a6f7815cbf871376c8c87a36555b8a74e0a14421e1e4d74f7531546369ca81e4585f86b
-TAG: 4e2e000dd4c6c0eac8aeb581fd352c8c8d4033ea944594afdaa87f05ae6be756e46cf27b7ee6eb01e9f4eb50918d2b438fc0d1eaaf7c6add8078a6a9d45be1e813c18b20eef740c85df67de7765974544f5482f9a0012192f3d84b2cf6c01141f6a8040158cf9ba03c5a1b580cfddf0a682955713a4cac6e0d3b6e273db3a91a1b8096f85fbc3c7a67e893885bae3b4c65d03d111da7e199780de379c6ee07a3657ecee397ce0c9d34ee5d39e8fc4a64c86a0d68182ea48b91c76f63011d0f0cdeaba4e1ff6a19686c5223a25a10af0fce79437322c0cab4786fdb4b93e687a1c7154bd294d784169b1bc7cc5c9f3b8bc3e1d8b808b448f926ce8731ab30a33cef85f57053ef081a8948178030a50c247e53
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (31 mod 64).
-# DIGEST: b51001b6ff9d27bccf3103a4961280e0a1406257
-KEY: 1eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41
-NONCE: 203f5dce998f8fb2eaad409ae0211641
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b4369
-AD: 65aabe477e0cdd46be9937
-CT: 8d7999ec7a80e528bd6a8d2a9724930c93ee5cbb0c888d9b7c79d2449e638c03f3143f1927a1b261d66ff55bdeb7ff6616da99a2155f465d7c91f54963e7cbda7b61529381204ba43c9681260799ce66fec9b0e9882fc0ab474fd9134adb66
-TAG: e9012cda52183ec3e658c42f819dd986216e84e14eb38a462e3db010070a3056db6b148863afa9af5849e3ae963730f02bcc2b419f9cb37659609dc730008a43c41e87312b546d3b67e1f092001bd8a1b81ea304126801f149b0a37d826e0fac21045be4087f76e3c44a796bb55b6e4565d44cba7a8a48d4ffad797982256e87b95f6599b53f2ad34299d90204acc139d115b66c78a2072c741c43c81bab9dace2c0088b2a5dacd917e75ff0de07ab5febad79eb5e0d03012503110bc0f62e2aedda35c9bed4b7c2131f96a4d0c9ca4d133ee032a787e499c92cd46b33e5bfb7f1d3de52db0c7e2a15232a7c3c064c90bcd23366bf982bfbd9694e92b709a86afa4c4a6eb8d5e9b48a20ef409acec78a8c
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (32 mod 64).
-# DIGEST: aceed075f31ab159f6610f43ff0a6ed3a359bee1
-KEY: b8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d4120
-NONCE: 3f5dce998f8fb2eaad409ae02116417d
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965
-AD: aabe477e0cdd46be99371e
-CT: c3e61ff897b490847e6539236d2e3b208baca2e83347b7ea2ac714f65a409638e59a5dce5c3a4109e6d6cdb8a232f5f8a2577101f9fb53aa50918f924c1a5361ef98d6672258b4adb37ca5f30d22893dbde262fa9cf72d2913c1901d70a0b7c1
-TAG: a49c692364eda34c22ad3745a4339244b687f596bda16d4ff61c6697996214bffc78fe54bb30321d37f17a7ee146dd33771b9b922b475ed41e55de39f1573683e4c8147a9bc370d6f75882c991073181d3f5eaf31a9cfe0dd205540cf6a2b6c0898b3d1ebe351c7e036e136088fe88a07e2c512fd488dd5dfbaebe10e6627bebb2cccf1e9c985ec9f1924abd91d29f0862403c24496ba6c0535358de379a60adb764fe00f5e09f3487b075713a85452ebc21205279815653b39af6c7d84cb1a10178006c1b4ee3e53028c09ef59817abc2335fa2ee7a56ea18e2cbe533b7d30c80609151b58b3c711314b35d3be3df1cb6d5cddffc316a940cc78ba1734da1c09d1d05c2650ce3a0fbd60bedfef7a83f
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (33 mod 64).
-# DIGEST: 976ca4c9819e25a204a024d05fbe7420f717bc58
-KEY: da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f
-NONCE: 5dce998f8fb2eaad409ae02116417dae
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aa
-AD: be477e0cdd46be99371eb8
-CT: 1944f256989b6acd7dc7c334d10ce71d9f2980cdb6adb03784061096955a3e10efe7cbf1c0aa1caab97cdeee4d08a8ff34d68e1b53a0df58e79a4c1d5d9b7eadb2430c0b8049b6c43a848fbc5e5feaf16c5ae08da38f973b18e33fde747702b882
-TAG: 6e0c7a079e170b669fd211bd54c2cd2c51bdd5dc84c84e0da6104dd1d5f6e8b27847a4def48c030c515b680a5db67439f300d184d2c8fe18681c7fa25840b80f53ff494fab5e1694a604c1c12b3b113aeff88bc2c5bd31e84cf5474d6429b4cd08241e94a7f4276054fed2f2a0d863eac2671c9af96045447d6422b8789c4674feb8fb27098b5ef613f08573184271899f735af845e6b7ed9dafd4524247178415479fd60da081ae076331df7ea141df29a086b76bbe35dfd4f983e45b2f1316cc27d88c48b87d2934833eeb5bde5df0866e4a9d8894fc275d6677eda6ac6b41a0475aeb9a55ce7d7a04820b581e8565c9d9919685bdf0f163d77ac45a15e4717e2e716e49ddd079f18295bc7a05e7
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (34 mod 64).
-# DIGEST: ad8cfe7556704bb1974e94f70d8743d147c5c3b4
-KEY: 7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5d
-NONCE: ce998f8fb2eaad409ae02116417dae0c
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe
-AD: 477e0cdd46be99371eb8da
-CT: a850ddac6117f7b13e15c17621fc7c99f2276ed7337cde87ada287814150f8b3f3e8ba7108a1237fa6a9ddcebb07c234660ec93b8279bb4614be85c5973603568e885f5f8ea102d0621b5ba77fc58af4285c15996d6868c520f3e09ec5b6a468cc82
-TAG: bce897e6a5dfbd940ec2c477af3411901f0f2fa9436ff3b4da7354189f097d231b95741788b45e9a56e7ca7a41b265489578bfe8667b1cd64a2ddd765144e770ae13fc2e9ad24575bfb97e0e012869ebfb52a9c7e181e79bc260442d166550435dd5c08b131ed3850f78a2e1df8a1ed026d9310a83f0b8449cf2baec42d7d7e31c4ec56d9d25246b34a479ecf8ab850c65fe8b2a6361fd185c25d6f253f556aa46825c535a4a54b855148e032d3e1ecb8d501802db1eac194a4bf7f3c70f8b8c33cd88d3362476e2080cbb4482fd9453ead6dc62a0dbc0649e41a699c53427ea8ff93fc9f2353356f695642ce7db49fffca401e9c275365dd0a339e3970d5810c5667c234986a65e1ce01e827e27
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (35 mod 64).
-# DIGEST: 1dfd9608adabb5a55e12949f1c4bfcd5a77cb703
-KEY: ac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce
-NONCE: 998f8fb2eaad409ae02116417dae0cef
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe47
-AD: 7e0cdd46be99371eb8da7d
-CT: 0cc80c78b73b1bd898c6af38846d32837ed0712ab7cc48b01c6dd831f37237ca7634c90aba35b35da59b60aff8e6b9a622f5a481c98c03fc76c1375e4602e96c08a465f3085ec86b0a8e1ce8757df761400be6510f1cdff60b05bd46271650b9e5d5e4
-TAG: 34a24675223b1e1d363b941da5d1566dc42a61c7c239a6684a497e7ef90a78d29c1aba0a9be91a8cc8a7cd578c77e62db1234da2b913e9500cf81df22cf481ee43f0818be959ec7fe49aeb7be270d227f633f65a003b19060ffe8bdfaaacd2c20ac65b43254252fb2fa8d2264f5664f3fdfaaefe7216c3f8bc6957656d218d5f98f5b377fd675a21d16769c499b82d4fa54be52ef8c96222b83fbe5bd3b456c9d181cfb5ce23639749e9e22dbc3979f07910b83c200c82a3dd449e5ae47486bd7f2cdc26c3beea2d3c490a801bf587e323725be1a76c32396e5c5ea24a9933706260d5aa16c847e00bdc5d96b0b96652a2c73e6141367debc228af6f944bcfd65a9269a7fb8c912c25ae2a6e8c
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (36 mod 64).
-# DIGEST: ad2b43eee27e6267d8c5c1c3d558a07dcd6b1f5f
-KEY: 997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce99
-NONCE: 8f8fb2eaad409ae02116417dae0cef45
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e
-AD: 0cdd46be99371eb8da7dac
-CT: ad918e7428ca106cf043d6626772cd45ce998f32fea28c3253fd58f0fcc191bb4cd250b5dc6a7b352bb2aaa66601e280576fa60ad8c3aa58742462955fd7f33ddbbb5036128617c1fc3bfdf83100dfdd069042ad1887c2821afbcf822756226c69779d88
-TAG: edae83839ae4bcbcf7da661a302815b024d7576e65ecb70c183411003b1d6c769a13de3444f82c7783ff5593d9983b369833cab8dfc80120e35bc86d3b00c307338163bd5de5863a1f2daee49b4f535ce455b131eba334b7c995dc25640833c6c0a7bac710ce37ae2b85e58179b57218e801c4a7e5dc19cb3c841c11c299a72efd9cdf249e9c4423cfff588895e38e5b2d166344ba53b083da555ae4a1e0278f5b7a557e9aec08ac70da44858306df69ad968c017f8b4c24a0b562be19e1f6416841387ee3cd9c8f7c8b3dd1fecff0609fc77c4d86fb1e387cd1932775e58b928f4022821c0b9dfc43912fe0d0755b2bc2f88682f6b11eaffb6caaab1e295755d1256810ce16d70b306ffd6e
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (37 mod 64).
-# DIGEST: 3dcddb1e4f49633e7b7bd36f4056d16c53be7f5e
-KEY: 7deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f
-NONCE: 8fb2eaad409ae02116417dae0cef457b
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0c
-AD: dd46be99371eb8da7dac99
-CT: 8ef4db8a8444ddd056428a25b718aec0258fe05b5fe8d6d972ca6762875c030fa2b4822cf03e797a53046749e39646c8c6b373a1d77287f4124c19ef758eef75db8e4e03309b3d14e918bfd9499ae5c9e2f3079ab7da8ca7f00ab69d14ad96fdba1c58b813
-TAG: b78d95ae68ef1121b27bf93eb67605bbcbfce1e0293fa37e0de4a959cc0a1a47a374f6727edfa9aa5a330e5c3df90a30d371304258624e8015a2fe7583e362f045087ac9ff6bfdb5371d9fc9d55f7dd91bf0310450c36d33538ad5f6057d0c8a0896217643c4f95ed6c93ec95dc6df838cd43d6f60dc3d48d489922dcb1fadc586dbbef4200a6b1d67d2024493fb4dfdaae7563edb5ae93fa2065d750a10919484fbb1389f93d2f28b62c8c6708122e0abe0ed22ddba815da8bd80393fe274f545e463dfc5f26bdc207f3f056263e799b3c89f9c740748a37b7f28cdfdbd9bc89155e466e9a1830dd6d0a206d27a588c56c3b6dc92d5202dd30ec0a2e1e31a0da1a5ddd9d905204f47cc25
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (38 mod 64).
-# DIGEST: 25b982a242f669c013cab1c18da425330090e3cd
-KEY: eafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8f
-NONCE: b2eaad409ae02116417dae0cef457b9e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd
-AD: 46be99371eb8da7dac997d
-CT: c107710a85a49250f3a4401fdf07a44f96560ca5e71d6021075b7b6e3ff8fd6f36c652f186dc82c8a21a8a743dcc007e6710214320cb5c5e788f8c5b020e4d0d89ec2fb780c9ea915966b9f9b1e2cb0f26fb6bf1aba6e6501f2571ef1299918d4d2e6b367e22
-TAG: 3e7739cc9f98881f03a99d95250d460497e445cb24b4f8783c0010070484f8f379d74903d9a99f6a621791763af4e8e94ea305642643103b2dc0a0c1342f66154a0b4c4cac63e79d7121a2a44991273a9e1111208b3d9a5b6d11a6a28c83d16c9099d0a0247bf4670717ef0e8e6bd4e48c893ae189cab4f916862a8ebdfc0cb26cc545a9a08f01f8b4ce545914a35924f728c4e914b8cea6588116e9ebf592d4709e0c4efc8f0f8379fb30e35e36bfd68946ada030e35af5ed510a6061471659dd6780c1356c3dee7f69ab449a402456b63abd7e7763b4020db5216f099ef78a2125b42fe508cf94976b8e4e9ed65b38c254818e6aed084c037efabad7bd348e4e16099c7709cfd9116b
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (39 mod 64).
-# DIGEST: 9d7958e23777ff2472f5a24dea5fc19c151dd921
-KEY: fd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2
-NONCE: eaad409ae02116417dae0cef457b9e5e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46
-AD: be99371eb8da7dac997dea
-CT: f90604401a507574dcfe5d7c5e0c36c5fa65d9a8f0a25daaa9fe5c50ffb3758f52c9c883c2f85d879f26845a130044d395b58497979cf24a9e18ee1f27d1eac4d0cd994a6338c5755c74419111b2bebed645c3d8b8071a7b5304eab2c33777eda01ce489f4a6d2
-TAG: 8a94c9c05afa552672247d156dfc8d60e9e3e1e9eaee6e58c8fd6c1f9d41bff32571526cf035ef595cb5c5b2d64b2a98bfcadebe5ff66a6a2299af8e00fa27e621217c5ee1542a86ddaf93e293d01f20ba5f9093c1fb7a1b911e659027beceb9518f59d20cc54f958945dd44ec38f73fd475647a008de974e50facab9e6e878e3968249a91b4f71f4f86486d5e3bc2abd6dcc67989f58521ee78214dbd29bb7aca0f601842b1d36833748069e409c58de54f7f6e6f17b9e05127568a1566e70254589675f2802c153bd5106afa59e00ac753fb9c3f67508deb5bcb4e25d47e52852acceabb8e5e955e16c0b4448cd313c73ee2195f185f8869165de7f30a68efcfba1adab85e2eb975
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (40 mod 64).
-# DIGEST: 09e9eab51bcb9faaa3bc3e473ff66b06e39653fa
-KEY: 64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2ea
-NONCE: ad409ae02116417dae0cef457b9e5e16
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be
-AD: 99371eb8da7dac997deafd
-CT: ff258ef9f318036586c5ec9e956c10c9423ad3a8a5468527c02bda6878c45398b0c78f3fba4eba3785282b3aa4586d31b238fb941546bdd6e3d918444d45f79b2a5ce3df0e8769a952243cce1f17f736d21e44d8d49449e017e9aa5ea20863a2f6b2f7025de029e1
-TAG: c113b619c1829f799e045047dc1587c35eea2e9b5735e9acffb8d5250acb5340d7e48f261c58f6e1dfa213980d35df3f14938a5d6c20908290444308c31cfc08d07cc3258a5221e3c8d72031ab52ed92cca76a189eef780048623f82af821d521b0489068af4ff2954bd73dbccc6d6d4124760a5c71fbf88435af2ef8eb24197c8d7b23358baa411d87dd4439249fa80b6f00c4a4c500b0b7113151bc4f385233318ccb3bdaf779d41c433b2424bb3651db990f9fa72649d657bb823f0e73fbdf08e6f81aae0552aaf37370f139e85da70fa52422fabd155d567988d1d2b930f89f72725d97c1b1aaa67217c552ba1b6a51cd97bf2ac7017a2a97298c6d86bab809b9b4a7e1776a8
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (41 mod 64).
-# DIGEST: 7b17b7cb19107af8fc4671420e461060e2ef3e61
-KEY: b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad
-NONCE: 409ae02116417dae0cef457b9e5e16dc
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99
-AD: 371eb8da7dac997deafd64
-CT: 5e654ee6344f96fa117a2e1f9cdc08bfaca9c83b1c4d61891e49077c8ae7a8aa604e1b19995b32872087e04a59ed367e42f0ad3998cc2112035b33104164403a948ecf73c516f74adaa57688cee9417456f996847e0c637120478f7d88288b5403f0697c4834e4ea7f
-TAG: 363ea1d1325e86bb389f4c97a844b76e43d76fd4750954352aa52f5cd174c3d902a71a8265fba870b1b0e3a1add011914df362dfbc8f075cb45d2cca5498b48c49f0872f8371bf37e334c33dba4170d101dfebf14a519d37647748d92ccbb24774caf56204c1e7efb4b765b63d5ccedc308ccf06bf614e7695bfbf9e416df526ad21c4fda82cdce18ea647b6f99fd2bfebeafa94e8b9e83fb2d85fcd5f8456ed2e374ac383230dd39c528408e3b53a92a3950883f6eed412c1a5875a5db61b98c089daf3419522fbabcaa33479d4f0140963f1bb788a2471aa0384b44c0c69a4fc46a892f9ec8cca4cf0d048e30eefb1a74f8fecf77a4d61f97e4835a85594d1df3a345f720fca
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (42 mod 64).
-# DIGEST: 48586ad2eac603c136911b28e2c69f101a8ef371
-KEY: fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad40
-NONCE: 9ae02116417dae0cef457b9e5e16dcc5
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be9937
-AD: 1eb8da7dac997deafd64b1
-CT: 59201549a3446dcbdf5c3fa8db930606f6e9bd374d8405e15d55493a82035491811f784fd4f0e3bdb6bdd2e01558783a00b32c53d7be31525343a5a2d72921222e32891149f8dd38303ffb584485df15dd4c6917d4d8ce80e1dd5192f30770873895a0219cafbe8dfaaf
-TAG: 30b74b701e2777b537a16fa9b2d3bc9a86d718a4440ac3a0475eb675b352f215a847a286f042285b50764d14ddd3b3088189d7e26b96cdc33856347f3173c7cf4c9696ad560773e65878c4f8db001bf66a9e27e7f42593e9dc3f206e64502b4a11a235d5ff29cfeba3fcff20afac264c691a847a0b6c599bd9f7e4a57179f46b3880fac1b6cdc10444ee5875470d25c8a7bc20196aec1f028aea628092b5ecc973a058f083f4157dd9202d1f6b09c72374ea668041ab18045a383242b5e96ac127f6ff263c15d0a4999f61153ffc5d53bb77ed11b5b8bb3f2071b8ab14d92d161f7e39470913043b316ed3bf9baee35f8594785ff0f99a39b72e918bab81c49ec6c4c4ca459c
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (43 mod 64).
-# DIGEST: c37456cfc543ba6e5848b9b8f4ac5a58a104b521
-KEY: 65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409a
-NONCE: e02116417dae0cef457b9e5e16dcc5b6
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-AD: b8da7dac997deafd64b1fc
-CT: 54a2f87f11c6597b3013a0de46b61a8fcc28ab021465178138cdd76ef01c2701b3a48ca4d3cc885173bdeb33b7b27f9064d2f09ec187d0c9c482522fb29bb421595589aa69ec2ca4155f503bdb8f0f8d4d2f08531c0deaa386b9adad07e8aaa351e76ab938e435c7eee05b
-TAG: 2b4f8a42097dfe879397a6fdd13c8e2611399c3c53d5cb5c0e41a4a49b99522b127dff5bbcdf4a5c6fa79440e8fecfbe1df30d34df7c3a399cd79164cd39ca50a3bb6ce2b95a46a3f50e47c9041dbf8f39aba1e807f66984619c62499bb5f0bed727c5214efe67ae9863b99daad6b2814484f9e96c3f6aa5a31417624052c69252de37d7f913e5a2715459f945958adef369e59fc7f704ba9d9646870561efd3c1bea0ba785a8a39698d7ccca3e0b6a6dc3b2570650ebaee1e133488b3a227fa97a8580737cb4852ae3e04c11df82816ec4d6bba8f9e63c9c48383466d9d145d27d18358e822af696a8d7c7aa65e2bc7ac32204a8271684e3803347423608666e23e90345c
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (44 mod 64).
-# DIGEST: fc113d192686652653a15887974eb1f9b8e32248
-KEY: de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae0
-NONCE: 2116417dae0cef457b9e5e16dcc5b6f2
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8
-AD: da7dac997deafd64b1fc65
-CT: 0f0483dd1e9ef91f215f7f9817b7f82e0b96c0d3b2996b2a1d878d0be3a70c07a4bbbba3721e646405a8a7f44347557d482d7899044af37f6df054070eb4debf7471072af1e4c98dfb3c192e956b2931967d7fdf200b464be1ff1955a658bf86faa659db9fea5c63d26c13af
-TAG: 176eae7a290cdf30272c219178d7a011400870bfb2ff611142d4e16fff9278cc5778770605f8914f09c3509fb6ec23bf5cdca390cf8dc0390502b3ac3026c47c167079f12302b6ea7eae668b6dac95a5541124aba8ecb8de4cac6c21ba17a2423ed4aac69e3292f3f4f031e9f54702c432d514726cf02ed646e0f60ed672b5f212e62aec4e51c8b8fbad3f1689f1b7dd775111695a342a279f7725da6ffa0e5a2ff5550159208bd30d28267c600e6b183dc1f72fbb4fd8013c5b4ec93f19dee5864bd854df3cabd5c813d4e3ec083d55ccdad4a0178e5d6cd262843d6309059033b987e366e66c67a3fcbba86730b5fcb4786989f86ff9b8a7318302123e0d53152a2a82a7cae76a81b017fc0b883ef6f8cca921
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (45 mod 64).
-# DIGEST: bb6e5b5be84ee383caac0378cb6f541726ecf61f
-KEY: 39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae021
-NONCE: 16417dae0cef457b9e5e16dcc5b6f256
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da
-AD: 7dac997deafd64b1fc65de
-CT: 978a10e04037ba7f0dec2576efaff6e5e4de5ab80b4b0c0b8a6209e22da05b8be0f832883e371c61c23b5bef969c004bf2a0f0fc8fbf1313078e12af2b3569a98ae5ee76a9bbb6da6806be3356c02dfa607c26094fd876d8f9dcc0395f3fe356b0a51d1f59582a7bdc7da9971e
-TAG: 9b37a729911834f666621a052c9d776f126e500cab45ddae7ad020874d77976af6ec581efd91dbf46ccf346a9dbb3a42d08d23de1cc074788f6887c0b15d98610b19fd2c00752136af3faa32e933518093d667617ae1dfa4e4527779bef7ccc9a1b82d8ddc0eb1d7d9247d0382c6d98ab29f60bc897d28483f1c69fe9b0d37113d237f7b3c3509411058e1c0f36fac6014b6c5937ef005a7fc2e3352da4866384d63c6aac2fdf74cdd16acf782022e4c5f1fa528cd6c977425ab19d800664577b5e5cf0a82e7ba75716c75bdf87eb8c7bdf7346c89d453bcff89ed0b93d9eb1452b72390a799498e31ae691460e5daa8ae3506aab4877cb82e3378874c6c97064b33f969786ed84e81cd1c2e2925b56266ca72
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (46 mod 64).
-# DIGEST: a27799fc2e00e7abec4c5939451a834c4606cf7a
-KEY: f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116
-NONCE: 417dae0cef457b9e5e16dcc5b6f25607
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7d
-AD: ac997deafd64b1fc65de39
-CT: eded0eef58434338153caefd914cb98ff516157445bfbd25c3c5cbcc0ad68ed1bf049ac292da027acab0310ef08d66040341721524982165cfe7f6dc495f7f5f36cc410470e3b42045b718f580713dac8074b0e76a0345d11c94a9800bb5e5eef1cb8d9ba5818799cd1ef69c4ed1
-TAG: d7459df78edeb89e01ea8d685b5780b94ac339c36750f2d5bc09009c12a22893348bb74f8c38f96451e5204e0d940b9b84c6a89eea61d6a78eff111b806ad4a50c8456d13f79288cd3f3bdde755083dd64d13e1c887d8df5102deb5a23055a02b6cab1021efe6add18d00be8c3afd6f8e80bc539c76003caad47c1cf95085bf48bf9ab6d487ff4cbf5bbbe0f2a2972e6a165a2e5ad230f58fff76fb8ed563b810684daf4b5902ec8cdf2442c323e7c7630129a89432a1795380a949f1113facd9ee148e2d38d4457b508155dba0d8d4812aec13d67050e70e2ff98a1fc1dffa01dcc7eca4349a0b14f2507687314c49b3fe7cdbde2ac840bd8ff7fb7c36a037e7b7de485183fdcfda49a2281645ec1b153ba
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (47 mod 64).
-# DIGEST: f30eaff92a640a397f98e6803623e8d1f0c1fea6
-KEY: f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae0211641
-NONCE: 7dae0cef457b9e5e16dcc5b6f25607f0
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac
-AD: 997deafd64b1fc65de39f4
-CT: 7c433fc5255dd1e11f67c499c6a89c16b4b09355818cf304f11167bef253dc60c95486a840c3a8f77440f63a5c6a855931a90eea66a281d51d4198679e1420c824ae5c8bc0231444b65b69832b84c7b5ee2fb8484ac08727eb0cba0c14e7e0a9071cb0cdcf73d5d83ce53bba361ee4
-TAG: 2e73871e9d71defb381e4e7d49d5d45880fa3effcb0cfe673ab52805e6273723cdf99557ed9ca838aa2229fe8eeadf7c6d94c91e867ca023fbb2d2835e420a3b026fb5e3915e38a7ac02d43a8c6ba8a149e99abec42967106bff6c80adf9be5c76503c95053c21472b9a338ed4c9c11b161ce83e2d6190f87e4dcf169e945335cc5acd699b983629d0bdc452f678232be0d31b9f231aaf4c3c3df79b1b8b2fd8802df0b71cc5e26b2a5c5c5ff0616bdff6cc7b1f09aff68d5e15dc9d61c1cb6a2c9602eab7794eb77af8bed198fadd854e8f8a47bf6bc11a8f75eec584f1901fbf012d1fafc03604ae49f9585272845677a1cbc27261d5d7fbe9bf1f1c9ea42c61b110cde99a3a602fc9eb6c825656d804
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (48 mod 64).
-# DIGEST: 7227537c0113a9f46f7d332a0b37ee5303483d00
-KEY: 3541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417d
-NONCE: ae0cef457b9e5e16dcc5b6f25607f00d
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac99
-AD: 7deafd64b1fc65de39f4f0
-CT: bcdda7eecf3331f4e7605cfd33789ab585318bbd35047755402372403a4df125e7f5bdf857e49a3f74cb8e824576a226c1942fa86de07bbf564cfb384d8420a367963020613dd2f6bd4f371ca1b53532a7015dfdabd07497367aea8db92981418eff6b51eaafe2b6d5b3b4d1b8b95659
-TAG: bea683141d42033e86b38d5e0614716ed53b7db5df93b0aa48b15e0111a46ee93c2971df88fa885f8f32e81222d9bb4b605640395e37e1ba474a17f0df48c488dd5a6051be2323f462cd94f81261289f076d60cf5907cac601e2709dc191a9ac5ef784733140ba8d45edded7e58d7316f92a9bd5aa86d6f8441604261a38359a8cbe57bd95522db7029db058a8b175eddaf8f258f2f479b348451b0786f15336e18077ba23eac377ea367d7e1afc08607ff63be2e613fea2e6097192ab41e40342e36688bad628ec273897c86e75e0b83d0d85fd13e850f29cfbe171a8d1b33b72a344a9e2bf292f0dad2ca754d45651a2067d9fb18c7a1845a9c145d4273ee2197dd0b4da66e88a7425a72fd541a78b
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (49 mod 64).
-# DIGEST: d76570385cb65d30c3d636ff25c5efeb8d1ea08e
-KEY: 41a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae
-NONCE: 0cef457b9e5e16dcc5b6f25607f00d03
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997d
-AD: eafd64b1fc65de39f4f035
-CT: ccecdb03830e84c5267a5b6f68dc909cafe94a1c872602961e8467b4b2723af537d79d723fc4e8f0397fe169186c23f50cf9e78af3156f507bfd38181dffcc05695583863d8a167df062cd16aeec0cc548a7b5e16b148ced8bc2a60a33a583779fef6d7160e0f6c31a03b8a0f1ed8e18e9
-TAG: 5175c37f295f196bcfcaffb35c4cfecd88d1b9c773d3162c96eb74a23722e599ac728ad68e2ac70369e0c6d212826afe93cbbc61abfc309d3f4a6f0d22421e02d711a6c97b6592b561b49ef5f6516367cbd966414d9842eb963c79bd4a8e1550199fc9cbd58b5fa5b898db2244769a950ee62bf915a074d5196732ae69cdaff05266bbc049903f5d7c702633741471bc3f8e44a426d201c5ad5987db33687db05a42778617c253576361fcbeee62707d9119cc76fa0627fcd65df7bdfd26469bd4e0265355cf885e2e515d56307adb91be258befc45ce8b238f6177d24f38ec56f0d64a46124161992a30f8a64355823397012af08f1df378effd1f67fb30796956fcf28b0ff35f618060a955b6311
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (50 mod 64).
-# DIGEST: 170369666d1f2337b29b5f14af68d47910388e7b
-KEY: a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0c
-NONCE: ef457b9e5e16dcc5b6f25607f00d033f
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997dea
-AD: fd64b1fc65de39f4f03541
-CT: 2828ec3db18423dc583c7ac7dc5231da07af1756d7c032a866c64155626be3b3a686a93699023f6e421da24596baf99b45244d07d86a8973450afdb87ff2e9dbab6fcef52cd476f1f25f27f6bb3abf9b406704a14ce9682613125139b238d985ab8f68c17f7b824f279c01d820fb70502dab
-TAG: 6af6f94f0ef92665d286e08fad2845c4c43f985b0cd0f09c6c6b4899c350a1a342f024c3ced7e54bb00b96d0e04c6d484e95b585a687258f4bdd1c00eb1d3f44e959b2dbb1444a292c81c92e3b1a01622fa377a583117bc2e170ea8c033864fe7dc09b7a9b1b5826ac8e38fd5849ac9024bcfb1c587be93b3da485adf297a77ecbec2a88fcd82e7eb952b6d012ec439310f624fd07de7bad33a5a59b72d88cb454d5da32d52012258c8754cc61dae82b26f8d6df7a4ca384ea88a30e12d4b07bc413791cded177d325c03a5a6c532641ca46ba2560cb3072733282305266985bc4afac41b171b28aae50266a00afb5a778e1c481a7799f29ba588ed3ebc65183517a31944921ae3a040731666daf
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (51 mod 64).
-# DIGEST: 7c52593d1d37b0dc380297231c6cb7b64e04c493
-KEY: 1be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef
-NONCE: 457b9e5e16dcc5b6f25607f00d033fb9
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd
-AD: 64b1fc65de39f4f03541a1
-CT: b463f7f24871b617a1001d2f73f9eb8fe39b5fe0b382d420af876defd68a893add2eb6cac45e56d669f4ac67a943a3b32daf0932072bd701f9291b5020bfa9133d2875d8f6ee78ce8c49d45b80329831799f1eee8c712683300e49c57dc8c1ad0b07465184483d669b04c183976289e3ad6070
-TAG: 2e8b0999a7792a9cfe5148a8730e28ef92557e1b5d9c318d27d12fb1356fa0dff3467e865c530d4f20fdb765f7ec7e56b7ba28fb49309bdddb413182b07670cba711d6e5e3c086b4e4211f0f19666590bdc9a121e1430f6b0c64c07eff2d81e47a02d375fa46bf8d6fb8708f3a247287b595be7aa19414e3d2d39785a0bc8ef46b547bd4805a8460fdab65d81866dbc496581ec548c51f601e13289fcf3e45f1bb4a7777f9a9243282681aa1c746fac4a8433e1f477950eea76c24d318e95f0586eb5d21a16f8b2b58a14c4780eea922b97de4b1ea292f842c662534bea84213924e837cb546c26f3bc9951eca7593f4f01e3e6360cb14248d127a08d5e0b77f438479035769e0e12c856bf3bb
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (52 mod 64).
-# DIGEST: 09a1659100052d13bebb4defd7f54f975a58ae2b
-KEY: e112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef45
-NONCE: 7b9e5e16dcc5b6f25607f00d033fb95f
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64
-AD: b1fc65de39f4f03541a11b
-CT: adfffd8a654da994aa8adb618cf69b25ad5dff201cd3a84314796e0228ae3e01be77cd8052e950fd74e3d8fb0066705874a7319dda8bee7bf7748ad844a70b1ee0d774a6156fef109dba8346a68b48458728ebde458e5bd777a26291f98cafb175864fee2d335fe5a38f1738df9a5aeb13f25442
-TAG: 0562ed87899d06eef5f3a7680c110360e5338af0b78416497e18291d4e8a75a219942acedc7d1493a15f6d35d1d8cd27b2bb26bcfd58dab2c747b4498ce1e56568226987124448509a7852588acf2dae587f0d13ca2ba54c50ea37c10e6c525b04caf0aa519662f258dee7fdbf17568ecb924c0f26701dad0952d3a57a8188d046439d7e35d73adbb39559adef95017029a9f6392d7282a1c84eae663d840184da4bbcbcf9c262d69ed2a7743aee175150e03bd3e6c38a8a1a762614ba2fbbb631ef56ffe3746dc95d9a15eae1f4f88e3180569e73b25b8eeb8474ec8dee041cdfcca5219514c5125395d83de633bf5bb05e4771e7a583f4e6a6d20af36235090454f8acab43984fda3f5740
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (53 mod 64).
-# DIGEST: 230c3353ccbd95e4f0acbbb0073053a0186f833d
-KEY: 12a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b
-NONCE: 9e5e16dcc5b6f25607f00d033fb95fb0
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1
-AD: fc65de39f4f03541a11be1
-CT: 985481677ae867b2427182edf3de86d7b9956a4970b107ca7e01e90ee7cb02c6b9a46212e1b8ce67e7aca5e2d96272c2f412b5f16a7c1d00fe597f1390c3a686724c4846c78ae66b26ded18adb40f0d74c33a68032b97d440104cb7acc755ad7383c16013ec7fc519b293e4c624b132f91c44202c7
-TAG: 62eaabaa53e386ce7d064c718e4761d14092263af3027efcf5c343ab46e1133d3131dc3cd7dd6b8b8d9ae6ca172fc10f5887dafb169aab9f0e7eda4a5b3436750ccf47f2e3e9965b46f3dfedcf38d61dff3cea927bb3ee8509d6a4288f2879d04095eab6b9e154d0e22da31cb51638ae978a0c5cfdac346ab551d359fdbe9aa34e9ceb15051d7e04e9788240a030c0ab7c19d00f32da1df539f08d158f34a1e3fa6ee8d10ec0d99675a3465c889fe2b6631ff2765a6b83f594315768fdb30c27d2747a6e9d4c5724a5e93704a1851d606dfe97150667309b27503b09c85d86ecd83caf1ec456ac19b7fa273af74714611b3e9a3359354c7b983d700775930bd90a629d88a3cf7cf17f5058
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (54 mod 64).
-# DIGEST: 701e141608e71005d32dd1e29cd068aea736c9dd
-KEY: a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e
-NONCE: 5e16dcc5b6f25607f00d033fb95fb09e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc
-AD: 65de39f4f03541a11be112
-CT: a06030a844e38f9e049bcf318b10e1cd2db6b60a2611cf9788f0c1fb31a366d2038b3a1692865b926196594850807895523a851a993b77e49c911f840f28aaa42b4f427eead4e2a578d57b101bb4795aedcffc58212e0eaecadf503e3b208eeb72d53072caa44677d6667a0d22639db7aebc2f70ebb6
-TAG: fabbfe986fa42c58408b2f008c7fed482ae568cb39c938aa531e49a85ee71fced2cdd2ebe97a35295977ccef50433b41c511d424a47274599f3f2a28678a4936c1382d6a9f5d41b4266ded97a2fb11ce4e4df03f9e976675b9b35eafbbb399eb86a79a8023de822f8c0d83da5516766f141f83d8075a77e7c55e987cd181f02d8d6f7c90775bace579d25fa1a969e4dec07a5ddbef63c67b6d76bff54dbc7fb87f8af639c392a8a32bee35255e24cc63cea90445ddbbb75e4c594d6d1441e198720c2fb7674822e52d0298fe24c6e1602fec34038e62a55cdfb5d3fe6479fe6b02b5fe648792636e03213e402f02e2a3cad928996e4b1d2fecbd97ec5ebac5ea2f9c4989599648b0577a
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (55 mod 64).
-# DIGEST: 9aaf96b472ea76fd9ff4adf56dab5fe0400d18d6
-KEY: 2933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e
-NONCE: 16dcc5b6f25607f00d033fb95fb09e4d
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65
-AD: de39f4f03541a11be112a7
-CT: d934f61f94d2b0aef2b63668352d2af2db2e225d0c8dd86b8d7c901de7425dca2a0d2f3bae9dbaef4946d18ebc2d9f4cff5c268cfc80b89c35f7b1a3de12173f9377a7ad9b33751fc89390cea9b44e80423702a9848c6d2562d24838e3b0511b81a737a4b65fac394da45f62f1f3b2bfaf0b4f3f0c5ca5
-TAG: da6ed936480fd159c32347d94a17ae7bf9344d4bdb1bc0921d85456e9b48a2e2c24769bdda1cd6bed0b44e980873ec3c79b4346849366ca6d6a77e8b1091c6657a009691733da37706c0f480244ec0c7839648cd0eb63a28eaacdc8b60b1ab59f7d83bd142419a5a548df23f019e560c0c9a307b4c2498f69386eb13d4dcc64ca77c8f5f7c4b6e0c18a058eac72426ed4d541477e3a036b9a450af234670c94a4ceb7cd19c9ae113477431fc2ea30738a95c5753a4b8de9e0e4e1a0f7d52f67b2957a39ff1c6eef88bac3b927ab004d64f3522e0db7e80d27309b864996aa2bafe615139732cd492608cc128295132a4f40a70f8bfbb5b18b2fa45c55c87db39872bc5c1e3300f446f
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (56 mod 64).
-# DIGEST: ac6871d354eac507556770d8b6bf10b5240273ed
-KEY: 33c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16
-NONCE: dcc5b6f25607f00d033fb95fb09e4d00
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de
-AD: 39f4f03541a11be112a729
-CT: 413d2c3fbc77845409ad66cc13432824ae4ae109379a9617e8b93d4f9b17fe0d0450476c3f98c229bf35e86fa792dceb4b3864761dd442c294e43b1cafe1fe086cd1ca5e1572fe2b3753c20a74b663b536f6e686d9765bafb10566f2b5cf02ee24e3dc69cb2be9392c991848b840418835603bdd83b2cf0f
-TAG: 5df250368694b1d3b11119d8c787df534fe4526eb31af32c9289b0eaa4e9455b5cd4a44c13a335857f67fd2662317e086c1a299d794830ca08ca99df1aa79c8f49589dab551cc6269129b731e4d560c7e330fea2aeb5f06eab87738bccaae53b9661a78f3f08986f454519097a6c43837931a56caafd581ae52343dcb71b98ee0b36cb7037a1eac81f308f292eca92ff2c13c3b807aadaffc832f43ed98c0cab6174639b1ec48f3e8e3736f7a20069aaddc2414f1edffba78bbbc04babfe6d6f1a5ae8f77931f78974edb257d2ea6d5440bd7c8f8283ac0e362e1959bc35bca6f257da511f456466be60ff7451887e5ff221f30547e586cc76e7bf76dade793565d733e5705bfcf5
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (57 mod 64).
-# DIGEST: 050258d6ad6bec54f8bc48c7ba2d669d6416c11e
-KEY: c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dc
-NONCE: c5b6f25607f00d033fb95fb09e4d00d6
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39
-AD: f4f03541a11be112a72933
-CT: fca448fd13c6877aa9fc299953dc631df8024cebe774bb14839821b05485c4a8f1345697b072342343f6a5479d99d5ba0ab29db7760b1e21b37969333473e6fd16bcc5b52e1d6472fee31034d515f66439f092341036a48d637ec84d22af8d1848843aa33e3b2059f7f90a0db47dc41d8af3b5cd76f4b36ec3
-TAG: 3071b853c877cc72cbec5c249fe76736e87793118f0890200b64cc9b91e26448b327dd87eb314c4c074af49091051b69122a2d13b8a7fc0b15a87e7e26b791ab3a74e399d429ef4e6ed69f2036e91909b11075ef19c6554f21b5b9b90fe20c9c633f71c666519774baaa12d8f819ddddbb592a99689ba34c44e59792da3d7750f4cfbfdad6e295a73ada8957eb9a7f7bbb4e8f82d4647bd41d5ca2a51cee58be3fcaf307382efec054d880b5866a38aa0dcc72911c9e9ff902ca3743873618b2b35c45cb32e496ac7c8c69c1818583ea5016a57f6e912859b1b1a22bd701113e6cbaac2a935a94cc3fa0b9d4c23ee573b0054eebaa3414c936aee6bd9782385d690c1eb570c5ed
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (58 mod 64).
-# DIGEST: 70060f86c76e53512933c09deb5872eb23efad67
-KEY: b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5
-NONCE: b6f25607f00d033fb95fb09e4d00d617
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4
-AD: f03541a11be112a72933c7
-CT: 8c5849a917c328d68cdf4fc279b29efb0c3c1921621276ca19206c9941a5789b0aba7283e743f94a6e4142f7febc9ad35df30daffeaa5cd0cffe0fa2e4cd5ceb687def585b2634774a01a3f00ce2ca9951fb910b4386bd0d61d1e292b2b225ac55000fdce10131ba163c97f810a2b350fc8a59348253549e0cbd
-TAG: 5beab8f1449d50a6e4a1a747fc2b9864cad962480673db6451ef7aa42b42e7f0edc3748a71df8ddb33d6f9bcc9024c7170bd7a5b81577f9594a87d90fe96a50a62d31c01368173aadd7dda6f7d4c413773649fa7e5aa0c3cbd0fc760666ce5d5ec5e4209c4eda0a8ba0d66e83ed3337067d8ecfb81d3d1c1bed7eceea2582f276c43fc15d5c2bf9d2558d3c3f4d8cdb8953d28b0221c70330c346640f1ea1acccba27466cc0ec3c14729a78f62c7537b1ca5e9f9bc74c4571be9b67f04533b1f8fa2f9232c216ecd81bd120197b558b2733d3d9bab706f67670327465722b2be2c6e3f2ee507620dce326f28400857cc28c697c9b10df0d093965c21ebc42f34d71963ca85db
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (59 mod 64).
-# DIGEST: 58286fe273bf572a76a2725933dd969777c303c1
-KEY: 4ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6
-NONCE: f25607f00d033fb95fb09e4d00d6172e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f0
-AD: 3541a11be112a72933c7b5
-CT: d0076d9cc2f829a33a0b1972f6c0d8c67718a7593975798e0667135db3ce31b4d9bea98710909313a4a2af88bae720963ee738f26bde44b54dd5820992569e5d2eea000baf5de9e0f76dc8e0b93244a8474beb7e922a5f30a5b5977611594af25ed35aab12a61de68f215d73173fd38f586b8c509459a5f7587d43
-TAG: d8ffaeef22eb2181a48da72bbf57ba4562e3a1ebf9cd2a872f155fbadeb78c47e64ac6419fa1a9b1ce5a8e78e60ed1f8dcf02535613b959448f754b70d7159d2dd4814122b35418d4e554992b4789e04f018234c91de44b9de80f7ab406fb6fda6f086fc6b91ace53dffe012d703e71861d0b3ecab86a287a76857781254de544985ac5b11bedf29138500598f757ae295d8577ae7e597e9cd915d15124c7f1d9786f9666bc4b69eaa18e28227d87bdc8935e537d12360b53746ad0d7834ad830aa5307f69c3e4ff6e37ee6ba8937f75723ae4f64c2a04949b0db60c979fec6f485dd0cf14cacf5e8d0e624d9a8578e4028b8076a9cee1e5a0ba5b96e9f0f6e6ef98ae84a0
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (60 mod 64).
-# DIGEST: ae701e5c8672dfaf728bf0f43f5e5247ea9ac13a
-KEY: d4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f2
-NONCE: 5607f00d033fb95fb09e4d00d6172e78
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f035
-AD: 41a11be112a72933c7b54e
-CT: 298f670117678bd139c60399dcab68bb0414829b458c747b0dda5dbd67f95fa393bfd2719f815a12a2b7c6b3e769b61ddb4651970b30451cee6166545d8e4c4554c8217898186dc02684c5025ee692e12130ab41ce75d79a4ba1a4dd02e0af581a645979c1a3c8c12f5b13e9c1113316eb31b8096b4eff1bf3f7ca10
-TAG: ee9c1cae63b819ff804cc5a34d59d17a76539b7850d5164ae8ab252633acc10145c2c71b1a10b0a87cf2db361c6aeeae533201457c5952feb347f739b3c236845a887fd0974b052a4e71cffaaddd1f00c64c47251ae446a5875e1e1854ca2c032b4e01dc995f35d901b60d042aabcaad3c08cbfd12567cc789408b6710d81b6b7c6067e02f263763d74bc039e0430bc1f3b4c01f95f54492a9c5b81b8d279266b378bccc9073bf1f1db1ddd964f9b6b7ac8771ffbb55d1ff9d973cff3d4eeffa277427e0cc41a4457ad6c2f035b1c0f93880aca55888cadabcccfc9dcf53dc3924a4c03a5a7bf8416bba76d8a362893193811ddcb02b0a9ccf2ffb6902d7e0c434cc489d720487f4664d60f210433b8f71d98666
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (61 mod 64).
-# DIGEST: 4f498d0aa9205160827626ef80c163275eca1f78
-KEY: fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f256
-NONCE: 07f00d033fb95fb09e4d00d6172e780a
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541
-AD: a11be112a72933c7b54ed4
-CT: f72c519566632f89513f3f278407845ff8096a5b63929f0ea6009c3cae0dbd853662c4017ee5729eab92f2c475f0a45533de67d4b941d4b16c1964986d8f4a16cc12f02c28442ddf5790f321b3942cb65964587f3fe55ab28064c52ce3d3598d3431788ed2c26fe1b196abfd35afa0f7c8206a6bc71d61cc4e1a086c4c
-TAG: f8c75274342950e4893ca3b0e9fe95fa51343c628e1f04d9dd19ed928ef7af0a106b6bc6b70d0ebf552c0acc51b5af94dbb9f4fca444ed4eefff63e4746af9852d727d4465695b1113eda1becabbc56e2860b55b986d6122b93bb822865ab8bbf1409aef68cbe720befe0ebc6dbb639b3be391a161c2d9ed65a2898b3ea7cd993827aa8f2c60dd0d9e926cbffd8bbf6ac43fdbb61ff0024cdb9e668bd9980a39530a526c3c9cbbe1e4f46ae3e8229bc5e7c8b91855eae7a2aaa1b827d8b99ed19843aafb76cd361259c29dba7a02dfb40d9bd2d580aa12a6951f0f53ad5b283443c5bb8b4c9fcf569b30830d1844860256c18d753a8d80d1d0e8656623b1a06700fc513a7099590aa566d48eb6c078c4472d4f
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (62 mod 64).
-# DIGEST: 8c043825b2a3764e8a0cc35a011696fb3ed03c2b
-KEY: d0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607
-NONCE: f00d033fb95fb09e4d00d6172e780ab8
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a1
-AD: 1be112a72933c7b54ed4fa
-CT: bc6acdf0943ba34efbf9eb27fe9e968f23bc1d4f1eff7f86e836621422e7ad8e1adc03249475b6be8ec5d3e96e167af7e6b85ac87b5da2364b1e0d87d5c49d43ddea8e9b796580fc4fea7774f8210e4ec424aa029717937bf76b148e8af72e8badcc3f12dd259fd4dd9a325d81cfc7a193fb756b5d140fb703aaa6d71496
-TAG: cdbcd83191a554bf922180902fd060fcc63a8dc39a90ccbca9fbfeefe9a09a9da72c8782f6d3ccd9e2b5a80816eb5bb6919580a8ec186b8b1e388a561b6c931b22dfe62544456f7344f4c18c4823f167b2ebb8a93e3edb8181f358e66db5a3966eae5e893e76b16e8bd5da922720f754bdb6edf3496b62d79b14f00f24c1b30ec6ea16d88cac2b336f2bd057e68d6075907de3c9e7434da017d8bc5348ad79ec14182e07fc70f4e33ca2aaa2216d29aaf4dffb583c1b5159eedd66a2515127c3db358c1ccd89da4cefaf75a6eb5a8a80396ffcef783973f552645885e20b91dc0cf4485e94d943ea4bff3704a4bd2e23388090fb7ff707cf80b0c71f6d4560b3be71edab2e0b8d5ded1998f3b1df51225495
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test with maximal padding (63 mod 64).
-# DIGEST: f3a432271c9be858725fd024071c4f479ca9a971
-KEY: be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f0
-NONCE: 0d033fb95fb09e4d00d6172e780ab8b7
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11b
-AD: e112a72933c7b54ed4fad0
-CT: 0e87c57c18fdc439c968a9dab086c88271be6dd00843879ae1563e4ed03d69f9fa09a29c1bf99b1c859323eb8452acb2f808f051669bb5e097e23b947369b5a0577157995d729a75ae7a65e293acace3124a8aec53328439e5f2103fc3a236728682fc129a5b0e203bd730303fdd23962d6ea7a35aae3691f6721dafdf18fa
-TAG: d7453e8aea805b4c95ed51f1033b386cfd74fef1c205d51fe351ec3b1a3bb2e2b7debd8b20c688f4c516a61fbaa690eb635fe2974a71f45d1b4e2fdf3be4724c3eacadbc6d295ea9b6f53c249783f35898ee4818a67ce5b002f17a48199c779b17482ddf5448b6186cd979dea3d9c7b0ae3f106c4b90c960dd8899a67e9f18767b49497519c86c0b391098192299e4f85862d150bb3e439f05fc9f937c888c4f40684c25018fae0c6fedee92fc0035d073f3704f61d93e7e321a19512561676a216127e6a716d1f5ea43b67dcfaa1ffde7380c066efdc8acba10f2e790d4839419dbed3d89634ae785f7aa3ace1fa1720757066f4b75b883c0ed592b8cba79a400d5e442e23716a7a13c252a7ce156e219
-TAG_LEN: 20
-NO_SEAL: 01
-
-# Test if the unpadded input is too short for a MAC, but not publicly so.
-# DIGEST: f0f82752a691ef5866413f2b2e5c1d0ebb41ccc8
-KEY: 7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4
-NONCE: 183aa23fd8d7efd88503f78b8ed1c8e9
-IN: 
-AD: 936a91d0b5d2c0267218cb
-CT: 
-TAG: 9e23dcb5e3bb8c16fa099fbd135af44ba895a6ae14bef6699210bf0343bf9e03e529508c859dd6960e7639138e8ea271ab193ddb64ae77fcf7d31dd7a8ebebeb9b0653dd8f16b3ef5710d518144a2c546d8c51107f3f7075e04f2e68a2edc17acae579c83a11aaff0d26df7cfdb0b0afaf374a3fc1754ba9cd93e29e8ad0feef383b8f7935f81f15267c212d9051d1ac4762f6fbb5bdfff1e8c9a867add1c2e34ea839780de77041fee67856e2947325d39537f8bb915e4f312d7144d1bc3f562413c68c42f8c6434c8afeb973bf32c63f85c396852235c1791c0f1aa5ba74f3f176134d6eecbac484cddab9d14a94d979d07fb305b35d7fa0d0e57dafd8a05e
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# Test that each byte of incorrect padding is noticed.
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97c1954dcb829d72bb8baf23ef37b700516a6e5b7377c933b949c8864144e8ca0a13b0280a93c2a42285c6548571cda2d857613c74083f722c022d9c90a8a51e981b3b2305a531d604c211cf27248d1d46d671ae76dbd1decadc684993e7fc444a9513d23c69fd264298d3231f205801a309953e41c1a2f6a6770eda074d640ad0887c7755227553fa929e457293bb11ae4b064e413997a21916331e3194b9abe91eaeddb8321040cef865fd2527d3dd14016fdb216dddf8dcff5a659d76086f1b1149c466c7dd3e72b08b7486ed34f7d1816db423c15112e865cb87fa0b0745d910b961f7ef02786407a6bc2fbc6a4e43efc2e1f5d34bd99ad853dce8df7db6ce
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca975883e45e6461c9e89c5bb5f912d4a8fe273a207df1f6bef7766b324fa0810688dcaadf5ff0ce0a2a529a359cacf6fdcd7550bd2b1573f9d2a24f0fa9fa24e16111cb16ba039d8fc17bc0a24fe6fe6aa24786e3acbfa9e54313c637976d6a8c7db48db3ea1c4a149da8aa42b8455a1ebfed371cb1ea287ecb569c59bbad804707d93514731816b9f71bf786748d4c473718cf4f3ee13c29e006840107022822c2f507a1a6552a394fd7c73514fe10020991d42fc7b6413756a61cd63533841aa556f1b98f6087a65475dbd66db6553e8169e655893af6ed6509253a2f5d1b1c71028931d6c28e6d2fa81f2b46629ea8c1a911542d89b92cd354039670948b9d3f
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca978990d885635bbd7814f02b2a32544be86b61160898d7e3970ed6aa2a6e8f6b112d27ccb2601e90a964bccfb169fe9204a3da3a4972c6496fa0cbd6f356e219d06cd6f17dda71cb5b916816934dac150184d65210276cebb5821e2738c57699f96691d4c19c866de94e9990844d547c083bd4d4642803789bf6f2fb29e22760432d8c87f0985f864301e034c89127f88c85a68b0938246e735a303259f7d8efbd8420648b74f1428b02651b9cdb61e41b85c5b36d735145ae5b91297a45325c72486b72d69df0f39f2fd75fc494410905c72b654717bbc7e10646e4eb353f88c18f2427efded0cca0f57708e4123a0a9c4190ae99af97f03574a050a218420297
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97f653af6e4ae13512054764ee8d232e9cc05d5f9bb4f57d58a0ad086f8628387d0903332435b44bc5f824f0c797f2112a66347f604d1fb62f2916402d23bef65103ffec46349809ead2d897f1bdf388a5a054c696d176c57ef0ff94a4c587fd1e74c723473a15704a214a2889cd0d94d98950a324e46f1f215bc88ae34a55be84ae1c551260b0a61a2c39a322dac47bdbd5a2c4ce7e073f269bcd4ab7566482dddb06818de46b7d1c21a45262e93ff8aa2df2624886b335c1cc0a4023b976c91b4ed3cd1ebbc65cb0c3e786efae5e4748cfe94f63db5e3fa841a102fff74efc29b57a34e8500a9a7675ef3117079904ae55177c649fa69cf64ad7895f3aafd12b
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97b5d213334cbc15a12c5560a9a908cabf5b4f3a4f0e3bb0812e1487a1bfe6aa25769a90dc8f0d1766782607aefcc4249d04c6998f347e3c60123b99843a4f25b1e60b7b7a416c36a4c53b18957870a825b56723e553911685fb9b00a6bb6fd1659ab05cfdcce2da4440299c05f50b98114e08cf3925ef22fa56eb8e213bc6d7845b60c0a59e38c5eed5c8a46cf32c936f5876438797088136fd31237cd0685b2c22c670508c1c24936c1425e47cd00b37cf827fa153c4924a226059b37dc743688ad605d10ed0bc060e01b107a6cac6cd768e029adc9c986ab3f30da8a10ca4e128124b95264ace682d33f4e0200817b26a83ce7ac8963753d22b595b7e23d54a
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca978d9b855d162c28d05112f6cc00c06171bbb8889e9033513038331a6301191c52d4a7067e66beb0d09ec08586ca29a9f2960991ecaa6dbc2760779c04ea42e84116500bd2a059647de2273eed863d1251f3e9851c65ba0e96283ded3bbfadb03fe44fdb62e466afffa7ceb31d77e579eedb243c8228bcf7078e152453bf9651c35b9ea4bd633775ed31baade716b42e6bdf7360a870f8c15bdf3c7af63d229bc4fbe4ffcb706af3fff6dacdef024ff11acc2165e220e059f3cc14fe6a459d5f12c8e2305e7e579a61fc07220d2ce28c14ad94048d636a901875985465418b80ebb6334df62782e31774bc89ba99fca83d2909ec4a754975b6b212e9ad78bdb6b3
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97c15a0b8ddd7692280ef981d5f729b3ad2535f460de9067f891d120e866cd718888a864e293425aa31ee2f59470a81e5bc8a12af2e15e75bc8a8a7a7acf13f9bd1391fbfde54b1073c67e20715719b40e4fd6914b8f8ce40f3da18864f2f2bbdfd0c59702303723429f6f248a4f7a84d3e222bd74778e650da5a6d5ea3a23b802d3515c4d304afb1bf337b9102fd0bdeb19ebfc7c458de6bd0630e0d8b3c74d9b36cd991a5a406d9d28c56d8875f999b0e49a51cbe361fed9434c7ec4124d3905e5a103b5d73bfca98cf34725205ebc57cce68535c5f35c86236acc0c5928306d1b9333e278d3542a442c1e418fd4b8617f759b212a0ef6ebecbc85ef12bff8a3
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97e3bc785d9163ff8117e8352a4ca7efd8da1de6e0141a2d3061dd5d1cdaeefe60c73f5f350437093f03b1fcae30ce628322bfbeddbedc3b9cf80cd50f4e4901a5d4a1ac05d89e150ea2199c7bdb68063785e3d79f1bc21e6c80787e638f062a920c59c591616fc437eb4e3b91b5ec7dec05a1b1ae6665d12fc8745dbc833ad1bdd607964568734b554ecbb21af226eeb7f33d2a1ca817c23a73db11bf8c0cb8eec5261669a8170d5e22c1049bcf4d9c541c1cd99b9113b1e76fbb627364cb8421e828aaaac88d3a2dcfce513fe7a195cab005a5e603f0cabba1e60ffc51f6a06cef83e0fcb3fbe3cc7ec97174d598ef0ca387f6aec06886fd1053e0d9e1897d82
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97c68947fc7ae4f54867fa7630881e45a31399c51d71c2a3f4d349bdb5d720d26fac75e9010983a87f291ac3a7b43b04320fdc1fbaaf6f54a1c982c8c2fc6c233f0c89b230f0655f54652ccd77967161d0f081fd6fe93f27081e0aa66fe285bfbbfb5b05b8b7c53de8a4ef72a82adfc88ac526161561bcf973daf053d44f053e3eee5a7692a9397d5e393d90dda23b69ce0dc9497a27a02ec0019da21311e89a74d83662b86c98b903b5dd91fada3c6ca6d839d6a3a307286388da93d1f1f721ba57938acab207f7807d1235d8ff15133fa93d6ac4e03c19e837c6f6ecf680c8c5cb5aa33e08f4441b87e9f6c17237c10ad9ab6229ea170f4c822dda4d4d194eba
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97fe991554171d8fa89273f712f71992b79ccfb4f26d68c1fb81ebcaf526e6efb37f2e1664dc666b3360a540ee3c520b7f135ba2335c357a3dab1257a2d918aaf50541599482c754e5a03df4f3e7bf00baf50ac945af034cb49816838fda953891a37b4ed44da65f832ad79aa16bef86ec8dacb250f2a73468232367a995a4aaf4b633cd8acbbbd7c3948ebe2bada8c56dc774b998032be2365567c0337d27ba7c9514b9f71950cf3e6ce8b6ae3fdee8872a0fb418eaa6bb4d6d5b9fb00e09fa8738162c796d5483ee4123a69526d2e900fecce653419eb549ca3029210e326490da1384bacd98d0b062458e713b64aa08ed6b56011225196313c8d09225fc3018
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca978ce8aca0fee6c4ee6a398a8be738b04536a3acbdb67617ca7e879b9ef42d40a109a6fcbbd2898249b08c90ce4382e289829e3b59b6625fc80a2fd497679e4f83ff69281d727946e32f9e8a80953a95edacd0b372d8621a118f5b17fd83eef14ac6cb4b477fcd35f94a0385c5993385a362cadc8cdc70029450503d7935da8294268837c45262f2a3de566544340fcb56bf5a7c95f1c7cfd47502c8906565d0fba89844ed56519a8d0e091b7e946e21a3df455ce040caef15f13cfb9d34456a91c1b70a7719cf4fc38db1a18c2b4e12c991e1f159470640f1e1f0f55bc04c3f9c0e626ebd627c8ee117af09c3aab8c4e7557a76636d9f533eb965ccaf1d678156
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97a84160b9de87b65f221f7fe4a93871411a6a45ebb891211da4442277201b06057e87c7ce4fc9e1430d099eb2ddd7518c4d1dc891dd344ee7e578e1dbb95908791aa0dc29dec371104fa8b1bda26fc2340a29715db914202b3683c779be1dd971c82d9484b611522d46ae623d6d73c49a368857bfc61c0477faf528549d543427baf39a513a9ddff7c9f42c98e411e0bea4c592f883993bf0e7db802f6d62cee5823224a96407c1315f743fd456183aa30ad2c8670454cd3956882854a7f9bd4f9851effde2d5cdb1ec351f64cdc6f8f20bf57518c9496c2ee3ed3e8d3f11d7e49bfd203646b24046315327944ee0fe7bedfdd061d7e074f36f993b31b48758c4
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97d510f62985b03068f1dd613c3abe1d3ddbf0bb3c3592746fcaf9008d1f2701505b5170860d117ad96841c30db7489eab96cccb2a6675880a20a712b2e4c425aaa5a8a12680b341ac573cc8932787866d154b9f87f9bd419dc2775e540c96cf4e424978b446fc41c6ac332cef7af77230f033f1930f5c34a0718f894fc48c7dd745265547e6cd27a1f5522c6d8f50a3b778e292aeaaeac30b6dfe4fce24915748bcfc100d3166831b4c8eae9449b0cfd5104a7de90129426fc1ee3d9c05cbc1c37cf8b74cb1259deebad75d967adf0fe3dcbbad1aa0294fc83188e33399cb00e9c6cb0d77588f39ab84066365cb5f3d077be6a0de278b228861b79e39750a3076
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca978f7a64b11a4be63fc97263480d04ca00fa7510aa0fa5a939cf8fada5afda5fa01a5c20604c44829164d2cf2f053d4301df8385724924d41d61b8c35aabcfcf8e0211f98e1cb6fe22a9d9f3cf9c96c4717daee923414614bdea16258b1561ab1c15487659e1ec4ceaccee32b6ecd6f71c6b26633588ec4a60265ed47c9d4671fbdfdfa7a2e8c6158938c82d4b4d7c00b59c7263d7a73839073dc2a6721d100c0bc94c006498ce467be58455ee03ca9df61b87d9e7fa40bfcb3a5d09d3494812f0e476bac5c84167b426720470362051ae072b56726ed9ce3528f1786eae22105a29cfa93b52e64398c7f9278151bc661c1674933392b16f9090cc5e848936ca8e
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca9789461b9f7b09c9aad355bd97a615f70914e12a6bf485d0b051067017c8080df7bad54f3819895407e031c8dc666602ca0e3bc07d6378d4f4f5d5420c58a7aa4e2c20e7214b5540d6cf26ef6daa0517f98927df1ed78dbc87fb1c3bf79915ff1b72b4d8829f6346337f063ee3b3679310552f7cac51638adc8da14124880c1aca85bf08af6f43e7b1dfa5592352c58d7eb8e9642ef7e19e7f27748abfd65f30f878d5fe6c2c7db9f1216811b91a220f3446a12602e79e4886e0881fcf61f1b931e914599d61e9a84e0c5e01a1b11a046dfe08fe5ea8724dfa2cacd6947abc8b5be77cd21da64540d833744eaab1695e3e367b6632765c066f5b23d1c5e7fa5e91
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca978484b37c2f3ec87170152784f329edb9d9948745bcf8d310b551c51114d300ce49938a4af9e4bec586359d72289d4369a368a487efca7c2a98720d8427617cfe3771b6622ab4ab27f236d3c77deb1f7e8b08df28eb741cb9d7b3a4694956760cfa5554f76c9720f9e05257d8bef58fc0bee5b25b48164214d9e742f9449722e0969a80c8e3575c542afa7ff9cab186dff3dc0fb2597deb0271661a0f6616b292ef03be0c7036b098f8a1b0b9cb9182a7dab5b2b4ba1b8a0c1971800ebdc1f651dc33c3d87d848f84f8d900079a0c4fe540dae52f5447d5582162693cf4db4e17e964b1b1f369dd470a46b9294b4aecbe2002679edf9bf0e399a9ddf0f9edaa23
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e629504477d93cc5bcdae9dfd28b6d86aaf62779941f936ad870965fe874f1db6f0f31058018c16334fe0f183166d62a3cf46b9fdbb0f956514858227c045192f7c3e73092dc4365aaa1cd74af69e0250182b399ec3f9fe47aef83d97825ef45ab24084d0fd0ff6583f6d23b886f76ead84d6cfddeea73eb4036560807137ad28a4d67c34677e87a9491cf2974e6529297c144947179d73763dbbd0030934e5b6b00b6838ffbba99efc837efbfb43b70217994c7069270d2f8e4be1984f7a8054e66bf9a105ee25939bf4e6b92e02485cd1674ee296107132fb26c32a7a030f8b5f9ecede08ee67618fe79edf171dd14d69040196
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447caa5a66821859a2dc0e072db2548081ff5e1aebcda6b4199ff0dddf58dae9152fd9461f319c48cd3e008ebf374771d9f0e1b9a462f99388622b75cdeb8be988e10849c325514b9dda1f8d6363d1fd0ee45a4b67d2bab4d05de5467379593218bf7113c732127ff40df1014516bddb528d7509c8768325f0072bf29507611b148fcad1eeb98956b94604f44e9f0be999fd4f84216aa0ad3d21ded254b718a71a01aea874d8fdc926e27df34811cce98b3529c3e89bfa363708e014b4a175f56b167e12b949dbcf9bcc01e6a47d6588f0f39856b51b351e80886c751c87d88ad1804ef187e2bdc070ad23fdbaa03f3834a
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e629504474a9d2b06ddfdbe267b3a97fd65725236ed9b3546cebda726e9254920d87f9ff1d44d0a6d1787b329b198606ef0095cc0b2d885b8b4af3ee69a8ca0375cab6c81db9b788c3783f92cd20fa991213b4271e59b792ddd0b677ccc9e9888dcc5e60c5d2e53deb3b64d2def43e8cd7a387f62d84902872dabfc69bd5ef03b0c6d0fbbbdc9afc9e6bac85fae183fbaccf1f74d49a7f6d5839495f0a12af4617f3673c4c1bac3c214d8d0c27490e85fec9235aaa3628a3f42292bc4d38cf3befce825b03b5e90946769a2d5c2ffdce80c7165bf3c3c219ddc53c18232cacfb20ed84fb74dbbf19c1662225e26cd80381b039dd2
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e6295044757466e5106795b66a6387da578daa1d592ea5c97885e6429d4b2074cd60e3a48f25375afe896d1c775c65de33582488dba86322b6d99ed8b9e3ad7e9c9645e38d0c9d7e0abd136b58d52eb003ae701c892038d87b79e897652d1e5f1faf15681fa28294865099e771a2b1ad4887f9745bfe89fd8a97ed03548c66becced0cefc46822dc60afa266ade705961f81734daacaa6ad53a8e915bd330aa51e26607a2dcdb1f5d1988f70bc2e00db29fd296d7e4368eabf0de80fff904ce7ae5f1973aa9024027db038dd7d2a7020670cd5f5de29e17f6605e093320b9eb19b49bfccaba11a093f4a4ce567c8ec5935ffd58ea
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447c735a15b2505840c1dfd310cc00378c036702be3f4a9dc5965222fb12b8ac10c4c759bb737bd096f35f0d45ccff9f70f309e8360ef1e401279a74899e595233ae62663701463cbc115418ecc49b8f37cbd5cfe4d78c30c99fb4e1e83fc57c285feee4860ac0d8b9bf9cd2cec827b7807cb95ee93ff0592ce5c0c2f54f5498f63f6720daf7a525b70cfb72b207bf7bf4a6d7e7222d873bf305f4dbf619740fb924256f9295f2e33d35f4089b0d44b9ac41c1b0b138db13bad70a7cf47508c9558bed88586fba96701f10d3e83ddf992e91780a85d14979acde7e083237dd2c48b09e1db88aff7fde9667429c5b1f46ca3
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447972e7787a03db3b5a640513542a129074fd43d853c4eb850943ae34f3ee0dce076a1ef06868dc146057174546843483582d54a4cf5eb2793d744ee8e4200f00f53f14f8d6d3e58eaed777578516634cb37bb667068b173f67ebe05b6ac18b73075cec23d43003ed18ef44480f8aa77daf3b291dfa31b9e047c5072c09c4f0a380fa84da7ee1f910bc750135e9c6557a3224c754780b3d4df3773aae59d2d39303409a49637f99346b38388147d0315752ad64cea3ec960bafc235340da18ae9bf632a1e7dfc7d12860a6fedff5a4c82c43c2c45ac2b83ece3a118ac07cb0dc7b23e86f8b94490b5c845e9513c52c2c87
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447d7d578266eb5ed8052817f28a1ee1c4a2d57c214cbb4389d9fcaab674fe16e1eaeb835fc8e56b2e55a421e3a8ea2a28404612593aae15020f17806661fdcd1ec33ad645567594b8401cbf213050aca4611c7a2f9bc5b319c66afcbd3d98201fb913afc4df280fa1f6a76c4f5bc5eea21e40b8539f18872b20ccefbaba0671c72c5bdf6bd1edccd12c7377b0c70a9745013eabfaf9fd30b8aaf8842c818004f3a1ac219dc701f3c62428dfaa244146927c7cf63d1222b128bfa364265084c15c16665a1c8e772dae3a88e0bb3c075f91ff4ad8ec014d4b8eb61a4ae9a7ccf30756d4b6b8727ce2714389b903fcacff085
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e629504472856fdd33a21aa08b5d75a5ce3986e66b47316dfafe9a198a4bad0816fc409bc90278815d738162fe2149714eae6a665806673e8b1f07b4ad0daa33f862f8bfd43cdc5e3769529e68c1db7cf8df6113eaeaf8048b57d62695ebfde4ecdc4155b63c99eb32577a4f29f459982c99012b55e10cf2011ff5e942527e3b5661c9236f606a76b4163f19402001458c1e91ea3493b48763a293207974cca60e6ad902718660b037793a7a78142ade1f58e44ba12b6f64864baefcc3f5e52086086d073d928690e3bdc463d638182e8da13d6e8272b71a529b81d001bb1f066ff4cc938a5e10398f3874a7454f02be9a89c4087
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e629504473a859f6ed9b3e29a97f961f893905b9b0f5137d39711d0dc8c28c689b8ad5537d5ce4a2d9d11bbcf1dfacded581b51753d06a4a4d3e4a8106023cb89cf153e8a92afd3f4c88439133139e2c45c07922e05167b417c7fe400df3a8de3e5ca20d920b131949c693732553a30eb584164afb29d172fe2b4971a82f8407c5a13d27d3ad75de801784f51f7c412d5f1bd88940900f4b895ac7e8c80d3e976154d77f5646beff53c2ec3370fd9f2390104983fd01ee43846973518f9ac28db0474a2e5d35c7d20e55519e00e23e534bc4c256ddd14416aa2d0db90094650558d095d017ad836002c9b38dfdfa6ea9368df1127
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447527f28f03d1b0ac9b893534df88f676da599195bcb2cb62e885f860e34f0ea30825ac077406ceba90011d7ad09bae5fe980e579cb83758e57cd6cf6c2c949ebdc6d264b6dfa62baf532dd6f41ffc7f80707876e092be70ee3a2dd977630f1a66227d32d9f6a5acb16cb64e294a71f9b334f5599cc20f0bb0665716e69ba757765e41c55ee8085297f9aa9decc15c67aa5492052bd0cfa61a35700038bb6418507b53abc942da8b8d56ae4514957551f97b2b10c924a09c3bba4f92d1749e3ade97d763ee0abd5e15aca6401701077efc3baf8c05d15a1fd96df7c9aaec171990ac3344c43fb04e8b2ece7db9641ed2da
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447a1ec93d84ea533bef16d27a607e6f36f546d6041e8ebb6779af52f89611e5dece90af839522463273f9a0fa902c55515e39510d947b63082d1025b16aac06c891ec41e553f60df6f09883dc7e65ebdd66779505bcc6bdd4a4cef73badf29edd99156ba9232695f1245af4f753121f3536ac2511751972589a43773ac84ee053614b49c59bf70d9553c2104c83325777679e261b1466a7641f1fca32356d9bfe61cf853117e7ae6df08c32936bd41f02df7d8112542727310dd4044cde9e3a459a1ceb4dcbaf2cdc13bcda5284ea5a23ff3d3582ca80dd3043b3b71b5a47794b6799d32b042cc3f205ed75aba173d88a9
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447731e7b75ee401f3a1c3f57f5a32dd0ec8ab93978d60025f2a1f7ce38419ffd461befe968260d175e9b9d7369cb69a74b830f6a5850f5506188c07bfea225ed6030e88eebc28df0f888c126a17b2f127f1cab288e3e138a026f9497adf801a397be681359fd6d1b8dcceaf5af4bb4a02108d446856ae88a2026dbca715e46dd910e1fbd205aeb6efdf017ddb044914d9f5958ed1fbeb9f1440d15ef6b3619a439d166ce2aec06bb4f47174bd80fd45932aa4e868f3d3b7f157c084934f5ac3c0696b5d6c70a065e385e7a69cacbfa092181f58bf36c76221e58aa1811977055320dbba3e32930c1e2dcb6e6010567fea7
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447458b12e4410770cf350411b81957e3c04e347fa69b198ea8b6c83a576cb85914aef7833309d3e5ff96b63121b7c3f85cdeb7c2a76c77d1b4985463985c3f9dcc04d89b4634bd3e68d906e462eb0d8b46d51a07a0a24a106f87a97cb3bca0f8d9bf37ba9520734dbb20c58680e02d669d09bb166f672172a4c3340c77c8c685d75ddc728ea3f3167e19d05141389f5c8da8821ed5762fa761fc1b9d3592120e80490f3285a0909d3ca1f81023c3a04ae0121c63c7c45cb11c010ea6e8c1fb4d73f5ea402ca6bf4a57ac28de10939da6c61ae13feb2c5c728176b809a21956e99a57a26819ca229e68e5fe7fdaec1610d6
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447624fcaf8375233318cd8dae4503858d8b1de1dd4e6e8ba0a3016c2827e62451207db10973556242f7ee9711288404602088baed9367444de74eb09f831877aeb2da0c95f6288544d62a4b9534ec092142c7ac253c3ee46c8c8086e462f1b5b4adc4d054c711172292375afa6cec2c553e3de22e847b678aa41ceb2cb08946efcb0f7ff9831ca57f34ed83ab26c6fbc54c4d0f353f278a8184eee9a368980ef58cc2a3e68efae6766616948a11f2eb4a144964d00f0dca7594c04d656d1204888eaa66b3d6b6632d9330c1e28911af23ef4b13fa4afc97364a811ec5bbf23a6ccb3904d060870f55373b2959d7f8f17b2
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e6295044758338e5c286964b927a00c8c327ed0eeb7b8e6a27966638d5641db3e86d71d85aa2eca6a2e7feffc00a8c40f1a3a455cf30c366ffa71021681920854c7a40ed5dcd971dc9d07437bc548a02dcc4d8cceadc5a0e4817c22e1a39ab52272f23597f1f2c9d44ee4306e0da617803c1115681ac7752ed280966bd8bb19d3d8ed0de88c23c28d473d4fde6ddd3ae86e7e5c667001b8e9e882452cc03a7cf3130eec7d2b568134db94727695421da4065720f07ef94710d3aca2c7ee4d9a5db8794eebc8789fa6aaad0825c0a83907a341f29342f51c9ffcee3d6ebdbcf6224c75516533b923ff0a547bb92e3de376b2ac235a
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e629504477dcbe76270a38b39d3a9d4844b21c3fdaa9c6fa930eaeb54f7557c1819ec053f6ae0e9802510c89f756a4d5d70444987e9ec5e85bcd748abdb28db7277e6656629fb6ba1b80923af19bf451670404f67358ceb28b5fc86f3aa4a099e8ede47f23ddae9b0379f42163feb79c9985460008f08879975612ee5b9054ab07558930709d75df3033cc09c14c4c6d0176fb6e730e379952521e095bf2e50eb1354d785b25349d21b8c7d56cf85715355268ea8bbd6a1b580d790c27bd1d46328d595e24a83778d33b46521159bc35d22e227815641662e1ef2e7b28e063ef7d54c6698a2b20a34ea32a006ee8c2bd3d36c90ef
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597eafd6d31e7f8776c644bec881cd2563da1832958bcfed82422fb2ea1409c0bc46e5d6ce37c9d0df3d4e61745efd6de5c396097f01667d5b5edc0b2369692358cbf156f9323da3c5968c898250a2b2bde0144e27d364263eaab0b893917b37bd9715e229264356d8012906f60f7c1bee1a5730f2d0c082dc33e99cdc78723d37163f9dae7d18d2a1b1fed432e23539809e2fcf66d57c2f72c38b7c71bc4f02561c82908f4b0f5e58bf8c80d8ba7450dc682a1892acef2252f2b7f22ad33b3228e092032f97e7b449082bfc19927158eb1b0c1c49cd414ae73cd9d29316269ed98f
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597e30340c5f596a78fe3c81fed7f7f180fc6b7973ecc60af3bc5f74633ea74a18eb2fcccb6bab98693d12f4b7e88b4baf98defb9d4405b77c5c75d2e64f9c3f7fc03ce5a5411601dae73ab4cb1f18c760bea0936107b762052d9d3c4b7d80222265a91fa0abbf64cffa66fe645ead5852f9c326b8b38e1f537787e66886a26150ff5ab0a6692053d1f6319ceff65ac2effa443fa485fa5b73fd02e221b77b69babb96ac2fb87b6a912da279aceafce064775d74a71ffee87894ec40e2d2e2ba6b4673a7d4d27078cd8aebf62c406610bb2ff5eafa8b161774c06e7a867362b5e637
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597eec4c06db3442c3cc1bb686039fb7404dd87b15be21e6bd0209d1fa9f030a4bce424324fbcc616b1df72c5f2a0490c53964736d24042a73a2e7faad3355694b45a7af4cc75a7046e2322f0a8536a5f737b8cd14574ee5c56d10316a8d4759239dfc2fc84e1857799aa013012bae6f9c4c1af1964352b91b099185422d6ed2a040f76f62ba486264135dbb13efc6e77fa28f449cdbc0eecc266cf072a4802b5ff2484448b4a7cc2ce2058d09e99ed08916e836ce3ab9cecabcfe1bec05b98118587ce6580ae0c07d6d3dbdeba3a7edadd8960f669279b0230f6d851eb2b6abc12f
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ef3a13ef239721dafc41fe370b2c29a9155e94dd9b682109820b6eb35bea85a660dad46edf63a66d4f26fbccabdecbad8aa59626f3eded409d92dc5e8098e6db5e8d192acfda842e3c03d2e84f9d27bd1cfa09c93dade262751211e572d9155da8509fb2598242252adba5d97972f58a619db9788f9b50f276beac43c2e6e9589d5642398a7da8591ef8688e36d291ef32639db7fd8923eb5f892eeba0d1f005d3f182593097f7ba7794e561ffcdded2903f47f5716eeb5ffe792a3ccbd13a27c9d7f5dcdb030c0d209ec9970c5d1ebc7206a1244dd72dbc9e9f786945d6c82c2
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597eec1be57df85a20bf65e19b68a36d9e938312a74c14c08eaeb93b0562c57126e4381c3a967cd7ccfe5940e4003b65e423822d0c232fec5ba5d53fd2730f918fbd2c4912061450c04ac851fdbf397c7a464e0ee74598af571510ea866d358e47914e02d8bc4b32b938bc35a04e6b25fbe2ac35cca190edd7b666500d5f972adaa76ced5a621de4c347fde9eb2dc64ad994f1d00660de958e17e7a2b6f4bd75044007130556742a5adc83ffe19220a691e2f811235e7d2b3e1a7e49eb4ba0bf12005c9826b0e5bfde0141a1ab55d660944ef5fb29e11eb48508cdeebaef7776c5be
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597e388d8fe10bfbc41804987f710cab90d14fff33a76ec3ee78184eaa4b31c25af732d614de935e57915e417f2f67a79c06ae805f597fdfc4f4e534fd2a9b6ce76638f0848c63bcb42a1f67fad98f88903d00ced0a8e495a94150f5ad0c9d18d949f73bdf5fdf190c4db968fa94ee0551495f5659d2aa563b79e6ec5a3eb7d8c3cca655b1e33248e94247ed07941ee3221ec015bdb4d2578c27ebbe852edbe2ee4748de49a413b900a6eda5c6bd834fca5d9474239daad22fc8cd716b90d524576693c1cae6eb284e258e4638cdc2b50110655aabcf9e6048263d97714d9b0ddc42
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597eaa85c2e6e570f7618ed1609f7362a22f52fbc866a418ecb5fe0dc9eb23c1a9c2f8aa735ad8687dc1372d6439bfa4fa78ac5c196db0e94ab3ec769edee3d700c15d0ba477da8d780eedfbce41bad4947081200e090d5e233eeeb0665a53ba9695b6956bb5474b428116f7c962e9fef3569d3da6d75617266c9100c61cc8719d46538196c16e26600b0677831fbd97905818c434165cf3f7d65d76ea416a64f7be6db4a92a680c569e91fd73422131da4106f5418801c7648fb23d73fd7ecb3341720cf355779171eec6275f72b97910d7d25638f7b22c18d073573809ec2d7945
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597e07a350450edd380e189ea4152369d2e4c37a9768dfb2885227bedf8d0ff3065ca0fbd21faaae991d2073af32933a4b36ba35b1596577fd9155771c4c14890ebdd89808bde1c46763060236427cc37d950b19a373d72c804cf8247dbbb0744f2d45b19a8563f64fa58c8884f3e47bf91c8931180eafeeea6ef52cd662f93500f648d1b7a0a87a8fdfd63bdd5f2d26d82804b6a6619f58a62913f3e4fdf91ba5d2d8c39977828346a90d05a48930f60e45a5b14ce1d93709e015afd6f73d95c1a4ea31bdca677f03122981c04796b1b70f5ccc7927d53e8eaf1f1e8638bb975c82
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597e15874fab8c81f34db199487e9a1499630e27c8602ee42ac566c4eb1b75aeaa0c48d97b0a9226db7a24ce17a3ae93c93597340331ce2bbb6f06abdc689211ae54d94929ae5eba8d1561ada0c87bfd2943a6bc361549354434bb88fbb0c07b8f29a560820cd3d03b520dea05aed558e18212af63f3afc48c0177668f20be99390272f7302d87f2ec8bbc5c67456cec10bd14a7d638b7cd4c8cdc1a0bf4206e125f5ab714afc3277a752e4e28f23e03a04f0beb61869f369964e5d7fee4fda7b231895ab19e46f331b1fa535fb4ba56c28de8671a7f97028314ebc1a766737b2e5c
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597e7e4b15d5a66966922531f1c59a486cdf2d289e54c9efdf45bb647e3eb50cd51b4490076b2135779ad0dec1d4ac678038da9621cc8468e13875240aa1ab6389936221c526a72fcbb77e7fa9bcb9aef0f9fcffbe6f44a9a07c7c625f570881c8979a8a24659323ca1e96b4528dab7f557ced5b6b3667c4da9e52e8688d99073df12dcac49c525eba34c4b991790d78afbb528eb40e408022da9c8d02990ee85f4066454608c0200cdc3f681d790269ce4dd62a221d8747c3e0a5837865ed19c75fed4d743f276ed3abe9c0e3cfd5cc167566652ae42dd204418174bed3f6527232
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597e0680d279040724fb8d6135de8b310acd04b06fe2cbe82deb1a396de764b3038d4b3ec5a4a01ece03a7f1b8fd94c802c3c14750176738bef3e4fabda2d7d0625889e5544930c2c758afa1281cfd4f2a567c8b7b8d0ff9ad00e2026c7683ee2e430af37cc00d10134f486e1131ad713e0b76721175af6713e20bd7cb7aae2f4eb41fd666b7439353acbff0d339f55d788dbf080948854ced95e4de712ed1090cbe2d9e8af81f872ffa87e4a54c7e53b4d72bb8bb3d0c81ef7d660f40ab0d11b247625aa2508b4528fbfc30b501cdf1947db56c173b522f7a5f2edbac1b9c74e7be
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597e5ef147cc27d0c52c50931c1c4f5bca11b88407512c400602f81da601a7527d87e4d5d0943148b66e220cd557180e725ef4aac14a4dc301ed3c1cd1e589a095d9fea92827b9d98a4ca60944df72ddd9b1485db5169a4d6a86bc005faf77b217577bad63ecb0f789d3becf893d7c6672773c2b52fa7393b9bf851bd87dfb16bce190a958d961c9b395e477798365a57e9faea81ec15bccefa07fab6613ca4d846920e2320c78c3eef88c9c2190f03e464531d7f25119aa9a2bfd936022c4b5c10000f10969297972434605fa1700af27bc23b594b7af21849cdd8dae3fd166fd11
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597e5f5d1b216a867e070a710660589a260d56c72fbddde12cd5f6f61694f17061e5fedbd43642a4cc9ca2f82b3ac80db2212badc7b42cefe9889fb13fea7c2734d245cc6a7d0680b7e6c2a645db09a3e82e8c6683335b9081b5e4216a5802655f0c9a117efe2f423dfe3b913548cac1b339181378ce05755d77331888c05fd8f2d17af7db5853f905c1fc72183f08927179c85ec196b89b25ea546312fa6e820a925c2fb450f627812a2541bb810e32f8991912e639edd755a5d3872a0d666a9928092f529f263ac933eddad9c1a53e2c94b6e30b88a9d5d4e9ed9cb558a57bce79
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ebe661bf10543f11ddb28643b032ba266167ed6fe7876d0c2f2008e4d42c56587120ec7eaf60cb9e8afedf54a17818a384378b4ae416bf967278df8f8f5cfb85451e704b795c27533999be17cf0066a590523015a77125cc3f9e89152a953b3be0078ac5510d4b127e88b0e7d024a99c46f789bc237de6219822bfa4ca4408bb1953b6e3e2cd9488b8c9a353a50dc5cb8711e51bb5ff98e58353f5dc91c3b83e06607a4ca6e9ac3f0ed760a8be9681e1d54785af9794c2eb28945732cc55ae3e54a11e330b0c424e3999fbe27f0e2e31083390fec347c624b04e49d6a7e5ccd47
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ec92c840cbd076544d3c9c1f9c5e684d1660e748c197d26369c2490a0bbab97a7044ddd06439c6eb28eb9e5e08977415dc42a3419229c33cdd813bcc5b10025302b8f15e7343a8a182cb522bb09d199058738a92ba40eabf20b01d4dd48588c74848f90839b0c6726bfc54aba430afe4ad71837954309b1efe0d3e6985bcea10b0a8ac36972936c5487ed9c7534663d58d877235d70da52447769a259c4e9f50cd11a2ab50671ad44cdaf328f9575feafa401b6c50275dac39ddc52ddf71b4e6dd66d54aa0d52201f935efd55b2e5acb2cab557ef49e8d43f5cb5a952ad355dbd
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597e06c977f2d7ad252b2e4be269ad4f97e60d72672f6dd3f9e25e7b96aff14c8216d2ff86a4b8c2a0ab58a02d7322215876de57cc54f73aeb1cbcbee001f564a63ec36e33450e95f96194fc9025c30d93639728d5c69d9fe26b5b62b6ecd1f55a28a28575c616a3634286a4eb99c2fd885f59664f8f5c5777c07b70471bf205750482201ef1d6bb270067dfd133f4c8654fd577ff5c6bf9655905e7e8f99e96091640bb99e129a3cf65dea771ed19ed9b38721fac8b41b5941908115c95ace4eecfdd1f96dfcad8c77ea1cf1911c1a7e8958a5e892a542fce9505e25092b490ed17
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8931dbf8f4b0bf31a0c78329581f879edf17ec58bae30bf9adfbf3d6a642588ee3176a8146f8e0af4d9e02e940fface84bd1774ea789f01f8655d397c0c9b46f6ad38dcf63f2abac0627adbbf5bbd9df5655d6dd89f4e8b2aef1ec82418f0925475404d9ad31ead9532b371428d73ccf12add978f5d9cfe3796027f924420516ee73273ba9b12c62e4bf4c9d0d8133f456462ef1d9d6582a2cbd322e7e1e0795af55548c34bbefd10187730f6f5dcff2607e380c8902ae1b5c559c1fca483efeb664402230aaee012c7b9746750991acbbc
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e89340cf262a2721159171e4d4da62c2ce27093a4ae54ebc16f0076b1ee089aaa456180a69eeb46faabe413ac306a96fa3c395aed17ab2627ab4dbe714bec2a8cce18664abfbcd428c976a3288848e50436683f07a91097055cd8960089bfef263c61d55080017516e7b7936be9cd7cd0bdf8143a6338355a4f3e18b184caa7b5238239ae2863b49f88e19eab626b5902f5c2e4d7d9c160f2808d0a95ce156c98501997db6afd280dd4f8094f34eaf7013e6f82d3d9d4b886dc53f74e76ed22a04d3990c596a44417a6fe2844d6a7c76f48b
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e89329dc7a43ef9d581e67b4bf85049d6574db02e8bfe32eaede9a9dc59ad27337d4faccc9cf9ee8f775fed0f85b27899f4b7c1d70fe0c30bc7dc0b87abde1ad81f55c92272c4709356678419cd9d9832c60eedbd74a24bf9549a0c39772cc6337b5043f9c79c0f076e5289584d01b6f428c1ea0ab0963765a846f5a5875eaa35b6bb140cbbb58480abbed3adba866f96f4c964b2789016d07524ad28370b07ea21a9f2ca86ab973901f5bddd737c8611fdcb848d1baebac5821fd29de05182f82caef4a96330e0d50d143ea11e60b1872b9
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8935d5472f5d66770ac1858278956fde6b36de729db9e8bf14401283cd5f82c89f4b3f1e7baddc5031e59a79b139ce5508464d71297b862c54a5f64325c9f7dfd2c2c9649a4ed050b5a25f56debf1526b150abbc40ef8c9b30663f1c2d064e06e418d1d7f4f26d96e2f3f6651d9b8aac17ea6320671a589e2bd01942adb3dde64c6425f1290ee38e74cbfc31c35727ce8d0fbe48a67e0b9646d8f23e18b114e4e127d3dc231dbef273db5048b86ff60ad998697404b93557fa458e594b6590b724a8be4f81429536f1b47d431e884054b83
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e89319ffe05c7eecc23c61e36e4c2d2c3d37c5b9152f06d687242ba10083988d343f8eea6b39c29b69577909747f618d8699ad7ef2b7b0c9c935f762fce73669f86f74e923e8aca3b50f25f8dfba9b1f1c6bccfd10e2b9c06d012beedcc4274096f5c77e5ca1fcf891256535931d064deaf552282a9c75a379322dc12ff5ecf9d3146333958a43bedd64ece1bd4c98adf289675ea2fe085d4ecdce6b672a10972803d01a6a645a5a3ff1d3015e72d90cf19ea8a5b10cde4f824e71e6e9aa5f32ecdfc678ca2d8957cd0fd35c39cab6a88ca2
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e893586bf0222884e567e6406560633f87cf9e59cfe75b87bb334a89e569b1959752fca8c49d267de03a71198654c062d5b520726381f43ad5f0db597a3ed236182cbfe2a43b4a83cc32c7d746f5499204a5fff0eb5e0c1c6f2637677cf5a4ab5b3f5bfde072c92227478486a1d78a1ddd11b818f5a3a48bffe2007db88c7895cdfb514c51ff59957f49e95ca8fcc277b3ea9973c5fa4ec361a1279e4f8bc4a5d289e5a15fe2a1cf41869849d8653b452bea33b7fdb1472fed82dac6c12260a06a529637b745e32508316bd605b4bdf426ef
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e893e5ce5b0efc12a961648fec1bd6b0768c65e996826fe52c4a417bbbec846dd7632f8a2f832b28c6fe050c63b8c6b1a7847285be3e9c7f66a81dc7f94d40992934e0152577fbabb4ac9f08e6a84682b1602d660b1f1dbc25891409166d690cd8dbd00d8fe08245e0438298b9adc52e8b5fb05ea73ae8cc317f0b75db64389095b73d727f1f6b2da68f8a3abe877b8855ddf3843edae5f5450472b082ff05c7d30e14d345580e1c08129443fb3903eb7673df655c9e06bbf26117744c368a461dca639998c73d3548690e664f14f4258d94
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e893e1aeb0cd7d81761ebfe0f3aa0b5e6855cdbc5bb51c99521e8dafe9cff970163e2f6e19ca8edda8b1901dfc70464c5ca6ee33b3e534f6471dc622dbe6225295cabcbaff33e78bc3be737deeb1e4065fb77a9115cd57f42247369effe4635c011dc7995e95a96ddfb013d57860fb5af9049a62e139bd50a6d5c34c06e232f5b7ee943beba648aeb10333c6f6b3a197e29d33d1b363d0b5f5d504f58b05c8861fbf35c873fe72b9602640e05187d15ffd93372e9496595ee1d020d37bf18b072e3f891ba9aa185e5b346930d47aa9d39040
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8937abb621f87dc1d875869595860d2455b9bbc5552ee6bd99546d86ef2ff37366043a877e0a7b48cd9bfcbc1a665db8f500c05bf431ae28adb4f9da34c73fd35ce385f7ac43b6c1aefbbe81c796c1e4eb5449047dc42df990beca41be2b9ed70060e7fa008078473c2805aadcd872063bb98601870e696b7acf887e52a9b9b0866afe89f5eb89775eb352a44f5658f3909a0a2c3f932f4bd7f074620c389e6f3623727ebc7758a907bc1a1fcb828fc6719f05a62de95a14d95217c01112c249c37b88eec4fb1fc64cdf3a25cd8a7455f56
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e89386349c60df134738bf9cd79ff44bdfc27392e88f2ca13ad3c6a7d5cfd8f5953e8a3cd7c260bd7554638e608a3a39f0d097528f34cba64aa13bb0bc97e7b906b92a41c4c47a7131e36723173c9e6b9d6687a3be3e3213e06dd8ec04596171aa2151066824dc8857b1ec468f31745d300c84739f3360c6f2bb5f510a85fe095247adce336fa7a465d9770fe1e760bbf8188b9fc06437ecf06263bcdeb3ffa8e86a6681ec9e4de80c3411b05afa5fbc1d72c8ebddaa2b1b5c6fcec23bfe28a1699b126b0e495153c21f357409a4565560ce
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e893a281282957fc69b7ca2d9e399dde32ce67d7f803041fd41ac1c5e29d838f4a5a61b5e41c37c77cd99e2086deef1fd3a1f52205fec1609b898fb3269270fd5ed70b99a5d9c50b20f73d83bb224c381b65dfcc63b329cd2eddc41cfb0a3fd34d10578dbf362364ff9e404b72fcdeb00f4f1d7b79c9327781e7f37922f3f74c8ae6b07af55cfccf47b3d3731ced97d83ccca7832ef4ce882fc9438e69eacdd21ec2499c5543436db3835691a7d45dac32a49cbecc752a37d584b588b56df0928c4c4f705a40af391e61b80e674140868941
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8935a6678457eacc57abd9fac0429320360be153d397dc6898ab6d2de9baefb9be9853042a17e2603fbe89126d7c1ec521d9d6501877196232f22e0246559a410510a937750e119953db4c141a178bb0949ee1bd4875a87e1da89122725db12cea2df70116e02643b4c4e66c9df051acb4e3ae9b49f531b887471ae9e216b6849eb33a99542cc03836f94f74583f13dd15863af8e5b0761eef7fed0f2de6847b6903a406444b4abeae4f879a1c64ab366b6ca251d0e041934f1d492cd96c3f66cff59d1c5cb1ae1b29bff4ce373a1306bf4
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e893f56db74314aa97d6a4816e78a1b250947b6d828d930c5332e879b4a9a42eb90cee0c34df145ab46994dbc339768bf5de29724220ab0b13f8ad2aac51aa6d29652e5102f77b31bbaaa398871befda8f2f5e59f8d86c807e3c496154f90710079fee0bec2f02a40ae0bb38a89790393b199b1d0a30ab77d81d7a3c66c920bd15053bd236c294e3ea02482c3b8cb1d8b84cb80347c3ad796a7a2215b469baf8b593fa3ee66330b66bbc91a85bc9569c11b0585ffe36f08125bf215e0676a91688cb695340c22d96c15e984d3649092386f6
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e893b4da8f73f9145a48320c562103416b8258ad0d1e1ed9539462ae8e1d05453dc821e9920b5bd8c1a443251c569193fc4dd488d75a1ce30e5533e9ecc77ebf0f5f2f6ee2c134b8d0973effcd4a281b3a2a61115a27f2b8375e55a21dde0d63bd433f7c1b193e6ca85e92cc5a7d5b9d452ebbef688c5f41ec50ab548de0d51343a325c0bc29ef100ccb0c48ea8cb5a54acd46d5c8683ee6d2c3f1818b659c36566f2b2293a0b22643e91e70eabd6d139cc723bd2b1d2a0046339bed96b513256c8348f97e72e6c65d9cf7a3ee3c3e9f6169
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e893f5614d3985dc720334f8c5f47d3f727c4d835c4985588d15879b7da6294d2efe710b6b3ed54b106b6cce679c8a27e8d48bd3cca6cfc310f72ec5e9e19425e8a3eae11232a7800c53a1eed56cee6d697a8480f47b5cbd95f91c680be3f0e1a54a25cba02b2ba92d315625e0998aa3a7b75e36b4707da10219e587e3d09b67c2992b2fd29ccd6267fa4e76c161a264abe04f2a222bbe5ab2c0a0981c6e12335f966d04f83f2e87d625fb400324086155963c7b19a98f27f2bcc2d4faf64c83d34a3465b7a162b52bcb82e6b0e4093d695d
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e893b0fc267ec80b62be97c170de3a0cca7050b4e33ffb74357be1cf0d1a803b65537e24e8f6aa859851f851f4cab2785d86f10b9ba9223d6a64476447e2ba5a8e675295c283a00a6d42e8e1f804a1c23d88af9d36144644d588b1fc75eaf5f0a05e7eac46e4b0d1034cb1275ccca3878fee60cdbbfd83be6be6250e0244ebf5c346f24d1d6a10a7422d7a122db794409b2d8599ea03a2a59011b384048aa8450d9e33f9b6b4fd8cbc48e7d55ae56bd0c4f86046ccc5bfcce22e2af3990907ab8c747921eb58b2b0564e0345e4aec6c62398
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca230a149ac3543746b8b79f47fe22893590baf22cce4603af7dd15d89c3e4386fd56c373c9a8158e53852bf33c7ebc65ba1508c63e3e596533844b94f80dd122b5e18f2bcbb2ab1abb879a59e550a5701bae52ebee7d93bc079296391af90ab57b6629012aa21e959b8445e87f15fa41142bcd382b91dcd81c4a21ff99381c66120d4288b1c8b555759aa8301961d6a7e47982342e403949018346e61584c36ef033302c9e3876e8bdd5924c1e9adf96d94abda968a5a9a275ffd417f9c842ad4
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57cae97580cef4057fd0b8e836c85ab759e530afe1558ce5172a582de5aeda8ab8586462a39f886ffd8f670525be81ece0e4eaa14e6063a9b0a1a958e78e733933c4ec922dfbc90572e85ce0306a8cdb0bbc4d7b1133482358899b3e1576ee13148aeee4286305d586b81366abc2ecec05e8dbcc27ce6b5667575c2bb790af386e912fd8a10e8bd8845aff79b795a5600a642d0aa72b130329a059c740af40434438ee0870555734b1d64c606d47218c2721948e0500e9dbe65b62a12bab81f62880
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca0820edb5dbfc004ac6b40c9805c3e62634369f085c0e8763fdc7018975048a69cc04220732da0df66905ae1f511d0786926509506f64f52a43a4091227b8a48105e1a89c55940c1d0ef44981181613f287db9a98bf9f74e0bcea71f78552d9e415b6fed0bed4543696d15b4c7221f5f9c888b6d0c62e84e3a341871f60f7ff62738a2df747a2aedd4899a05e7360fd68a1abb8007eb62ebcfe674a7b9e58b7bf0cec098e27807e43499745003804494038029d6fa3b624cad7545a294238562b
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca3edbbd822c9c60c65dc99c1fa798066c0ccb8075e9f17036d18fe3d562543e5bf911eb29428e8f3c2c8f66e6ad4f98dfdcf941741d259cf429f595eead86b3b18cb3f230cab716dea888c169be203f8dc3573543045bab2d74859d790cbbb2f9334094f57f6d23e1ff29409e47acc00ac0f4561350ecfe99b5c531424099ccd21ba7692d51f9428328ad145a77d3fe18bd14febc2a4b850390d836ac2ee3d9169f7595af250356e9122ab4c5b5d04e448e6d0832f149aad35c51384aae2db5e5
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57caff7480a4e61cf8ef66adc10ffbf6f8fe50082056475976d30d9221c70cf6de6086a97929f0ed5942b404282a8fe4dd7a914d2548f13cff13c43bde01450149f6541475ac72bc73b124a3e16c0a4d161c7eea94a8b6bbd1ff4656943e2a60bc72c12a47271d93286c44776aa2812ba52aaf15687a51d967f3de0a1a94b58d74bab75867e857d5e7740319faab7056ecb46e0681f23a4a9299698186519dccfda1ca32f136f710002c82448887c705cec551801a769cad84020c64026ca9b51708
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57caed34b08351ce045806536b0de176c6a5e66fb0c55f4d09214d7bb9ac0fce0edcb4f7c8fe42f6962c820aab3347dc19dc1ab5fd6182a26f979c94979c082cd8cc3480075b323b072b1570a1e11c67eb208a86f2af457967c3642e6eaa66ad5783a5e3c1c43672c2a58a628771f721e0933d0e602aa1061dce573385a5d5cca00bcf95f4f9e8e4b6552f2f4e8970db3e3670b5f0f3fea7f0279d07b9df283658f5472bd695e7ead90304cb55080603234347915fef66c43631b624a80d5fd33e47
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57caa468578d115d46a5e01ff0b3754ae705ba33007eb53a1e95623db01e79a6e57d1cab9aba0c01666e1ae50582ca63ccad9dd75eed24409e9e383f95cae155be805292a5b92e4bafa95d69db73d07b191d951abbca9c74f6c6c071648f3c753be911e6a76fe53d8801d6a2f2b8544b35da23b99a2ad72382ca036c6a0b203b05810ae4aed7b2b0d52571f2bd20fed1cc264ae80f79b80502888af72acfdab92387c70966a08f5f78d966639666c9163466ea1cbfa412138448a78074f284dddccf
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57cabf2a8af3aa0264de545df615f697cc36abe251e167a96a2c35ba91a8c315cd5a711665016b23423691ef380f7ee21d4a36ab6e636f0bdb8dd35425e34f3ed535a9d321e94ab9b5c535d884beec4534b295eb9821a4ccd23c18820df4d2756acd73624a3d74e7a6a18285d49ea345a899c3bcecf9cd3948380020ef6c19a6b83fcf2bb4c3eeaff38f2f240b1b848e74c866378f20c2e41dbed10bdf49b86b3e51315d4b9757ea38b5cf3cca4601ecd18172790c04743534479af9e554e327fa25
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca402fa1a5b0e656580801c32df9421290b7fbaabbd836000df6e572bac7509b1d01046bace99b697183d89c5478377f17593f9ffdcac881b7c4c95ee1e7b54aa6504062c637b4b123d5822dfccd3537a3e13932559fb51511b14dce1bf23e26208b0eba96001287c1b1df97a53d0cc07ec0994df9f958b4e5a7192147c762caddeebbf2ed2bcc3610d4c44318ecd373b95e95e5b45122dd3d90e9c862ed382b8a6940ea424b1d820aa1f19e05f2dd916c458b2819180be842773ef3b898038a4f
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57caa02fb3a79a955327409e13d3bc1d63073dfd9baa32413f130c195ad782150c43d8f5362c090db748bac67bf7e407a400e75bc256669f2826ca0b43d6db1e845fad0eb040ca24dc288525d4cc7d82d707081b95d6e60006b6f234d0ea657d2da99d7f2fdf7d684aa03a9b1618bf2d4c6fb1665e85a5011c9cdcea7f41fa657e3d8e01aefd387d2f9e431ae5b62f26e82f4e1ee7ffc75dbf4e5f64e7d1e8ad6d34a393af6833f794fffc088275a622ba9da970a02f9d12aa678a22c6deb59f2a09
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57caa311775c17b04807f4ca083e12ea85cbafa7bfea283f39d8445a21ff3d130882e26091810401298418e1f364965d0b95a6b5339149f898f75574ff2a972148ea59d5f5e9dccc1c305f5728c6b5024ca577d963d4533ec102b6da7f861a7846c9c446c828bbd74520a0f1782ac4d6cbd7495bf732438e47f1d69db326e99efffd87916d676460b4f8839e6eda596aa0675d2a60b6ba115642643f0833b96cc47b23897f6c54fe12eb854c745c2510d24317a4615e1afa957d88f585ba24c041e0
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca204171fdaebe8a9599280614b2c1ce84e1d2e413bc5aac9a73f021f8b606262ed2e5767754a053c6cf303b2e92ee153a9be25323ccf2f9ac8b117e29c3a78273f9af35fec26878c784207715ac6caa59b83f78cf1533ba343b87cf40aedf14f84c8a39831a83c79acea9cac96214fad06cd68b0d7beb7cd45707759563accf4e8d51f069115c18c67d3e9b0dc1f6abb35772083cc891d5f354b4a23e61b4410e6699b798494a17d8bb5611ea823f7501b9af7753ab549123bac06cd91677bc5c
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1deca010fb7067a9fe397c2445878bc01f88c08965f0f64355be203cb3e7c1089d648a4c8d53d16fe66e4702ed75ad77cd87c55305c3c71f501fab5252b3003bac2e607b7c9319b9e2991c95c3f92a97d07437791a5035bf66d791e484560edf2c4e3659753e129064c1ab77dd4c1bb471a49c60ec346cca84d6b89e20cbd173d0bf80e19db1432e1921e910a2d6fec3fb126d4bbb76505c6ce75bd241e82598a1bde8952547b81a2bf93ca619a5f0e7441450d3c7db939a16e7774d151440b8
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca7007b7c4303dcdbb5092c6943f15ca8d9fb813db929184599228fe6a614cffcc7ac9cc9bfcdcc381faf46995a6078f8e3efd7826c8a5d5757df00edbf72ed8926b7b166b69bc8d121c53792ccad026148f49828a36a449ebc65c2b42129c09f8d816148b12890a02ba68f7f72298b1733f4a67f4b563ef8db6ac951d710b2d4c9ba7971066caa0e5f1a992ff16c94afb91a8a7ba6adab703e0b384e48349d487f96fe4ea8af79cc179cb8dec00b5d0df4ce01f0bb496c19aca1b746606c48881
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca784b98fdf2bacbd8e4f58e5b573a7859fb564c7eafffec324cf54478335a4451f5195a1ad8810078197dd3b63f7773d8dca49cd58b90b3adaca93e85e2f9a6f3e0e0d4bb3c7369e9a43aeff0d10331e1d30b30d48009e0896a07219203bdc70e48ea3909d20fa1e6cbb3d315e3d40165d44df2c7e913ce805c6f5a677b9c327b78cb52cc910074240fafb2b8f7eefa5b961d16ce3c15f0db02788c38e3af46f065b0f8dff3c835ad44f5d9b9ca3133862cc4f49a45a3d4c1ad64b24bd6fb78ed
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca5bb609bd248736eb7b555c475a74812908c532a07c37c73a15f1c4991bbca5dde25e2425619779ee004779b4e5883db14c2ba6ca4a9189406404be6121d47ae05fea67809723e43a1cb7e90ff65cf737ebebeb7ac64cb4b027c43bcef6966354f87b80547433c98fc0d52530dffb2ea68d07ee0638b4d9b54b3fa126b6eecaf4fe35980600951946318fec9e18529ece014014d79bd031c69a8a899965a7dc7ad9e10436f61a4ff6b0b23732593d5e64fcf05e6d4bff69e1cf32d625fa5a848f
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c036ed67ee5ac89d5dea91dcbee2117ecfa214cb5268bf8ca99231d3759b9dcac90288e66947c8bd91f3ce9ce01abee3144e6a519ef7e262334d73b8623a362f6062f4ee6d17c0e0efb6020de633a3aa81ba27fcab235d084acb9a58885c780cb32479a3c2f1234fe8ab5f89b9c58d5ebd205e08d6dc5425ca0a5f7b834b990fdff6fce3216bf63e15973ab412b9a18fc791181e70010ce9689ecbe5b86f82d6021f1dd05993e527886464d0072998111fea
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0360d0d74978d37b366c128e03ace2b1fda88ecb1b346549323698edaaccf3d0d2299d2aae049a1d6cb9d0c058648a80a6557ba96740e5cac434d56cec3e815682b76162c402065810cccaf7d6f57c6f8b2ca0510a57eda144e5fb4a20a0b3d1bd8daee8b75526b2451a9e31bc6bb2b1deb789651fb9f030f5ba0e7e5338e5d2a1b6166ba1eeead65c6423d1bd0346d0a49f2942795bf416fe1dd4d66dadf9f2438033cdae25fdb1197e311b8d0dad577fc
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c03615fcd0e1d611b563974df72e35233f3ccb61bfeadb4e79af4565ff79af28e05c2634340d9e77dd8ba921ea2f1f337d2d1176b97b4c55af64463e17b2607222caaeac755c9cfa7d6bffd0e71b9d6d81aacbcd12cf7590a5f11308acf3b03f4833b1d7d49a064ef54fe1d8305f74fee5c41b9f80a5bd25c62ecf5c688034526be7026ae2e1aeb930a8772a630538ac4b1a19ce79e4bdb9da59b51385350dd33c65fe201f7abf8a508b7758f71fd07cfcc1
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0368d0d4b9b6c3ba2e2571c26b745c6d05b3ff65e4a51b5e00d0395db953bb2235c82a4201ed9ac354827c2144ffe815cfee86e7fc3fc6e4fce7b2d23342dd04d74334f96aca72002be0826d5990b0a25938775510ac8058b3efa8870516477d3c0760eb0ad37b743ef24c1a40e94668980dc4f5083ce2855e73e3d5506967f5e76fa4efae718dd806353aeca39d80ac4e87efc6e4f795454cca54687b2b5df25f1467145f762c683ffdce7e3940eeeb4a2
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c03638b9a0b29ca60f12b33feac43695e9629d11cb6ba9c93d17a57edaea6263ddcda00f4dc3204f44603d6fb46ef924c3363e02a6bf35ee6d35e60400db64f25fe1c796b53db77798d54ec2d113e61fee81987ac414d15b2ae3b7d7d93127ae6ad887af7e26abf7352109b5dd0fec56a28c684c51ec1a328c5d643e5c45862ca591a1ac5274fd2af096c843dfcfa896a8df0d3c3bb67aded343212277895c24cbb0593240e9879a358d28fe88f5a2ee8c91
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0364ca6c12d043af08aea654656093063e262e5aee82961e86f4d07c6df657b24141c9d17fcc0559ca09d5a2f2d23817db9d53150071bb7b6730e950d1ac90da8f4edf073bb66a4c2a1e194652e66c26bdcac534bc3311f8c344725746773dce6904f599c330dce60f12b762e935f01df00bc658837de57fa05c3a94c898634518ff7bbc5db9a622e77cc2a5c97b94ab7e22f052a411ef0c2e8ab3c8362e4c302bed57ddb8b5f2c25ba734855e0626ec756
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c036a480c8e6c3db7fe51d4e411238800f5cb3ec1e68b86846238e4b6cad70e6ec53ae014f1eb8c57d5c24cadd6000f878f83676b0958355ee94e003690c22ba1abb4d12d20f30b6d46c9ca72c4176fdcdd8de37af13b032f81834230cbf198c6f9a263e9af1b434b9bc4c8c65498aa64979c2c6ebf199b215d097baa51853257bf6efed16a7c5d486044d0f4f7966e4f153dffda14b545dd5e326f9b5776414f359863954d807dd018dd6411ede49f0c490
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c036a5cc5e00efb5abd26cb6961ca3eee41e505cfa6316fd8677f162074726bb2ea8b1c9f8ac536216b135fd51cfc3e68d524608964af36a1fca7243bbecefa51c1de51519c174b77df705f3571f87bff1fe1ae0bb8a7889893dc5acb6089c80406c323084298f5315bf6c32c962abceb1c835dac3b6c566a2c867893e10a97458263b6ec9f902f919312b26c149642858d8c9bf515efe135214ecd08e5068b8a5bf6e79309b9778522afdf4ec939f052045
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c036a88980ec0e8b8f15d8ce68e3e35a55095df4f2d837074d7cf5f3e1dc22a3aa1de6a44ed333730ffa313d55f9ff8847e4f763fbc61c0b01228ce3e499bfcec248e6a5da8fd94b16f8778299f5dc610493fe45786738d896b79b77ba0c56af1d046f3f98f8db15448dad5d312661274fa501e26fdde227ca4d5ff16b21acaca5dc2c58a5ddb44cd9925db19ef131f0cb1f69d1ce521155a3aa29bc463391346962a9414b715307d41084cbcb4be9cce205
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c036861652446269c9504762c24be76d96c15be11eafea07d451499a2b4435797a1fd2c5507f94cb293a3683e7c37ab18c9dbdb58e801421e8d124a470c29ea0f329d1eb31c3884f6946bd552cd2431c94e9a0e0a4552ed57a9607c9c29f0907602d7a41e45aefa9c55cfd0dd79122ab2f3cab894c5fa630427fcf698fc2294850d4d74f22a5d3dbf064e51838c2ef8d62b797ec0d0360a1f13fc577dc303b3debbf2b0691c0abba67d9923049fc1adca1b3
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c036b9677f9d4ba17da73d32124e12e1c3b67a625c61a8c4505f73f9c714509e84b605050821f887761ed3b9d73b9ade8d0539b089220774b4a434393fe2ffa5b27a6ee3566768ff89c33cbc9a49409d66dc9d42711b6c4da7a7b60d1a8c5d8f49aaa3db53330d22c81b18b305578b0ea7e3c33be22f93b9ddd5e3e0f49c95376c357a691c7ea1bb4cd1be74be07f50fb00816fd3662d6b10ff2472b86587682e11d34eaf53e781ff0ca2575c3efb21344f4
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c036c3e4a1805866367d14e2aaa8815ae87e9e4c13532ec7464a6ca2d0e0b4c481b34e30cfc8b4a7c166077be09fac872e09138987e5cd4ce70d73027480c2477d608896fdd96db70dc73285149dffc3ccbd7d1f7fe303941416d7d099e99b9cd3cca7d596526cd63027840f853f2d67052d22b29514bbe93134f328630eede0b458553278f18cef1d187a63ce446e928038fe77c2438721f402b8ec3f591d759b5ed19fc631607f7e3017a4863beb7e7c7b
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0360c47539b64f1b67e9a447f16b0faf78366f443ff1a72bb67b471560a1e628a515be5c7cd06dac3ecd89f753be0d0d20906ede2d84bb72f2c44a57bcdf77245bc4e6fd692b83230eae6df324cddcd689d425f681e58a19fb781c6350a6c851ae69c0c55c276b51e6351e2e39fc32dc4c024b062726d3d5c7dcd1eb6f6e22de41c0fff53fad4aac8050a37dce5ad4b16f734aeb51f33fcde378baac84f89fb4fef04a9ea085a9b1db2b38d331cf4fdde89
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c036b1d5c85aed68f50642d52d7c8567eb668151e3d628ed44aef77ec5085195ebe66a362983a8a60fb527883ca0ba303d4a57880561a71241ea058f3528cca6bfd2ee4b57c4c1e031295afc950605f1a4fcb9fea7d5233d33c85dfc725d99eada540c5cf799a2c9a54e34e7e3fb728ccb0c300f97b0ca811ee2d148e47899e9ce58f6e9e5df757c1377b5ee09647332a626f44461b3443918643b9c63749b0aa7a91faa443ccda3a6de7a30af8ee90c6927
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0361ccd884fa8b6cdc163e07234ffbea4739a268a525791333d94468d998abecff4c5c728f5ebff11f5c507ff62a49fc90b83364441c6a1b5eecd0a0fd13fbecaadeed3cde830e28981ef94478334dd0aa7864bdf184caf9e7fe423472b466be451df40a88fc92d8c450e5650c1561373fbb0871ac0d92e09e4187d9afd83d6b7a6218eec6d92898819b7af0da7506f9c99783e34c42a633e930b67c6ef4e2c5d0884373ef60372442c3c2f9233395c2817
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c03682fb02bd02bc1e5daf4c0bf3c37533de8c71522d597e5be1963626754c0458183146462e39779e755dffd85726194aff58a45fed67fa98bf886aa16450df02c646a96d1e3f58b3ce43e2d2d602512daf5c316792e63610e75e352bf2521127b83ea4d27397df4ad608596b27b3bff2481dc1d530ce6d767df04ea9a7f6580e885b1e3ad334fe750226bef87fddeb4be84497a30edc77e84fc826eb57369f693e2d94b3a8b480844b88045ed2980e45f7
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b9cc5dbfa8e27ce93182b06c101d179aeec13881a9b5ea20b97005b668c0acb6e33af724f2654de22ab8163b8b4de9e7256b39f6a7a8e3f4813aa5efffd6df705d5332cfc3401fcb63af80517065879b98cbf7d8427dd71a7322cd99ed3e1a5939cc58131aa4068f1692c5e19f7d4465308cf214431676346f0ba4be6847532f2f0a48288da83d4277b3728dfee3b0d0f5567056517f9c42cff7b3fff3c36fa56
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b85c3ffb952fb112d4923a5b8fb7facd04d5679820af2a765e846fe749656e0ad1c498d1dac8d3fc98eb700bf98a2719df812927a3d5feb3eda5fbcf8696717d280cade0c3dadab21653b3f7052fb267419e33dc964e786eddea0186a54fdfb5e5583ffd4c38b937ab04d39b38c4b81964012f1e0998382d5f6da5439a0ab61e626a5a4c0bad2aeeb459e45124e052dbc65c977da18256485bf83a804ea07bc23
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b66f5768d59c85e8cd17e3ff4867ab9269bf1ae65b0a620b88d95cc3c679f33837922d9cc2864440f402c88ab870203f6421330bb8131786929b25d56359d0077e23384772d12085e770c532df80810d81d239fb4c237db9d793e859b485cf11d7568c73d528477484dce1daa144bb017164b082cf60c3c9565e39d84e35cf80fb7cec35a63483a8ce34bc7dca021a7214498caacaf5dfb02cf6f69779a3b0fb4
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b681786eb44c331d35c79b0069da4cff4a4eb5592689e5ec23653b9af78e1c80557d110586bd2738dacc5c60a3d3f160c90583d3ca056a159a5573783668e56524a87cf3da03aabc4a69360a987c124cbaf38abbefa7e478569aa3a1c179d481aebcba4681fff5582bd0a2099a2853490122dc49f0739ae4d9f00c34cc5727278953daeb15a57aca2873901983d02b9abf09de24a1c24ef5d171781cdaa6023fb
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901bb458ad16e44ecb3dadb1563edba907f6aace74d118568d9ac013f532b8abe1700d8276e35b412cc8c42d718e9b52a052695e983ef34c8cd3e9d8857a8a4b8e8897ebe50996807430e9239ab049528e0fb9601b88ea25a6ec9122d1e18f1d8c462dcc820050e72b082b349f8daea08e99712d23eff5327bfe576412df2e5b059caa099acafc09c459d5ab175022cdb12c451f936d6c114f07927f5adf58a4d3a1
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901ba231e5366ca76e5e06648a62103690f45daa85d162cdf4d945a4b15cf996126c54c989b5f69be9e421696b0ec5ccb7c4fd6576fcd78442da50bed96b818c243b993b8027e50f44d5d136343d39cbd7351547bb874de9e2115a47c28428babfc9144e6dd757121fe4c1e40f399cf6a8a4323a0be70414df049805b5b86e871ec25c90a319896cd99a9b5044de68256005517e05f96df55e337224e32260c13006
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901ba9d080cbf30b1f5c071abcb2a0a4a6d0190e06ee83350bd021d0c7a03b98af8753d5b46b853859789805ef2120770b1c0b937db100446589b2c7f853954efce7cebe0d46343893f1029796090648bdae8a58c893596c76a607b18ebb1f4779c3819054121d8bae4a276bb8f029e21d5528be76164a34210b8ee84d67863967b5e0caf1861129e5ee549821978956d28fca8a66065738f0f364800ebc10495cc9
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b8f640055dd03d5ca77c2914c1c0518faa4932c8f7c757c27476aac132ee40cc70e571b7b84ac4d360b98172b9154183a2d6000ba914ab35f3747132e6f3ad5e9ff798a801e90ad7cb92ef6812d595fe21fd5bbd5d3f1dbc02cdee9b1e5793ff42a53fdbcb1306fbb665b36505cf58015f9a53748c9d1bc565446527bec31ed102fa8ff209b7b4b0311f7b3ffb7b84e3f94199f78c473189427f8cda7b9fcc373
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b27c5309bce69b2002cdb05d92911925a020a08d3e0c8794ffeb45954efe223215c2d80195d8410dbbeb607d842b482de1c43fc93a3293001a6cdf3fcc21e3e13c8809fa0b36cafede973b26c27ed333a8d73f13fcf01839dcff49faeb6799d6a8264a1d7924b09b0a7d867b039c831a4bf18f9b71728e37117111228166c4d24597e921df4d9153aff37c2ffb183bbb10d58618518f65947466902b3f84a9947
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901bf09f47bc08cf21d22cd1bfb820bbeaaa34e7973c84732b3ab8e041bc5e08aaf8c26cef3a34dcb75279caa8746a16eebc5d1709a71a9fbcf1c191a5c2ea476dd012c1b8e5392d501b687134a97687cae429a70bf721a9d81cbce47de658776c7618817ff94106c125fa7126b199d720a9c62acca937a86f3a8359743472f46c79617c9267cba3bff55b78e181956ea59f980c55139ed28bf16367a3da30a316ac
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b2e7c62e759b3e58c2d8c7af6cb3f4e778b8cc17e756c1563300cb136bfabfe1686393261cbb9f16b12508a4e0ce1927fb126fca6d774dc953f80267a4d82ca12778016fb619363236c784067dfde9a2f3d6bb38aa5d858045b68d9d16df9e97b66ec4522aa8d8ac67bd1a8cf768590600026c2ace36dba9e008af00b6370347e746712d35fc20e32f3fc6c05c83d73c1f7ccc571dc372f61536477c92af4fab0
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b083c701c87a3814e58ee83a8cc52144ead842df9344a8faeeadc0f49de88571e5a8fdf6b007434df7018dfda6ff3afcf82a77fae949e826d178dca36504219194372112731f8a4f92b1233c3cacfd77544d9818b5a5de753ea60aab1c6aa68fb2eb272f8e8080e865846a16f96012419d00f8a3b3c34836641fd633212a87a434c4120c41f2c51d1dd71d7dbeab2c944da38558d408e8aac16759a349b62f4c4
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b68f93a9582e4266c8a0203129d3856bc343a54fa5fb35d185350028fc2f796020bd02cb4c3bd8855901d38e40037a28e906279881d07aecbe6e310f603d113fb69d73fe113e80fb1d3517cf1fc8b19c7d7213df6e7b040d63fb36bb394fc641cf35041446d3f48f235b700a6f84112df638675af933cfaef51cd71f08eaef7897b227ed6339650a7a902831a5f90b881ab2ee554bd375b3d3244f1fd5257abb5
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b617efa3d34466af15c9ec1f7dfda5ae52b81cd868b72564431117cd576f6fc944fdc374e1303002f33c238a7a3d4693ced7fb0ba027ea6534db2041a63195b6ce439c9a45ee2f94a9b70301298141507ff831b26bdedbb737c577df28e64e7cc6dba882fc769f657c4691062ff67fbd416fbe6af886e39c611976e741d03cc17f3aeb9cd8bd65a7d96bc4b51af3cdcfc4e13b11abc1682c970145439b8d780fa
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b44304c1dc06c937680955e0cb6bee9740d4fd551de6b06c5f82fdb9f26fcd50a21b540a238c706c45849668d3abb64802995af7873d051f33a703e37ad22b685f5b1a8e360506eadcc5c8fc15f579561019acd9f2b737b48bc5cbb8b251c267cf4df7df83b6451b6e8a91f2659b0bfd917f9c68c635a31d9af98aad1a7a7a62e5935a2e0c040e48ded837a0a1b9ca5abfd783cde9a5466e3863804c98d6205c4
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b8090c4d36602ed11087bc53dc22df779eaebcff04bee06309e84e702477813c7bc1a5f2f0f62dc1b3d7d92329d17817932e94e11832a0e85e2328451e63adbda190d63863400f847eddc7c3bc58c578bb4c46d0f3c2119cdad0ee95b6a4f4d82492f6c6b29fee08102759c3f0bd35c0e03de4b0d77f967cf03b49746aeb4d64e395160741242c5311d6eec8356f123a96d0620336b97f7bac1052093df9fc2a3
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35ac5e6db62ef74efeb8015b69e3bb0e6b8bbc51b1d3737e14e2fad84a8cd8605e63e8a822168a04c6a844e35d6214a4bbe6e813054cd8b3dac97f923140c49e02edfd35f10ff9be39a8549c3017e02b4cac6bb66ba3290b9a704a06c4571a63aa3fb871ec0903914838b58584f49f196c167bf4fffb84d349350c81a85b20adfba55cb256cea0eb092db28aed67d8ad417
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a324804815204c0c99a1d63a6db4250278cdea22d9cd3b0a8fb82d95f9cfb0d3098c3358208bf80e6883c6e76d2fb85783f3961a04b4a289db72bcc48e27ea0382edb0f251e08a239a7c89c1cc828262093824147403562981f0f1482468444c9511e25bc1447976c8cb78340ccdd829dda39857c74e740288b4d817f60b73bcd9fa60899fe2b270015508866ce3f60ef
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35af62a42bb25b423d952e08d62ad7ace8a8fdb8bd57d8a134ac1a3747f229e8cd8d5a9f619453cf1018dd65f44ffe8d2e43732cba33251911551724b5225e1f528157c43bfa7f38a956389bc1a6d9488aac14c648ebad7f69222f3781ddbc890204b1174a0cd5d837d1b081499377f1959b24e1989b65ff1c4a2d7ec734bdabe289e2a9f241e0cf296db9b3c76cf89de25
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35ae961d008652bbd0299c7f1cd1e9b41d57df6925fab9838c2783cbe2fe9466e7414a6faf5644dcdef57db1f7fb9cf8b7a7c63f08da941923aeb276af5dfa210e4b01ddb563392e4ada1da940d4197874869ca0a4b18b2a116f6194b052f9fe24b59de86269cfd47394ad4241dee8291dfbf1bddc52fb00d894578ee7e024e05cc0a371b39f35e4ab27a502f93383581c1
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35ad82bf9882f202c0c11597e2482800d8ebc852103e9984a63704ef1849ab868f2bcaf610c95fb8b53e31728c6778f7875389c4babb9e4a7281f238bcc3324fbb2ef82e9c466eeb6af6a64ffc93badbd2a3ce6add5ab139ae4fbd4fb43c35fd857ce22e0bda428680f2413c4fff4bbb721497984bbfa232457e7d1c21f0cc0ec5b8004aae75b5e65df32ef16126617e50d
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a55266057dc1768c77a782e76ae4322b51a7add8bc0c835a05f9ad1810b142e6bb17d8c2e75ef9c24d0511c10c7ca1a5baf8bc79ad0681396968d4877ad82d12bf7e661b2637a0089dfc2e89ddddae0fd607094b4eeddb5c223e7617822ab4fde1ffa908de5533541f5f8432f36b11a54dce9a0759975298faa020ed99ef3e1e73953360de26623b0920c2a1e26a77fe6
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35aee95333843b7a2002225aa08547e42c08d92d6a45b9b4711eba15c513615069fd31d1fae3309c265db97bfee6710785e949623bf72248e88321c59aa56c00f32ce5fc9056be89e5ec45b07ba7ce2c36af31c22bb6d814f56923e312aa45aa5ee78c1b4c6c41dc0b4b174235e3db1000967b1a76ca2dd8af74cf69420b9d5bfde59bb38f58681fa20950efa593031f15c
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a5941f413ffdcbd794f1792a369d82bfda0987b2b7f67706e321bf9bdbd3b7556983e6df473cf39ec2239c89f5ec3de22e790b3438087938bc17b92490bc9700fdb1d1d925c6a88010ea5cd92b5c58c4d8532a99cce8846615d0ee2a8df6e9e424e65ca3eea9eeb1c38f749c5d648e1ced0f2cebf3f13bcc942ed90497aa48ded84d487f46d5100f328d33bc349ba764f
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a9ee0c05fb137dbc1d2f67646eabfefe9dbc28236c8f807ec462590671e937b96206246b6b85c2a33ddc3614698400fde8d0b927937698c6c9ac935c63850180189fa44fc09297f85f29155506ba3ccf6b5615186d8358bd05eb735b27e611ee051e05f710995398ba9398c9e009292ba55338b23171b8c069f380c75d5c5170756253d6a96841a5cea70ab247c35e904
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a47e75a288e7ad4319efefbdede7a0857a8081ce6746d49aabd4b4f2ba8c20d082cf6bf4b5cd05bbdb43b1655fe8b609da3e23ee227b292f1011d395693043be81a9f604d956894293a12cba599299106807717ce971001aa05e0ec9d39be3082f0465c82121b1f49bcd2430e0a0fa541645087680df12b1ab80a2b54e86c6adc7f01f083ca35610bd5f22ebfb78dd1fc
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a0629f957db204898fe27a61b405481fe26c5bb01c5d97a65f9736dc50694b7f206d6b9ac37c668f10cade5ee7da072bcc06dc4b12f3f0c2efe835203ff936d11eae15edd63718a2b3a5686f4788aa9f1a2cf0781f3a5654476b741c257072a293555aa3725294e41b8f5c54bce7cc1bc1788b9592c21308718dba27051114b8e3e90001359f145f58b2d9b3dcff7aed9
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a7dbf7e11b17664aac5ed109b440f93c56d4fefebdbd047ed56e2377f9635c7f3fbf196664684776fab791bc34653e0d0bfe00d0a3452a8bb6a305290532fc71da325038664f21c3903d2e1b55c2a270f8ceaa1cea4b73db70bf77f8985ecd1fb91ecf553cdd9a4414cb9026235ea1529ec7c08174123a226184f51c6f4bbb2d62b35bb6c34ab361277cd87d793571f42
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35ac45e1a7b7210d36cfa15a3897ea58b430fdf50a44d5907f59b0689df87b9061ab2917f655072cc5eae46c1d8163f235025ab349f00028fdbf819e67ce585d8fab736f73f9a132b2fbe1cdeb91c065faa6bd5347fb6bf6e0f7008742285aedc05a4766b0de3c6458158f87ce5a811f35252ba2685c1a10a7e50c8943fb083faf57f0a2eed848d7ea95f2caf8a52a0784e
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a1873b81c324fedfb7a30874bb531cd1a6c661134c3181edd25e431d66d7765dc143c9afc3c641aaf0b46317af04a5043070584b8cee0d1d395133417d81c2dfc4f5896f232625d8a120159f8f5d28865d8eee1c717e693d30474191d438680752304ed208cc19f724d6a90937976986de7cf9272258a87272a9c97931d3f7c28c9866e5cde68afb173c4bc6b8db78087
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2451f6c86c3d7c32a3e2b5a7cb1f9014b1c2fb510c18a679ccb7a01ce030f5866848f9066cb431f2028e856ab498d8482ce34d2edb586bf2898583dd5b0e20bdef796f9e1e539cc13e820d3b53b3c4bfae3ead6ee4f3f1d217b946d53c3f08630feb98ea3947b0efa064650c2be7ea61945db0d42dedde7da6bab7c42a4f33438eed2668e9d03c43a2aa91cf7eb78905
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35af5bc521bdb3331f70bc6e108b2867b703b7e07ee77d3977c5a7610f3201d20b041bfba78439142639a931261be3ecd4c243ee936ce59676c3564e6268d255ad754bab9821dff795f4b02451a273b33babd380bf79ee016a56af9fc2d200d95693816ae33b5a17e6027aac69b4ada2242753f454a78baaf19dfd14e8520fa1057aa2da5f5dc8471f67c924f275dc3a800
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831900c8101397d770df96fb1f6e5ad5b24746aa5586d913bf8e7de42fdd954b14416d7f23e6efb3efbe1c9ffaeb7677497692e901ed2c39cfca5b5a03aed9cd3f322063a1aca1999a8cbbf626f239338ac205482aa6b7c1912631a5414f1277bb34ee7da9c883e3000b214cf59c6fcda8f97d04b93c22d42b1f77ba8b30637e6d28a
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa9208319028372b62337fe9bf92b5acfdcf364278f9ddc516733049b177b726d43887beb9c9d6a6d7b5c6934d52d7b6bcc60bdc858497b3349b2f2053319dde939752275ad122b3f2a188245c615d3ceb57943ccc63d3bf45da8b5d63932fc52edf0b9b3f6a3b0886f63ade65dc3aaa696a58e81131d0608200216208d0d86dae63278248
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa9208319054aeaf1cab8a9d96513c49ce0f536a7dd94d8602ef98bec7cbeced6651281933d1cbdc32684db2e507af113d8808313db0d46cb1e86e82d674b9df185de3802a210fa1b1b9e8fb47724c3a3c48b30ff3918b821d68b09ff536b3c9a60d59d2f38799a327119efd856506cf2856aaa71d8af87329bdd488723ea5b0fa44767fa1
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa92083190cba5f2cc79daf55c0a8e122b0d9d3a5e3b0b418f4958f6677110f9a3415866ff557b672f457f119aa9cb312f37544953d7fe6f6654233ba5bda98ba6fde6319d31bf521cd1b25e753e01e92f9a909355391403e7c66fa8bf7cb97b3cb6ac4315945c7427e6e173ba0d779067e3f479829716df4da08139894f33ef69a322182d
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa9208319008c66e75d6928538553af50ba78d91667149723dde3e63caf5ca4c40a7254e976a01a83b996cb17b50ea76d90b6d89f7992b1765d14b6b10405b1df99d8683d8bc94cd4956597d80df23a2d9c3d7fd654f5e5bd5b8ad108e3d53b851f5ba83f7d59926b3d7da32de28460da6acb39e8591a728295a5728fea402b38580135074
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa92083190a2b35a493ea2d1d3519c59b7325f531e6c0343943ea35454a3b04a465282fd5af9d46243166a40b3457001e766f0665036a52341efc8fa0f23774dc892cf89c958da476c3596474501a3322549a9bc138b7ff611fa2ab9e0d3e44a07732bf89e41dbeebf1d4f0e095e05f11f465293d68520a04d3c4dd475330298c6b951f13a
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa9208319086280c353e7579e8172dcd04239d1b00621e5a239c51da4ab8c6785345eb8dbbe954822f8ddf0502bc7883fc79fddf1d2ed593f15df3e39d40c53ceb5464a979a1f85d5398c9e68edcaec0393afaea4a39215f8d2b7aa2eda93a862025d6e5fa3da3b2f55d93774ae7e6985a9f2670696970510924a2d956241035f8877945ce
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa92083190d5fe89c5e5bf88f14f82e2cd77b78adde511066a286b7df3c813d8937c9804a47ba246a1ec095d81f29df74d28d3742804a7b233878582888fcf383541215b882da132f301d123c6cdda099e06266205ad6efb385eddfd9f6574ec201b975573d6f31bb75c9430844e17c7827bc66372a5bfbbcba3433ddaa72214c55a5946b0
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831907106c70be9fcc59102e7a5d30a943390b62163ada6b779fc08fa2fedb2549484e194b9968093ea174f1d331241e61706ebb2cf18cf02295e701a664216effa3a694a8d3340b4fa82bdd1c13b0a1bf60e333679c9a364710ed8ce2ec2425395dbcc7e41ff74d41f3f2d770ed427fae8338ed14cbfc8e9a9e21060a44755d98703
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa92083190b3d84464610c884b42bd485690d371e2a0c2448ec97c036394521ee045269bf500a45b5ef04de0ce7ab33ae7433b809f6c2e0901de1cf082139e0398fcf2c97a8f746f10e6e58702148095b77c894d3a81d935789ef5bbc33b0be72745c7b818d470d20cb55117d254c3a77a31517cd3c3d3e1a2f9395482e7269064994000a8
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa92083190c5c73d35d0b2380be1eeda8bc20d3a37ba0389392ec3224c65e7edc0e6d6ce73d5e66ca406bc5dc3262e3d03952bb6ccee02c1fdebd0e74aeb3430ba4cc57f10b53805a6ad3c0f3151f58f0e43c196e6918fb641c82c6411a247b3e222bad21c0ccd7c38ff34c2c07b347583e6786ec51d923c1e0463e8dbc9f4e843b2bf5f20
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831908df3161efdc36c2bed60d693a55062f113c005fd81df1632b4c694b3f5d2d2a600a4916a4c9f3e7b5ca3875c785d8e40b61578fff75a99dd85adda91fd8f395fe975be86a46728c624a045765088bb4ce278089d8380e10e1cdf8ebaae47550aa21fceb3c6534f17fddc28bd23666122b903583ea33ff94963c7176baa270546
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa92083190616d64020be87355d27f8d41285083a762fa6d65647733e186a07ca78d9e3f6e8f199e138c49a273384e08635078df861ac1b1118e371aad66bce6176eb40d621520f607eecb36c09d61899cd36a6341da6a4e7fcf350f94a618de395ddba9e4f43ac8942c16f42bfba6b6876010ee1a6b1fb64a2258986e4b72c25e022e369b
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831904e99824ae2119b36d75b8c7378224f1fe8bef513d8eff1c0f3e0fadf509a944b0c5a58a08a16f41bbc2a02732362d12f302d56146bb3fa1ed8dc0edbd12b250f64b9d57705e7f1437e3b6a05a7b58acbf959cfd929f8ab10200b5559ca8f1ea1029f17baa11f2cc88c44566b21f491c0e62cd75068335552b526e646b1dd7da0
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa92083190afafa12154322db32286a6b46a89efc7d19eb90a964d4154a925347bb5b73001707ca9e6e0098d2a551963b1a42b4bea80964d335d6134c6979b79907726f1c2d96959ba1834c88bcc8e22ab3c7a355797606bd844570334ead844cbef5130c4456735156ae3532b787dfb5af36fa4ee9cfb82aba13d666710add00db9c9757e
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906cd4a607effc96f61d250ba596034e7237852602553d720e1cc34f7878f3090c443b20db730c60bd481b599c9ac2366623699d855d6e3724ab986d7315e6617e18e610e91fc070160a588a346f63852a605e118605e9c24d7620e09ace2e4dd88f2ccffd141c8ccdfeb46ec4ad80ad44da86b3ad8d799f6f383bc05db63f7432
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c116141047fa9aaf84344aa7bf20ac0928dd154d83f60b6304c65f7265a7b826a4b5e4af40e0729ebe39ecf2fc5134710ce0997ae978dc78b8154eef2288d929680c150a61f0ae0cbbe26fa0ba901290340597df92875c1dbdcbea7e863ec6359eba84b6458859c40f8fb43efe70840ca9de5fec94
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c116141047c165a82e38653eb88ef84db361dd9b48c935fd692d46dcb84f7e5c2b2b18d09a59d810172e53f865c2ab60adfb6044d9cf4cbf4b9dc33ce949d3d12118796dee25e1d028912ecf154c0e757f2188e3fd8f0afaa68776f7d35d6d9eb8a0326c92d3084e4c5824aafaef50ccc27538f55f
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104755a4941c2f60857ff6e80bd1ea5a6cfccbc6e673f81cb30c9cb2c9da04230e3eaca9fa3946a8f6eebab33a48b0cf8098fb8f8fffad0ebbd7b639197813d144d2774ab368e56c7d21317360dbd6d628512613604e23edc9bd1ec4462712a7e9cc7ff5822e48db7ac792dc38e0b89cde44
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c116141047bc52add8725e90a704cc544c18c55a5f26b8dbd80931dbb2bdca4e7feb4761c08ac53aff5b67f171ba75555ba4a02ea92bfb47ac13d707c8863c614f61edd4b8a370f94840b0f4b71a848ca1655c94400d5f40c9e6bc094b7e1ec2c77ff5385102256d8a294514a32b8af13e979859b0
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c116141047a807c399a212080bf46a0aab9318474c142e6bc54957425861bdee12c25ac4879944d1287301b61409a6cbdedd00c96cd2a27198879c0a5f48a67184ca31fb843b9e2aedf474a768cee7dac5c4edd9b8c8f4ef64fa63baa3301a5071606920e880ccdbc02289fa5ec99e8ca7d83ceba5
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c116141047101daf826d11e16c9c446ebc098221962ef8d59c96d7381ce873a2559043515d975f0dc3b8198fff4a9663ee8c3fffc47238df53fe4606ed58e99e8ab6c75c2b993b87e4650c69add83f8e577b65b480b07e3e09c9210a988f5ae2f2ad6021b573dfdb7f6dcf03741816846e5f89ab34
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c116141047083d07981b07998829d3df64f98882aa021602812b940c0947d738c0b6f957f26c3d5e497a5e17c4c27e1ea56a0da64a629df99ab2e0f4bab31a5c64ae69be00d7f9435d4ccae4353d518f4b166caae430108934098222d2c1a4cfed7ffad054f571bf7b15a33bf2d63bd1b958b82ef6
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c116141047e9387e48f154de2d9436aea7fdd09499324a2c35ef5ed49d769243b09cd97481577270407c8280cb0c7b81ac0c20c3768a7e2de6ba1acb5e4a140c5ccef96aacd97a1e7e14d432ec5474173291bb33a877b09d6b99289037f7df406544f9896a991a8b06cb1fb3ac821c790935e7e141
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c116141047a8ca0050293db8d3f058e9269b1b76966d2171a638f48f775cd75b40fcdaa711fe966a77ee25c089f8aa145260a6ea861dbecc084ef71d5bd74782f1993e935ef9dfb1410f2a5077e430f7d1aacda7acbb1a48fb038653be08df3221d298432fef722df2b351cd3dd98e628d42161564
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c116141047f4dde9cd1daea24c1d4a151f881548d91d1411c304c6b9fe5d06dd794d2631f1d2e7a7138d6734fabc7b37a6b960191ad8146347bb8f2a75d401a1b62417f793ac365ad3dffd23caab3c2695ec8aaa671bcf9b8c7dd2d4d5cd2a8c5c5d38382bab817383f846c6c9b4edb417d5b9d466
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c116141047aedf9fe23dc32e6f5d55d73bfa3b8ef4d3030cfe171c2a28c30e46d9acff763752815364cfc00afe89e0a8cd93227457b25e5a56bddec2489494297f33e8fd7b7a1a871f7337f04d0f8c63c8e615b6470b78881adb326dfc9c1eae946ef74447752a4774435e00da7abe997eb151b7ad
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c1161410471e7c657424000e3c540fb033513ce8a4bd3e8e19bb691af840b631debdd424e3d395d85ae2b705110abc530cc1e3a2fe1443910812c910cfc190906d4f72032d82809476ebb68cc20a0bd9e6d2703d700ea5b333f8b2994440cb73108f1ec70aae4ad69ae1da278bb70cd0b3a5b141fc
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c116141047b1a862597b016c6d814d541ebc0d10833c186d89ba4a735ecc5165b32f7c88627f4b1cbb7b321baaff0481c7a88f7240d7de10f460ff8e894291b25b92c001a55512640e0ac259b828ffd9b73129f66691844a8438df214a667fb6c7ed129d638ac4aefefcba2dacc0df427e6e47edd5
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c116141047de6bff50d76cfc47a5eb1b45fe52aacf5e8b338e523d68a5672842494cd0dd7a749dc52826a7e69068500cf9ac816c92f6a308125e116dfa55a355a74d9e10a08c8dc21e9af8472b43bff7172e539c740ed4680b3596383dab96fe4856ddf2a02b7c6888cdc88544c3a4e0bd01ed8dac
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c116141047cd6612d49261d8695ac0e7566ee1575d53ebd2e6878af1ace30a477e81597ce97197feba029b8cfd8163e6a2a396a36d844ce6c9a6cbfc404bd1a2f490b337791ded8c673902a769189da1d6a687d77f3aed796156bfe22b0e9607489a1575355769c11e74323d0031d2e4ad12461578
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c1161410473e2eb9ac25b12dcd7ed6d67a7b96be6b1c0b2ce3942ad15d948e6e79a3f917475024885d8509acb2116a8c6cbc07fa501c9d6271e0df97daa50e39eb096d38322babe0ca1328a3c45b60315f27ab40039a2ba148308a07955eeb4738594e733b2130c0e795b5dad2236b7d360c49c225
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6dca5b9640c7c0da35f41bb00a49f79f652172b979f3c4cd6630b03f88af292c3d4dcdb5604ed380dd74d1774cc9b9882606c11e4607aa94db08b1c65cdea2dba7552a31aad3d28b1565939b0c9de19e361249c858e0af7b1894682cc36d0ddf9
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6933104b4870ebfd014c3b50d03df929c631ab1a96cca9894d25e7bb5ec04f401a466e409023f5e7fa502fcb3d8f846e29bda1d602445e5df28c754113a2587e1fb9b5cadd4b076c6fa3e57ca08c2e1a1197617f34a61a3ab29876a256b14146d
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6075e597324f004b34ca023b114c030b9d78336b655ce9a1c3fb5ca4e008c20ab39b5e353bb92efc4e02c614d30dbb3c996ed0023064abde1fa54ea6367d5013300f08a1853c7ce0071ae62d9a3f4de044794d9d3a06832fb683e275d2244de14
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce60a712536e54c3842acaa2cc9a9756744f168d395bf595b778f9994a45a924ae04a415ccc1a83dc41cda7769385ee9114ac6c1143f681e06c50109921fc75c53e5c2639468de93c2f164538cf9d8991a378dc83a0fe075fbca1c007ce4527ed61
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce61046b32203ba25a317b72207f76532102891aa0cb98680bd0a6682a15787158272197b2a05a82486c10d5818a0e5b2a1ac7e44795608753cd5b4e920bc4b57b3dffecbff4c373e7b6a7a85a66707d83b0dab0dcc7b1af01dc483def1c09709d6
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6f51ea1baa14eac6ebb25c894bbb0b0f1ef93345965a1bc5b46f7b77287ffc5dfa45ced0b8c0f337d180babfbd89cb73f89a6d6ce3437f3a833dcbca55109d6450263991498624f78dcad432e70898d6c762d0a991a95ccc0bcb6a6c00bd93ad1
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce605fbf9f3cc2901cc8748f4838795e7241640a6e25d06d99dbbce45fa00798c8bcf7121bba5071f88405c24e2db95c6d52fa3fc3e84cd2c129e448d4fc4572f61cd5eb167cd76cf86a83eccd1b041b1ba1dc9693ed4c9c3048842a66d5b0f884f
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6b076ec2a88a0494fa75fae994ade65a14433805ceedd17e22978f19830c84e3a94246029733e034ab7a76acf2db5b564fd0da5d1b5287262d534f18c2f32b329f192367ac482eb86cbd18160ecba85db050b2471accb0a555ed94d354bf33ad7
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce61e72bdfdb33f5b3f9e8ab9b1bb9a832df8ba04bbe6941b551ea5532571fd5b48d61dad3169e157ccbda40b7c5f6885065b07c6c678546bff3fa3b715ff754acfb30c3d982b9556eb41bc1d2e9b22efdb32f9dd8fa9b4c85a0f6dfa0e19907353
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6664133a90b40b409694781d907367956d2ab2ee82be3dabcfe9ba7cbc7a33952e72d9c54ad17d5b10c0f4ec864aff5da6583001a34a8844aea48add4b6d77151970da0b22d2726816d3c4df38bb5442785ec4c6ec7d2b0e45d8859833ec667d1
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6bbbd3530618e26b02b4da998342dee5927a38b0e723df015269d77be326267dfd5eb14efae355b5a5c5b2733329f2ec9d3252b46be009d8840d06ef54a0cecebda3768f79f315126ba931eff85a7b1250dbff94cb39f6e78c1af942ab2782b14
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce61a922fbf43f23c3cede19a8517983223afeff8552848863886af4fe2b5854a908c0ac1a2a4609ebcc28fcfe20ac503857acd04a9ba03935bd34c1f873b343cf660e4a81cef0eabb2104e4644b17a2b4784927dcf315aeaa199dc21864fa53e58
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6e206d2d6eec5c001a6b8eba1f76765269ce81fbce947a325047bd15af8838005212c215eee7c4da8d64b4e51c66433aaefafc50047876e59f761f0fbe1fe521b263a86d3cc9c027c9443711c0eb19d3def4dda1a63e677f13affde261edc99e5
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce60c075922c8a02cf7615c6a7267d341f310825f9c871d5dd9103998eb737a40a07dcf13634d0d01f49d78c367a9e2aa89883c254b76ed01bcc470e653170dba24d13ecb15d5e52f9a0624de7067ed29aea3611d18eb1f11fa8fe59c832af894f4
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce615de261a7b79ade1c98d2237ccf27e40aea8bfa67f3abc6f3b079bea63c75e31b4c0746b614dfef9abd2bc35f499868214b0a5ce690e0d962749df7bc0043bb90298951fbdd0fd779627cd235a086ffe8c5110c860060b68e0ce9af0ef78ec4a
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce65997b74ce3bba5431ccfc7f80ded6fa45814454cc38a5caeae0d5e430e4805458824d5a2d2bd5252e062c287832a6c2e1cb3586ab1e40a4c96e6a92ac2316f90b72a5b895b838a35ed80c1d55c2c301edee89749678da8b0f5ab66a8d5f95b34
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162a3ab476bbbaa0c34d6e5bf43c33ae8106a92530536814fd9c64056734272d19350183f07507e44dbb458166e9b42c0b969b506df95133312cc6efe73c4b25635e517874db9ddbe0b49ad53be91373aefc
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162a043096e12a22e8c62b68441dae8ccefefdb20c9e4c8d934318fe00ec6b43d95d512708e6b63fd3022b144de7a784edd36af2ecc7cbe149ff49f1f04d013b81ad21cc3ffb9d49555170c97e40a6698579
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162a5f626b1a77b92ec447c7815bc8b77a7863f0746e870f62a47dd4a77475459b425b42c0fc8c8e5dacbc30ee982933858b0000a0e6515e76e78320caee6a0048b7c0ff897f0a2be052383b68fdfc9046a7
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162a2ca3adca1557dee22780a8c678ec358b166d68dd3ea3858c81c1eb3dc3963816c44b69acabe0a14a042ebd6ad30a69ed32deabee60ed77a61ade638b8a573aaae4582b75ccbb1270dd0d437f275edb10
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162a3ed2ab39beb101dfb235b2dadd5151b11b66feb92d649d931a887ee5d4b26e35a4ef67ae31030072f6b83724ae2d9f2b1c4f330c46e90dd599d6142c6de19bad2ed1d8fe80258c4bf5b8e24ec92964c7
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162a2de2292b71e282ba086f3524ab8f69ca0a4eaf804b59654872d5829c702c637e60e8343c021764a014071eeb7629f9836224eccfbf877e62b0543d88d9c97d7c6506b7968ffeaeb56c9cfcb216fa7ac2
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162a702cbf3be86cba9ab359f35fd9ae056eb0dcb0c93985a62ed5204ccab738b9f95b3b88855c3dcacecd8048e2ff3b680436be2fbc96c5c604c1da18d986c1def3fa5d8f2f9930c73c98043de0c002f5bd
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162a01a27791e98d888e37d3e884855d55b3a6ce35b6e4f39128436d089dbc6b7e426eabf6534c2c3473a96909af16d1c53529786ee6a9b014df537a3e6314be7b92c4d6ef8098fbbb69e949a29406492338
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162a881d38d226743c138023afa1be39a91ec47915713767908922eb003f1a91aa2c1a7db713272c6f9aa1264633b75f6bdc92e4c3c4a01d62d351fe1a7281a8c7a5bccc5e114e8980099169dc546443c55e
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162ae257e836b9860d4f05b4acf35e4e3fff09616513167d7ae6c9bf2ba21566529d172265ea4ac7aee9b1804d7f26e24f374bc3be6a40fa676f397acabf3ff863b5e6beb46c6a3e5f2a64a4f061435a24b2
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162ad0e8cb804c0772a70552f0ceac3b79eda7d7243bdbbd133b7bdcd9f28d4563968bfc4b8ee31506dad4eac84add1be7daa266c740f8bf9a18719d0c0986dfa7ad959e65de4445d740269bfff920065354
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162a1af75b17e84f04ff6b28210158a1266be9083d7aa993165a7481550d7917bd85ffab05740a5137d946f61b1f510f87c80593e3ce50d8dbe3ff8b8e7bbb25c84eec393e08fafd7b592616d4977a455d89
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162ace0f4412d9a391e0f7eb831ae0719cda6def7428638243f399fd49818effc75a327d6d069b2198be3bf904d1391f4478bb520f1506ef7612324b06a90da097ffd67a9e6b73e1fae0202d4e836d3203d9
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162a04eb78975349dc0ca72958ba71589cb823d2173856e3e88e0ef18ad03e32e3b078844b3ed8b0ec11715705b7e8a64d70c0a3ebe944175f77b4bd8371cda4b2010dae692006ede86c93ecbb2b73a79f23
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162a8090218b865d3cbeb886aa913863f74b5ab86bc01782c1ba97acfc1888b47bed713fb31041326b4afec95d369f5b2f7e9ce58388347e92a2159adc6ca2c56fc4f1d28181526093bc324b1092beb6863d
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aaec97736ebcd4c206c89d4fa677bee6a45d69d4a2c1ebd4ac84db78a93785634c9d1f91c1a9b5245d73e50490a7e5e2ce7f36d478a6c38d7949d18a80e3bf7f7938d1f85f52c8a687dbd23cf89b2562d
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846d791f8fc6d6905429e78b0b4fd1e1c6d900c1c78b3e02cc0efe749bae139a456c9e9800b6596146230b8570fb3060552b7ae3e6a5588f2756e26890e461aa9771
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846d906bc6c25534cb54e5818fd7d63782314af4b8aa65de9989e73355499226463f92d62d989fa75dd8254cb4e9bf3003b6c4f0889476a67680e21dd3bbe710e7b4
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846d80c18b60c43b7d9b8641bad9708faaf2bcb809b0c8d639e2c687630aaf9817012cb446296d27fe65c7ec4901407fe65a06e4a071be930a2876eeee530363b26f
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846df30dece0415a329d00ac77e1f63aa2ecba9528cb74af97cce119221f71bd0cec99232f849147b09a9aa9e7a80c350afb05cb7ceddb5558cc638ccbfddb7b1a75
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846db1ee4ef1a05b86698eac204c04e46dc5f5cdd526c5e7aabeab751dc231bfc85091726d61ccf98a1717034f5a3fcbaa14fb1693a6948861214c2b2b5a7835ba7d
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846d6bf1596e8330255ec7e8e017aa63a23168d0c2e8e95b117549469b4ec91b955b7686ad1065a2f71313e46e4fba4052d639be43334d3efa18e498330d9fff9dfe
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846dde6ab81726cc8cd29f2892ac75df6aa3fb3a80ba664d509638a1b06fdd8924fe5933dd9e5456fcef5ea103f3f15c0b144ff4752cb8d27f636fdb3183bb0ae6bb
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846d135bb259ae4d6636315644a41beffa421b58b20f17471441c0676ebaae2fd3aac98abb68a4ba161199da28cf5deb146ef55d9d06c09d9d7abc83786bb04299bf
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846d6a57ac180669cafbf715b9168bdeed1cb6205f7a6ef405cde06f24f14942d2f893da05977382b9fa1be0e2d4881bbe52a95e42d8cf70b451219abc0953f44bf0
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846d7cce794f2f76911d8bfa76ab178fe73257c530296be2533358db129c82aee8e71975cebce9556ffa79fc26108a960780945ea323241d32e1e0b4ac867af75a17
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846d01adef7c2515e7954f82a3ea57721ba9641f59bd5db584c7eba9c6875260e3e5f18df34fe8c77a1fcc41446abcfe96b878e2171fc7617b68152d32706bbc93aa
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846dcb5ca3db6ca2653658ece22c1345d740388d54919ef17140bcab1b1b93062701a71a7e05535ae1c7135834f5a97ed570b5f9d82d5f1210ae9b94f93a5804afdf
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846d0af56107c7988099ea59dd00cd99869857a9e7b69305f07b6ee7e4e602f2c0229303e63feb5f260b9694be235313d589a02931650ffd968fd3e0947a229d255d
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846d7368ab5ce95d1d39dcde76e20e8cccb4b7820059762afca3b5f1cc679f2b01778e6cb56935d5dcbe6f8a12a1e0b419520fb2db362c7bb7831b78f3355855722d
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846dc1d2b07a58d4df8433c66f180fb668f395b78a871059b574d80ad0093dcb56b6d2e373ba14047d33e6275816e791085b6845454d03799dcf108b4bfa919ce6a0
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846d01e823c528a99f01f996aac79fa2cf45fe38ed6d041840cc4b82e20b4c79c58525a30320cf89c9534fe70c078d79562b8ba0473ed4b89872a978db92cf19ff8b
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763d80465704fa438f52d2b5ba709fca1027eae17fb71dc5ce73d5b8fcd2f123464d64884c359875321dc7e9013563316343
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763d2e0a983d49fd2b7d695394fc3947510255223322204c38edb96f7ef897779c4b3c92599f7be37757455d0a86a94a6a7a
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763d6284a540abb58cb78d7e195fc6e9c6baf3c4256dc7a3d6a50272e7eb9805227d87596bc788bf40c44590c1d7e2657cac
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763d3c9172b923f20ec069c79678174b6505d00fad11197cee0591ba7e0b31aeb5f7399e83b406b97371c38d5f8eae2f289c
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763d7f5bfc728808ee2f49dc49b846d504d3e0b7d35ebf09a68813f8825d1ee73f8022139fd12a2c0668d99ab27bf3d1b5a5
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763d250d130fbb722bb24f1323a63b0fa6ce0bd435bdedbbf1ed3573aac1ec65da5f7c9c97b79ba619020501ada5eecb633b
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763d038c6a8e87699da488f08fc41c0bd2967826b74ed155a34336931e5286f05d8f365eb743613d82e393d2fe2e4007e74b
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763d80a404cb625221bc8ad042b5c3ce5e0e574692329aab023b17e935c261d83c81b63711b686ab9a291531cdddc63d7a97
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763d52a1e7de84d4e2a24ea0006558a3bb6df29cb07532df9ff7a1c8ad182fd54df751b4bf4df2b37917b4abd02729600b67
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763d7007db41374283fdeb9542caa0866f77e5af69022a66bb35ab69e4fae97ff9fb667f3fa74fe3442e77cdff598d174f74
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763d2717d82c0c3c1a976965fb754b94948f9e85d2fff604b3bb76872807351659f5bcfcd7966d43bfc31888cea71163ac4c
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763d0f0a874f5148b609dee63339e905a665d7246a1ecbbb47959a9587ec3beb6131f7956d40cb07f18a12b8ea530a02fd8a
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763d926520fd8752d884f88bf0be5f0b420bf6921d793bf26b451555e871bd06afbb43cbf34c2f3b669d9c637a27a92d85c4
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763d72c30cc67e9f9ccad33b384230f1c21f286d1d7473b8e16351b3ff3035b58bfbf57b6ea6d6fe71250c464bbb9481da9c
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763d21b70b15d3a136d9cdac07fac99f4f745de7cd782009df2d1b02244b4033aa15f3421f36dfccab180750d787c7772c62
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763dbe076d0ccdad6956615ce720a9504fa8881fc12141266795e32c44e6de969b0cc80f307a711764176c45a2b61578042f
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637d97076ad63c09bd62b3021807d00dd12bc19a750b761d837d3ce7e23f87bfd955
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637dd1eb4f367328790d0c336519ef9ce0469baba42cc879905a01c789376dfba48b
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637d8930b1cbb8a27a5437b8884f40899ae1fff5b19f1e483afada346be3881497d4
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637d3759c77b88bf27b59355096b6c9fd8904fd53ec86214b199e5eaa51dfabb9c69
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637d9b25cd67dc32da238f4beb7c46b5b0b62c09615bec0f4215f14689719d0e9d98
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637d7bc0f6491793a639dab3bd21e2b9f2f688612a1f6a64325d76a5ed922808322a
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637df54b0f1aea70534243e0a3eef9a5276dee067cf0b2d7c961b6aaf3db6cd7183d
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637d95600df27b03fcb389c2ad432e339a49513c68d4f6468d274314b0867f1e860f
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637d3636c6f77341c33c856176d3730f6db832f8c5b0614240157e54e21d95d9e6a6
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637dc5c83ab7291ca53f5349a228dd65f3ad41382097b3939856438805fe470f1daa
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637d70db80384ce9fee793c2605b4c2f874190ac93968d6af4bc15297444ff9543b2
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637dc4cd19fa4b8dfd07bc79d67299f4cc199fb22c90f4d12931c0427aeb828b0685
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637df33282eea3d2d6ffb320f2a9c8db582216c76186a6839c6f7bd68c2c974ccb89
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637d791bb34a274999a4da6fe86dc7721c320cd1eeb8493201b14cc50d57d458cfaa
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637d608920d441336fa7af3df86c6ce3fd8c5f4ac7f63b60444ed756c4bb5025241f
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637d34599c44c43e41bdc14f66d5937da23156114a88ea843b84edbd9fdcb4ae234a
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637dd3b6aeeb71ccf2557f9725b86dd13088aafd6754bb6b69613d5c6d44e35a719d
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637dd3b6aeeb71ccf2557f9725b86dd1308887e235dcd863f455f46dcbef58eaf988
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637dd3b6aeeb71ccf2557f9725b86dd13088bd9e2635b36ac557c9aec20e9d956946
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637dd3b6aeeb71ccf2557f9725b86dd1308857849196067f9006d7f0c68e1d2c8924
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637dd3b6aeeb71ccf2557f9725b86dd130888cc8a6dfa951f1658d0e19659e646816
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637dd3b6aeeb71ccf2557f9725b86dd13088b7e6027a082d7c1981e33e8dabe64e9c
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637dd3b6aeeb71ccf2557f9725b86dd13088ea212c55051ce612c08bacf120da3ad1
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637dd3b6aeeb71ccf2557f9725b86dd13088e1199cb3294649c12ceee005499c28b3
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637dd3b6aeeb71ccf2557f9725b86dd13088170815e317055cf9047950c2b4a217a1
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637dd3b6aeeb71ccf2557f9725b86dd13088db324e45f343cd393e5c5a7518f38d1d
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637dd3b6aeeb71ccf2557f9725b86dd130889fecc904ac7849aad43fc2b71ea818a9
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637dd3b6aeeb71ccf2557f9725b86dd13088f48901e30f7a0f4a9e4c57ce18111fcb
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637dd3b6aeeb71ccf2557f9725b86dd13088ed1961c765d373a15c4246d7d74ef15d
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637dd3b6aeeb71ccf2557f9725b86dd1308827be87e8580773b1703ec6d37da6b455
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637dd3b6aeeb71ccf2557f9725b86dd13088d87472c3ea4d1862d1d4db423d8da0bc
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: c6105cc86e18eb8376c16ea37693db5c07b77137
-KEY: 8503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8d
-NONCE: c55b436965aabe477e0cdd46be99371e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c748
-AD: 1df3f4183aa23fd8d7efd8
-CT: 7265eea4b391d880c6bc72d3282f663e5551c0a71ca35898047362694ee8f2710974350a2a38a13b0434d312
-TAG: ead153f0c9488b88357e81187178465d2416ca97dbf7460c9519ed9957d9e74e62950447e49dd233e9c504876a90fa79273e597ed751da4f32a2c60cecbfb6641ca2e8938774cbc324affa9bb027d219730d57ca1981e87d0dcd0551618493f79ff8c0366383e0698a009bd976c63f089a8b901b5a08fabf0d3f798c349743634d5dd35a2195cf0b74b67d36d65be1aa920831906acbc57cd880964ec948e9c11614104721efb62a47600ee968418b1d197c3ce6ba6246d5ac1f07819f67c2cb3ca5162aedd354e2314d65d5e863964db421846da7603b9f11c503966834ed501885763da3e89a59f89f1e31f78111324b79637dd3b6aeeb71ccf2557f9725b86dd13088200478cc2d41d11ff6032c9579c97bbb
-TAG_LEN: 20
-NO_SEAL: 01
-FAILS: 01
-
-# DIGEST: f0f82752a691ef5866413f2b2e5c1d0ebb41ccc8
-KEY: 7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4
-NONCE: 183aa23fd8d7efd88503f78b8ed1c8e9
-IN: 
-AD: 936a91d0b5d2c0267218cb
-CT: 
-TAG: 3573ea7b63ce69f8201934d132287532f62cf9e3f76e29a7d32db4e5d02a8ddb
-TAG_LEN: 20
-
-# DIGEST: 7f3a0e20bde700d3c5596909282e5c3e764c99e7
-KEY: 86d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8
-NONCE: d7efd88503f78b8ed1c8e9ba2fd6773e
-IN: 936a91d0b5
-AD: d2c0267218cb7090c61713
-CT: c6281c1cd5
-TAG: 62c1935946013b946a234250ed67575910144f24abf6bb500ae865
-TAG_LEN: 20
-
-# DIGEST: 5b32faa93c18842b5cb7b075270438756d5f7dd2
-KEY: 97b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503
-NONCE: f78b8ed1c8e9ba2fd6773e0d0c302a5f
-IN: 936a91d0b5d2c0267218
-AD: cb7090c6171386d641b877
-CT: e22001f66a70505db0e6
-TAG: 06fdab054baa17e7012c3090a39ba2562febc61c54e9
-TAG_LEN: 20
-
-# DIGEST: 995a0f9b029aba3e0a3205364628bb76baccbf45
-KEY: 56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8
-NONCE: e9ba2fd6773e0d0c302a5f47e037446f
-IN: 936a91d0b5d2c0267218cb7090c617
-AD: 1386d641b87797b684e0fb
-CT: ecaa1fb673a01178c9cbb07f97da65
-TAG: 089b3d6183eaa3bb100bcf1271c050c7c8e7ed21c7b3d340c6b95dce75eeacf9cf
-TAG_LEN: 20
-
-# DIGEST: 023d08d5e5af3e0b016103c7c3cfd1d02577888e
-KEY: d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd677
-NONCE: 3e0d0c302a5f47e037446f5891d77df6
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b8
-AD: 7797b684e0fb56f97c3961
-CT: 92528284fcbe4afcfdee31cfa766b130a569f80e
-TAG: 2da876ef0ff47db0ee913ea056cdfa866567ffaf89f68fc1596e5160
-TAG_LEN: 20
-
-# DIGEST: ad4b11a43bb47aec3e91209f98f99839dfa1d6f6
-KEY: a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a
-NONCE: 5f47e037446f5891d77df660ed82933f
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0
-AD: fb56f97c3961d8afa22993
-CT: bfe23f8be496b3bc8f7ce56d98bd68d1fa5d34db969fed0509
-TAG: 5d00240221a5d84e7b9f7500c5c250d1df78d4026652c9
-TAG_LEN: 20
-
-# DIGEST: 580641286aa43bcef85be190e1967f627713bc64
-KEY: 89c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e03744
-NONCE: 6f5891d77df660ed82933f62be8dc55b
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c39
-AD: 61d8afa22993a340b9b3c5
-CT: a405ea4fd52a1d4c062e1f39f8074fef3990ecb68913525d2d780461df8c
-TAG: 91d9b3da0aa66462756bd7108febe9c52c19a46b7ae12022c55465cce0e6ae5032bb
-TAG_LEN: 20
-
-# DIGEST: abb06965675631a07f380e80a05cff36c2d42ecb
-KEY: f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77d
-NONCE: f660ed82933f62be8dc55b436965aabe
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa229
-AD: 93a340b9b3c589c7481df3
-CT: 1d85149d836f2eb30de4e81629b6db810080dfba5ff8fe1ebce0e21d9841d8526bd843
-TAG: ea675cddc01dbea77e1ec4419ec20d3f08f9bd5046d31f2bc608e19e41
-TAG_LEN: 20
-
-# DIGEST: c6a1ebefd827cde32df1d38379ee4bb6a7f81267
-KEY: d8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed8293
-NONCE: 3f62be8dc55b436965aabe477e0cdd46
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3
-AD: c589c7481df3f4183aa23f
-CT: 7ac2b8a728aec2d83c9efe446bd4bc61d4e195d0bc84a2bfb8fade2cdc0d8eb890dedae85da0f608
-TAG: cc1bcb82461c0f62ed6555a18f173399da6fab6943f13d55
-TAG_LEN: 20
-
-# DIGEST: 77fcb5875838a28d24c4b6bd0916ebd827968073
-KEY: 03f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc5
-NONCE: 5b436965aabe477e0cdd46be99371eb8
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481d
-AD: f3f4183aa23fd8d7efd885
-CT: fba1a6e2f66b4f9e45d281a15de9acc0ab1d9bdf910eb1d7f666dc0f9920f57602beb84189085fe9032db35a35
-TAG: 3fa554389af4aff3dea1e20c4b6209c615c926659cd38d7d86073c080002572f222ef8
-TAG_LEN: 20
-
-# DIGEST: ff3c91da880d2942bbc51adafaebcf4c6fd50603
-KEY: c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aa
-NONCE: be477e0cdd46be99371eb8da7dac997d
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa2
-AD: 3fd8d7efd88503f78b8ed1
-CT: 727c00d1375f9360f59bce3279a2058d47b580669a3725c4f655f9ad081f6e7517ac0feaa7f6b283381d4e42ca33d77a1cac
-TAG: ca3526bab09a860948a928b686839c5990e0e2392ee4c1368a92c07b66b5
-TAG_LEN: 20
-
-# DIGEST: 8c439bfcfb896bd106f94676b5626f2bc624c313
-KEY: 773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd
-NONCE: 46be99371eb8da7dac997deafd64b1fc
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd8
-AD: 8503f78b8ed1c8e9ba2fd6
-CT: 7af81e2a26192870b683f696c80b2cb7a212b68a5a85f9af5775f9582a9a99f50945b4e81c21185a315cc328e5345cf309c70c230fb769
-TAG: 823807599ac74b90be48c48661e615ef7884fa97dcdf27aeb9
-TAG_LEN: 20
-
-# DIGEST: 35d9dfb89c1883210f03050da3166b6d13f5b8db
-KEY: 2a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371e
-NONCE: b8da7dac997deafd64b1fc65de39f4f0
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8e
-AD: d1c8e9ba2fd6773e0d0c30
-CT: 98c01c277a1bd3e1edefb31f39c80968a9e94c40b702e7f0b69a39a9b9ea78aedcbba89b266f5a11e8cbcb64e5ff2d0adbbc10416110d9f7f9f1c5fd
-TAG: f3b49e183d08ce4fa72d2d78f4bf69bd2bada16d212ff285cf763468fe2104a38e095f7e
-TAG_LEN: 20
-
-# DIGEST: a07054c760cc66fc704edf950201005031f3faac
-KEY: 446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac99
-NONCE: 7deafd64b1fc65de39f4f03541a11be1
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2f
-AD: d6773e0d0c302a5f47e037
-CT: 2e7e6cd84e03e35d8977c9e1d4ce6784c4db3a87fa1b82e6f781e284e0d3914eb56acdde0374eed6283cc10e1f329821fefbf888dfc8fb42fa574cb64df6d88d2d
-TAG: 80503493bfa3c2cd3817bb145fc5794bb7519429bfa85ae1382e165e104a4b
-TAG_LEN: 20
-
-# DIGEST: 63efe7af502231420ed5aecce9a28446b257828d
-KEY: 7df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1
-NONCE: fc65de39f4f03541a11be112a72933c7
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c
-AD: 302a5f47e037446f5891d7
-CT: b2e315ef97a1b89b4625715c61946446fe1bf27aa60e65d0ad9849f71ec53ccbee951d3628efe2795949f88795b354df0ec68b21cd699cdd0f92f31f3d6013a4c1116165b4f5
-TAG: 4e9eb0387d9121ea239be370b7c0547ded846c811f422a71e61d
-TAG_LEN: 20
-
-# DIGEST: e8e41988fad6c8b44c56544964cfe0a347b35b1e
-KEY: 933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4
-NONCE: f03541a11be112a72933c7b54ed4fad0
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e0
-AD: 37446f5891d77df660ed82
-CT: 8795d6c225aa78fccaaff86101641081f4a440969633ca8d7830ffb14f629fa34dc4c15e8ff20a8940c7a484ee94503372e658615eb3fc07c2d2c399ae9ad7a77d684512d0ca273f77fcfe
-TAG: 534574a93d31c1c0bb43d3d482057e0d8b51a679a6
-TAG_LEN: 20
-
-# DIGEST: 172f4992e692a88f49628e5d3937959be01aed2e
-KEY: c55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11b
-NONCE: e112a72933c7b54ed4fad0be905d4120
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891
-AD: d77df660ed82933f62be8d
-CT: f2f3a3d985eb38c406bb0db0d141188c680656db8a4484abad2c8973267e14458e2be7cb52f06ee2a0f68eaced13db714296319b2b3557454f5e9cb47e8943ea3e66f7bd25c5757375be7bdd65fef53b
-TAG: 2c441fd3259628cab417df36374ededb564b3918239bd5e284ce22d0372f4ae0
-TAG_LEN: 20
-
-# DIGEST: a35fc7d25f90dd9cbd35910d5532aca8aba88b29
-KEY: aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933
-NONCE: c7b54ed4fad0be905d41203f5dce998f
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed
-AD: 82933f62be8dc55b436965
-CT: cea9c7528706d506d75cf085c8475c081ee8c6145ca11610b73eb3e103a706faa66062f8edc10abaa7c3edb3fcaf43c202c4812e768fececaa04564414f45816fa5c0df5b7518ea3859be75c4567565358293e9232
-TAG: 32de5af09080604ec6b6fc6692337793c264f2b4f5f88570cd6e22
-TAG_LEN: 20
-
-# DIGEST: 4abaa8453e8cfdefd918571a961d8351754ad5b4
-KEY: dd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fa
-NONCE: d0be905d41203f5dce998f8fb2eaad40
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be
-AD: 8dc55b436965aabe477e0c
-CT: 03065bb245ba12ab90903bc081198fdfe45d7d3c6fa3b1f76bde831917376ec2a5b2ac2cf629de6bd3f23025b678ea9cc3bd7801f5510b58432a8bc17999304fec4de7ab9ac22d75897cac67ed57e30d4745588b36695dd005c5
-TAG: 92877bfb0998bc70cd20d6c1dd51a73b031eb1aa567f
-TAG_LEN: 20
-
-# DIGEST: b51001b6ff9d27bccf3103a4961280e0a1406257
-KEY: 1eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41
-NONCE: 203f5dce998f8fb2eaad409ae0211641
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b4369
-AD: 65aabe477e0cdd46be9937
-CT: 8d7999ec7a80e528bd6a8d2a9724930c93ee5cbb0c888d9b7c79d2449e638c03f3143f1927a1b261d66ff55bdeb7ff6616da99a2155f465d7c91f54963e7cbda7b61529381204ba43c9681260799ce66fec9b0e9882fc0ab474fd9134adb66
-TAG: e9012cda52183ec3e658c42f819dd9862193c5b312ba42f288553e8f1af858d6a2
-TAG_LEN: 20
-
-# DIGEST: ad2b43eee27e6267d8c5c1c3d558a07dcd6b1f5f
-KEY: 997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce99
-NONCE: 8f8fb2eaad409ae02116417dae0cef45
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e
-AD: 0cdd46be99371eb8da7dac
-CT: ad918e7428ca106cf043d6626772cd45ce998f32fea28c3253fd58f0fcc191bb4cd250b5dc6a7b352bb2aaa66601e280576fa60ad8c3aa58742462955fd7f33ddbbb5036128617c1fc3bfdf83100dfdd069042ad1887c2821afbcf822756226c69779d88
-TAG: edae83839ae4bcbcf7da661a2c2ee207e4eb4716dab8e0e11e4ae1f9
-TAG_LEN: 20
-
-# DIGEST: 7b17b7cb19107af8fc4671420e461060e2ef3e61
-KEY: b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad
-NONCE: 409ae02116417dae0cef457b9e5e16dc
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99
-AD: 371eb8da7dac997deafd64
-CT: 5e654ee6344f96fa117a2e1f9cdc08bfaca9c83b1c4d61891e49077c8ae7a8aa604e1b19995b32872087e04a59ed367e42f0ad3998cc2112035b33104164403a948ecf73c516f74adaa57688cee9417456f996847e0c637120478f7d88288b5403f0697c4834e4ea7f
-TAG: 363ea1d1325e86d712a133cb4e4ed7b75715b2589f764a
-TAG_LEN: 20
-
-# DIGEST: a27799fc2e00e7abec4c5939451a834c4606cf7a
-KEY: f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116
-NONCE: 417dae0cef457b9e5e16dcc5b6f25607
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7d
-AD: ac997deafd64b1fc65de39
-CT: eded0eef58434338153caefd914cb98ff516157445bfbd25c3c5cbcc0ad68ed1bf049ac292da027acab0310ef08d66040341721524982165cfe7f6dc495f7f5f36cc410470e3b42045b718f580713dac8074b0e76a0345d11c94a9800bb5e5eef1cb8d9ba5818799cd1ef69c4ed1
-TAG: d7459df78edeb89e01ea8d685b5780b94ac3cde906a204fc3bdf00e36d5dd00e464b
-TAG_LEN: 20
-
-# DIGEST: 7c52593d1d37b0dc380297231c6cb7b64e04c493
-KEY: 1be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef
-NONCE: 457b9e5e16dcc5b6f25607f00d033fb9
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd
-AD: 64b1fc65de39f4f03541a1
-CT: b463f7f24871b617a1001d2f73f9eb8fe39b5fe0b382d420af876defd68a893add2eb6cac45e56d669f4ac67a943a3b32daf0932072bd701f9291b5020bfa9133d2875d8f6ee78ce8c49d45b80329831799f1eee8c712683300e49c57dc8c1ad0b07465184483d669b04c183976289e3ad6070
-TAG: 2e8b0999a7792a9cfe5148a8733167317f341a861b3455bc33df9fcee1
-TAG_LEN: 20
-
-# DIGEST: ac6871d354eac507556770d8b6bf10b5240273ed
-KEY: 33c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16
-NONCE: dcc5b6f25607f00d033fb95fb09e4d00
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de
-AD: 39f4f03541a11be112a729
-CT: 413d2c3fbc77845409ad66cc13432824ae4ae109379a9617e8b93d4f9b17fe0d0450476c3f98c229bf35e86fa792dceb4b3864761dd442c294e43b1cafe1fe086cd1ca5e1572fe2b3753c20a74b663b536f6e686d9765bafb10566f2b5cf02ee24e3dc69cb2be9392c991848b840418835603bdd83b2cf0f
-TAG: 5df250368694b1d3b13be94fcce671a810bd1283cffc0ef2
-TAG_LEN: 20
-
-# DIGEST: 4f498d0aa9205160827626ef80c163275eca1f78
-KEY: fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f256
-NONCE: 07f00d033fb95fb09e4d00d6172e780a
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541
-AD: a11be112a72933c7b54ed4
-CT: f72c519566632f89513f3f278407845ff8096a5b63929f0ea6009c3cae0dbd853662c4017ee5729eab92f2c475f0a45533de67d4b941d4b16c1964986d8f4a16cc12f02c28442ddf5790f321b3942cb65964587f3fe55ab28064c52ce3d3598d3431788ed2c26fe1b196abfd35afa0f7c8206a6bc71d61cc4e1a086c4c
-TAG: f8c75274342950e4893ca3b0e9fe95fa51343cc9c204e3fdb1d9b5af26119fc874e52c
-TAG_LEN: 20
-
-# DIGEST: f0901e8b8083c39222fc940384eb73cb96b22892
-KEY: 41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033f
-NONCE: b95fb09e4d00d6172e780ab8b700433a
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a7
-AD: 2933c7b54ed4fad0be905d
-CT: 71fd9ada130acec7deffa6a53eab506bb5fc80ed7e98e656a5282cd88cdf9c253a87832ac42dae0e8a476011b11cd5c075c74b0f29c1c966983f3fa69e00df1ea93fad4942bde475e7ee08ea2c5f6676145c3dfb8d07521133468ce6e573b789a71e59d622587f8fb76e93af95b0c47e15938206774398e50a7e7550e2718270cc1f
-TAG: 2b2e70be7be2df4442f0a82a8dd4cf89df1e3103a1b3dac4d3b1fb973e18
-TAG_LEN: 20
-
-# DIGEST: 7af193cdcc8d7f17b55447a81eef3dfdf345bba8
-KEY: 998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d
-NONCE: 00d6172e780ab8b700433a957a741c9e
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54e
-AD: d4fad0be905d41203f5dce
-CT: da1b99574d59c3998b39dc057d093134c9bb4d0f9a38758e95273694e405b55d8047bf119dbf29c346ea5318a13c8eac769230c085cc2b67e57800279fd47aee9f2ba8e572bebb9f231e954430bfa53bd193ed74b4dc59d6c6e3687451c95d996c86283f10bccde027b90be52f6e20032ae1d83aea8adf183010f4fb90b9ecb96b6d79fcb98f36
-TAG: 632079d35e9dc29a1579727361d74d6db3e9d619394310261b
-TAG_LEN: 20
-
-# DIGEST: 4ecf44faa266de0904b093653c4d623a543d12d8
-KEY: ad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e78
-NONCE: 0ab8b700433a957a741c9eb80f2b021b
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be90
-AD: 5d41203f5dce998f8fb2ea
-CT: 5e1086339724c5489cee84cd57e1b188bf83390f0d264e495c92040a1e56a616d5e2aaa3a240592f65ef0e1bc65ca5e18fef30362fa7b38749328ab2cd7d43c5a37931597d975101e59d089f03a3d99d928cf50db01b3f5e789d4b8b4addbca347f68dc94c17944bbc17bc0ed7495a800c6faa9c87a152e792a11ea7f0b551ab2d5377d780e8506747b67ba7
-TAG: 83db1f7ff26becd07a35f4fc178567cdad3eea5bc8aa12011332730a3d2adb24766de087
-TAG_LEN: 20
-
-# DIGEST: 92a938017497e0762115325c40b5f7c138d5c6f6
-KEY: 16417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b70043
-NONCE: 3a957a741c9eb80f2b021b1444769da0
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5d
-AD: ce998f8fb2eaad409ae021
-CT: 5fb310ed46bd64cf198dc4b2a2e03a1cab6615e1d50179dd050cd538851669ab1ed4aea1970ace6463b5a910bf5be01e8d8196d6d0833a50a330531f61d962a4fa1767e958e38b4897514b08114e9c1ddceb19aea5d5ee079c3aaa8017e9ab7ceb03514f7d393ed60ba6fb88f7cf8bd93949426083afc9205052394680a7c04fa80c2f12484dd44047d80117e54cbe9105
-TAG: a5e895128dd29e99c4d955da935ac0c6d5cafc8c9c2139f848d68e93e7b168
-TAG_LEN: 20
-
-# DIGEST: 6b126413a7bac1069cbb5b338c158463a242d607
-KEY: ef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c
-NONCE: 9eb80f2b021b1444769da00fcfab0f5f
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2
-AD: eaad409ae02116417dae0c
-CT: 553c974dbb652bbd9a573ce72b9df30ec0c01cd04c8c706d7121983d8e8ce23436bdc2e3bb2134af220dc1d70eb68ca340c3e4791755e5b7101a04de9f8c455c81c617577e2c23c08eeb3b23bc959e4870e0d64cbec4c1d276d31f7ad19190f0677d0dc0494a8053476591dc5c87cba04248cf5c7c2e17131af7dd5b794347045ca4fa7b30723d29b22c509ed91e95fc456cd87c5e2b
-TAG: 6e3e534722041d09e80e11a72ddf9beaa27c8cd8832bc082bf79
-TAG_LEN: 20
-
-# DIGEST: c72d214b42ed66ae0822fa9f3bda306c7d58cf80
-KEY: 16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b02
-NONCE: 1b1444769da00fcfab0f5f93b511060c
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae0
-AD: 2116417dae0cef457b9e5e
-CT: 8f269f0114fa47b84784dc3ef9a084d9d65e8bb10c345a9a9d13100860f2e713208c5c4886b40989cc165605f5719d5a8e76e146e6a5ec822a1fbd6b237bd0f02d41ae5f26032c202d5fce97ac0317c28d80b91343131ab3db438962b2e52bc14cbc286b50c1e4c9170e516461e24bf920c470ff7e2442f755aad133cf6b3e20e05669f5d86bd39a04cadc29b2c37dbeb89f0ff7192f497b3e157c
-TAG: 4a930cb7a078b1f1312a1baf186c8ecbd3cf1eb7a4
-TAG_LEN: 20
-
-# DIGEST: 9faaa58dd34a192550c3519f8c0aeb2ff48dd388
-KEY: 5607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769d
-NONCE: a00fcfab0f5f93b511060c9c5f3aacef
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae
-AD: 0cef457b9e5e16dcc5b6f2
-CT: 9e3b93e29ee6c0825e0150fd63a887227470d524fc52d652db43730c0c4dcc0f0c2f6dc2d26568a61336082ad638d91c4a3e149e0680321151771f52eab69a579b908db93d7a83d57c360f99de2b4ef1ee6fe905e17f02893df19073b2afd26da1729775ea4c6adac3bf7b50f2b7a8c3b8fe09ec371fe597d74cd15a32ba97adf813508ecab5aa303ecb9c20464a7914ab38255930448f990b058c89626024ae
-TAG: 066ecd13619b0291c37297f3fb23b5521faebef99b281cbfdd79037dd351b7d9
-TAG_LEN: 20
-
-# DIGEST: dd5e6be3644dcc888cc50c0b2ad0d55eb0407fdc
-KEY: 3fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f
-NONCE: 5f93b511060c9c5f3aacefe61b184ad2
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e
-AD: 5e16dcc5b6f25607f00d03
-CT: a042853b92cc97b68982df3502800fe9ea7d8e7962002b7d8fca0ace62a7e4b24162624be865ca5010943f469b5793eb4fcc877c83b94c176f67f074704240e4c3fe3dcb1dc4f0f963b7550f280ae18f1b0bf2c727da8ac286386d852a71bd1a0b8cb2b39b3ca29b5570d212cd43ef0dbf480aebb6e246f300663a3e084e15affd00e44b11e4bb0afb7ba73ab6a37208fe63667d24a94f45a78f1bbfff37c5975a382e1733
-TAG: 47b11ccfb0ef7b639c107760b90f4e21dee961b3a59f8ae6133f6c
-TAG_LEN: 20
-
-# DIGEST: 1b8b627e1020d71318511d4c2078eed315ee0b04
-KEY: 4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b51106
-NONCE: 0c9c5f3aacefe61b184ad2463939ed51
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6
-AD: f25607f00d033fb95fb09e
-CT: 712d1d5251c85943d3da1cf4ede4e648c64177447cb04d34c4417fb4b89676f3a59501b9da58d94c355f1c94b3470bded1c34c49b555238d3522e074f5c60cb0990b04d953fab40ac8c4589d16f7006de59a929b761cee5e4e43a708b53c4db32c49407697a65dea4d3b279fc0bc343f35621cdc097635affb7dcf17f12858cc20629461c88967b4a508703355421304d55ba1d4f07ac5e0d58b8dd76608c5441a0b7f8ae992750e2a00
-TAG: 85c2837b93fa27d7e8954a0e790c8e8a2f06a0a36c1a
-TAG_LEN: 20
-
-# DIGEST: b7370237d402dbf76f1a431cdfbb37f41ef2ad4e
-KEY: 780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aac
-NONCE: efe61b184ad2463939ed518ce97c3fdd
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d
-AD: 033fb95fb09e4d00d6172e
-CT: afc5e2e40692708b77a11005f8e5f8a81bfb418a9b1868ba8ce95d8c0d8a42872a980d8df4ee62e3b7cc1ea14f5681b21624f670c9cc38c39e02db42a79fca20527e8fbd84a5b54c08dcc3b18ecf34f651a51b922f634204d2699aa41e0db44525c9d0702eb7f31004876c2b34b60eaa9ec7d5a81e4878ebbb53fa7b113899e705e3366ee578cd6d3f2828bc32e3ea7c303bb94862fe340c9ab91a8c0b8d64471fd49107935802d48eae18a6a1d77f
-TAG: 71cbf93daf609a91b0957ab733dd5bb4c15c4f4f87b676e66c6b9ce50f57b18657
-TAG_LEN: 20
-
-# DIGEST: 0ad0e709e40cb2fd662020d420d97ae50a14adc2
-KEY: 433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184a
-NONCE: d2463939ed518ce97c3fdd293d72afc0
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb0
-AD: 9e4d00d6172e780ab8b700
-CT: a56be93b1bce1546c8e2ce1c44fc0a2551a82f8bdb89d6caed27589981add67b4c8f1c068d00c73b8821f42bc6268a4366ffa87c5eb122829d58423ed30015ffd10b2c4f4120d600bea00069eb909470a7c8cb95fa74b668ff756a2715635fb6603c27bfd9ab0e47ff19dc637bfb7294b5df8fbdb80adf6c7f1ac20b7a833c90619544e9df8f4b6c46846ec67dddf08896cd7d2aba20422fd2ebc287458b5b16825a2c938f7378a8711500f7968e2a46a4b4cd46
-TAG: 82e4509cc79cbf86265618c60124dae5b83273f274b2c021ba1f664f
-TAG_LEN: 20
-
-# DIGEST: 5f9967a8fba7184dd97dc7d5da22ea785e0ffbbf
-KEY: 1c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed
-NONCE: 518ce97c3fdd293d72afc09ffdd4f419
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d617
-AD: 2e780ab8b700433a957a74
-CT: 42c4a44d5c32c5506e5e1aa6b5d02294a7a3f83e0b69b86b3bad5fa159bbbff88b1c691f19a94b9c09351e4c2da5106b4a98583250bf76156ba41605a78595410ef30fd5eaf6d7000ca24d2e3327d9fcd69ac842f31c7a5ec7798c917ce4eb0d1219b90092aa680c73baa42c4d930b3bcf3052d88d216ad7b52caddaae916600c6a31c9a4654ce4eb528c355d99a3349035b37b9df8f2dd07699631c54c6604815bdd16d9c06fe27f29864f7dc6d340d1c6d834d21e1dc79d4
-TAG: c716b8e8a35426e7b86baf32f17a3db30ea0bc012a83a5
-TAG_LEN: 20
-
-# DIGEST: b5aedaae523d9d396ad1d9bb175bf4c7c0b03eb5
-KEY: 021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3f
-NONCE: dd293d72afc09ffdd4f41963249cd299
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b7
-AD: 00433a957a741c9eb80f2b
-CT: 29f67431802cb52308b51065f1592c6def60f3f503bd12deeaea4916ff8dc310fe84ac7da36cad4c96cf115862b2796d90a95f8f23edb3f495d72b0f71552975e37e4105dd70c87a3273e46d62e23db8a2504aeea3451ee6505b0fb0d236232861dc006320e36d9828e27d3a0fc607c74bbbcf9c94363ab49efb6e904b741d2f6c93c2e55ab9e41157d9342e234077770288efc77eb95b335529975636309836349d5d18fa7ec643e972ed0e9911f21eb04279ea8bb0b04e9b9e8cdf2c4f
-TAG: 3a039e0c32148a50a93e0eb29d9a093eac58013a426de1390c66b8d4a8a52688a3dd
-TAG_LEN: 20
-
-# DIGEST: 52bf12f5594b0cdefcf977c07626e8748cec5425
-KEY: 9da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72af
-NONCE: c09ffdd4f41963249cd299b92e55ca24
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a
-AD: 741c9eb80f2b021b144476
-CT: 170a91c57848e7fd097f96da09530676f65ec1e0e31cf9f8de86bb5aba87a311d37188abd1ad16fc4f6d8201b9dcf3aaf895fab0154c301464b9c9d1a082d0fd3ba717086f2d5d1b5b2e71eab58a861b53dc5c3c45b0dedd334e308648c9185200d4e0ea2e5f26bcb0bc6964d63aa548de958549aa2d68b455e46f2ffe6f9f3e8b59e18b23672600f1f44247600b43131e7530b2859fd7b8fa5620dc8da0b428f5a1e78015afefa79b504e35e1148fbc58b982179002125748c76b3d283bf493cfbc32
-TAG: 872dc1afd006674d15455a1ec8e67c5a7af2b979ad23c6ac7b5ab3a8ea
-TAG_LEN: 20
-
-# DIGEST: 900a1792a921b6a253c47013c9eaf01fc5c880c2
-KEY: 0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f4
-NONCE: 1963249cd299b92e55ca24d8c078c49f
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f
-AD: 2b021b1444769da00fcfab
-CT: 919a222be8cb73e456dd156c699448211b709e63886967b73a1eddff4a6ae575498823bff9d8a8966c22f8077aef5befe70492175e31daa749fbb0431c1880a8595475a48a299f082ce7f57b2f0a24b8cb8442041bc93e01e44253085685a056157ef6f75331566ab98e1598108ee47833b2f12764ab1ab7b5fee647e95599f2daae053cac2c02413930f81eeaf94ce3dde5f543cb219ac32eb20bc0d43ee92586b3886af60736fa45400d4bc848219d06e8063bfe739bd44fe96564d0437ac12ba99c5f02bb3be4
-TAG: f8d5f712d66f899357f64957f10b00a48e605137a8c830e0
-TAG_LEN: 20
-
-# DIGEST: 88d7ec35d88ff113703702955e931e802fb0d8b8
-KEY: 060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd2
-NONCE: 99b92e55ca24d8c078c49f78c7e71371
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444
-AD: 769da00fcfab0f5f93b511
-CT: 58006dd9eb2ea343d8bf40076a71c209375b5ed356073b946dab0617bc456391fdc21a93801557bb40699eebdf57693107f73ab0d777060569d6a300eba25c9dce54c621a25991b43ea18b9266c0b4e2571d9870ce9ce2e705e0a5b7da6424a579c3a890b9ea99c83d909b033c59ab2e0d9d48df70a04535a84738fb355ad579fad6e48803f5ef13c082f83f7f8f1f603a91b33f159c5157f8feef6d9f679c0992f726f05892a12bf6b7c2d97764e640e0174ce82857630da3ca7e032ec999e528fa63004b49c35661202ffd33
-TAG: 4e3e1e266a92ede447a0b876b77df48dc2fd4adc9331186eff899f8dd1acea003b8316
-TAG_LEN: 20
-
-# DIGEST: 8d8493b55d9b74892e77d3b730588c087ca9b1e8
-KEY: acefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca
-NONCE: 24d8c078c49f78c7e713710a025cb8b9
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcf
-AD: ab0f5f93b511060c9c5f3a
-CT: cabca6bfebb503df1a2b2cfb11c23394f1ee57edbcd0c8acf4546dfe383d7b71134bcbde9dcbce5bc4300964de3c9c0d48de13153a69101643c48842bb0efefe9e928fac973e69817a7fc35722e22fb21819107424db4836d24b429e8eef3b861099d58aef6bbc23896f862fe41ca72a34d9f41b8bc4daf96f8c7b4e01c3abf5ae4a7839785fb7bbcf50a93a9d621770797c68483602c30e2c8b91acca0f6dc08346c851e1d5f3da4eba9327ecdc56ba52b7377ada217b595e760935ab5c681e813454b037dd6ff31f67fc29fe84663535c6
-TAG: a259161d6b16a7d85d6ff59f90ae7624b9fdbaa9cdc72f22396e98b4331a
-TAG_LEN: 20
-
-# DIGEST: 4cd92ac16a807d2ff180df75c47d848749c7ef46
-KEY: 4ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c4
-NONCE: 9f78c7e713710a025cb8b9d71d2989ab
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b5
-AD: 11060c9c5f3aacefe61b18
-CT: c5d01436be8f519a54eb38637bbe20c56e6bcaec1e9557578cc1ff66658b83ce117092f33c40084eaea1db6ce043b35cd2a55f109db71567ab7039daebd2a363246b48ef0daff133d51b21020270f165056ec0ad3ef67f3d4525d14c50730ccd3d0990abd52319010f3afcf2d312054f6be80adb71ef96cff4377a35c63949caddcd52dc2a8604567e7894367e38db843060f8a34d6c6bef60a0ef47c31955229d7edeacaebeacdb45ad147b1d8874846c333a1136ec0992f9847465b07899e7d144555a8a35f65c25c7ee092de14d499968d7503f106a
-TAG: 11cb958d9cac452c9d89f0af8ae0ef497b74631fbac1944863
-TAG_LEN: 20
-
-# DIGEST: 64ee218c0c96ca8e2d2e50cd809d61ee109baca6
-KEY: ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713
-NONCE: 710a025cb8b9d71d2989ab33e978c445
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f
-AD: 3aacefe61b184ad2463939
-CT: 37a3f88b2b27dad02c71c257d17331e7650f71a4632fa6dcd651c96dac0acd00106494e7aa6d7667a8c034b621608f5edcc4ac37fed8a5d150552e365eadeaa665e605c158e86462417c5c161bb4d4d1797718866368ab4518d7bb109a55ed2e73d02d9b94ddc624f869881d8d4762e733d44dc04498823ac137ec7ec7ea85281c24dc9f63ac2acedb9c46627f825977c58c61fc930b511098df24807d7a5a84634e10a4726a7f8c668f5cd07898821958ef074ba4397631be00269b95967538f4766584ddc1479b4bb104ee2448ce7186ff501b46184206660cc091
-TAG: ab5011ff99cdc39a37f6478b1cd82ca1ececa23afb81adc0b576d49f83b454a39c15c8eb
-TAG_LEN: 20
-
-# DIGEST: eef8eae201ae4e5af32ee74bc724e13ae5ed3978
-KEY: 3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8
-NONCE: b9d71d2989ab33e978c4451e3be585a2
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b
-AD: 184ad2463939ed518ce97c
-CT: 1112903cc97cc872c44f156068c58992f1aca2a0a8f1b8a08e744ac1dd0efad9321556c77e9c64fd6a36041ebeb980c0ff064aba672e4eac6cbef78235325c412d80ba0bfd76b740623e457e0e600f375e47809c56c1b7f2f5359d08fabf5cc6beda669a495813aa0e8368f386fb9d7ae42f64a52c047e0230e045d9ff1752315af9f6c4348d7e685b3f3e2daef06e41a6997ed11b3fa0f2b15f074b1362c3096d010671a8abbce7bb5c729fb6babac9e685a1d64ffff97c17b33396d2fe2a920082445fe75c8d924ee2f5935dcfef6e9a88372e2c03be6a4447153e96d81f7bb3
-TAG: 4d9f9b3ebc9678fcded522b32214b890415a87105aa401c188808ae0a106c9
-TAG_LEN: 20
-
-# DIGEST: 2fe67a81b41b094a708ae515e28bcbde3bed724c
-KEY: afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989
-NONCE: ab33e978c4451e3be585a29a2af12fee
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad24639
-AD: 39ed518ce97c3fdd293d72
-CT: 9fae07a37501e2382d004a399d8cd95a9cb9a4b6dc038ed7bcca0c85073acdffcc66a84bfd302c48a4eed40a679d5658c8eeb76772cf93584a8decb8969cbe7bac022b18fb86c7bc26f0974ae4e03e36c22bb7b3e02d182e25cfd52ef7bc890fe0f5935847f8652d42965757105e88b327e19308c88cfcac46a47478ca7a0643da97478b127f4dc45f61537394fd4d049d59e8361ccee4ac86cbb4e14050ac07dcda7495f1a1d34095a9f7d697cb6b88eb9a6421c7ab338ab4d0d5b2bb61e11ddeda49e75bf6d0bf0d12fed98d50d65d33e029cf341f0f7a58e85bd0568b7cc3db803ec5e9d0
-TAG: cecc027d5017b820cfcf74d78664b23fc2aaeb20bc8d73499954
-TAG_LEN: 20
-
-# DIGEST: 33d10d6cb5dc80751d0f8e370925d7c86cda331c
-KEY: f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4
-NONCE: 451e3be585a29a2af12feef71e1063b0
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce9
-AD: 7c3fdd293d72afc09ffdd4
-CT: 1817463656d30d6648bc628a45e20e231a4ff8dba4eab244abcb198580499c696b41cf256352023975a62e66d5359f9bf656cf098819a5491f1a113a06fe4d56ab4629665b93a017369a1e2d22f817a66120197e20aa92f174b5ce4e158a272b51acf766858864fc5c90c1ebe9bf79b61f327eb12a106a38662bb2317db8113c3301f00dfc54bdd79ba7126f448cd9f3eaac475bb62eeff16fe2de45af646929f797f69163864884279eb35ec9ad6137a694d2c72a2cd2fbd25cce1ee90b73b9c7e592af463057737a1db4da41b479abed76d3b601292544be8ecafdc43a48129ecf1d94dd9d59183385cb
-TAG: 0f58d011c758b6b59622c5f26faef2f7e2a97aa82a
-TAG_LEN: 20
-
-# DIGEST: a29f128842a48debb60699ae0df0da9a9b5e5dad
-KEY: d299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585
-NONCE: a29a2af12feef71e1063b0b4e6e89920
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d
-AD: 72afc09ffdd4f41963249c
-CT: e68230ce6101c64176f56a57c34ee54ab6e95b7aa28d3e3d262fae71ea66e5f1699e31b3f9cc1337d2ac193b5b6df4d1d10fb86b77c120faa9f67ad6d9cf98c49e1ee572eb8ef497611e6b5f84ff42dc3a2461a326424ed0e2c5978ab4175cbc15dc4cae9eefa24ddff8d055abd113f0fefc3af7405b153ea1fce067062a751c306cf0eec477d4b9a068d5032c410de991497b6c166233036841b9c1f6313fdd216200007089734d096189f4c6cf0a0e5cdd2328d8514d319d5644003201124ca71df0bebc8c61595a54a6a85f9a88565a0f7b517b20488da57827caba252efdc6766cf860f89c21128ec572c2a5e44c
-TAG: 8b92c00f8d4306201a1fac6797931b4600a3993e9c11e01b7fb92f01c20a213a
-TAG_LEN: 20
-
-# DIGEST: b5048d1efa7564966b6cf1579cfb4ad8e9460660
-KEY: ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12f
-NONCE: eef71e1063b0b4e6e899200304bd3508
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffd
-AD: d4f41963249cd299b92e55
-CT: 7ffa8c3f882de672b6548e722bdf64671ec122187bd811240e0c8a62f7ece34743f3e8286cecc99ad2637f960134d80230f4b358422576025bf2d2e25cb0b2be8c93fe8ecb1a2a84367d075b03d2eec5c8ea3bc306727733918762088ecb995b61720cd294bfbea261cce90ba5ad6f5b011bfb2767f4388f1c2fc5bcdc9faf1517b734aaccd780328a0cd3c3e8a82c279231ada466f5789b0795e56c9b14073b9900046c7cdb02edb55c96aadb8d703f0f6d739d0788447fc8c47ae9ebf40f38355476bbad9aa239373a6fd38d0d4f39590d70cb1068729ed8e685fb905685dd549e333c670fe07abb04e7af6b6855ef574913c06c
-TAG: 595df50885208148d4c51412885c34bf197e3eece02ad0c969ece7
-TAG_LEN: 20
-
-# DIGEST: b6e68f5f0dfd8ceab56ebb657728c9bc5129fdf4
-KEY: c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063
-NONCE: b0b4e6e899200304bd3508132a027d1f
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f4196324
-AD: 9cd299b92e55ca24d8c078
-CT: 0638cf64bebd174c40cb462a85d7c6ea529619e2a7338e829f91227e5586e88e11bbf62addf813475e1bc024b60a2f8ad72541d3345898b1833f28db4d9e2754807c3b2888e01584590f879ffeffc2cd66973c65c3712f7a7704ece102a5b67e4d7414fb53ad9c16e4aa8d4f310ed787dd8c23b008f0a9667b84ab7e429ad7d2173421c8ac06abb1e4da82493a01a6872ef6cb603ac754d96ec48cc15ee9c127e321523aa02508595edae2ae4bdd453ee8b6326d05166704e1d358d7efe22c24a40be281cbacfc97383c4a0ef9f2aa45e0b31b06b8b5ff75bbff51b6c77880093bbf113135bb7c251c7123bca5e35e311b55fd7ddc84e507039c
-TAG: fa8112d34c21d32010e1815b550a05b971cd6153f281
-TAG_LEN: 20
-
-# DIGEST: 853bc7b9fbd640cc0654fa5533ae302e398bab35
-KEY: 13710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899
-NONCE: 200304bd3508132a027d1ff4c047b3ef
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e
-AD: 55ca24d8c078c49f78c7e7
-CT: 20e84bf92ccc563048b5d130c8c2260974171942a26977e1b1716c1e73007433710609261743a0320598c80712c1c50a3e8afc047a5481ee38840486001ef9c7ee14c42e4b41cc6238bbc2c00f5f1ec121f5df881a12e98ecc46987a93fa2ab6c76279850fd2097f7312e699d10556c4899ba330ddbe52ccce814fd575842153698cfbd9602df8d0ba4765c6483de83232d9705ca82a866b78b1c782b13330b8637c0de7a0ac028c7da0a5510373d56a48e8bd1e59d269fb69ba7a73b1bd485859346d060677ca386c04f6d07b295950fa3ee91cd38928e29a38128b8ed73007182ae3870630b385ff6f212413260d083c61f1e537b6d1057f3972553938ad
-TAG: edc275bc6faa902aefccdf13f0825ebfc57f0daefcbd118e10e1d324056723a87e
-TAG_LEN: 20
-
-# DIGEST: 286a92c480192206a2153df1b6d0eb26e6507da3
-KEY: b8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd35
-NONCE: 08132a027d1ff4c047b3ef4f57a74706
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c0
-AD: 78c49f78c7e713710a025c
-CT: 6da237176c778f67e98f09fcdc96ab9a54a9ece12c2e6de1223dc1a22c74902352c33dfc993b398728b8a62206a656ed0ac1d49cdacb22b9eb1ae70e9b7f511333054dbc26a26f837ed0213ba98820c31104dcfa60c6892a98bfa0a41fc220e81c219d3ab9312ddc534f314d35056901d04d485b3caec47b746445270e2276e02e8f1adc54547ec9efb1ad44354b25b5c09c58cd9480a68e758e87739888129e337419d9638482cba7259f5b150891818b58b24fbdf6211c7c5976cbac2e10dca06d425247005385996a9649240d680811a5ee4229d0984c11291f86b1e75a066263d3a738da0c98ba24054da15f6f11f5c8aadf24b547016f336beee210877b25e987ea
-TAG: 0dd1abc087078d0d7e93d9d86375891b928bf21763a87e31b345b49f
-TAG_LEN: 20
-
-# DIGEST: c2acb0c126af5282abe14058066631fd0c658571
-KEY: 89ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d
-NONCE: 1ff4c047b3ef4f57a74706de4b381c69
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7
-AD: e713710a025cb8b9d71d29
-CT: 70e4d06f468de2780565a300966e410ee3e0ebbdd6d29b8921a047fdfff86da5f4fa2981c1d7a4013c480b8ece1fad84ea27ff0b87bee1bdb88a661954d078bb65bb6a2aa1ed5b00519bb0c56069774dde08b06bdf83335ea9c8702abb9098015707b00122eff2f8e5108e4fd6cd719131f919591d0c5198c1d975c4f038ac273cd6f9ab2f8136b48429efa57c6ef1a239a693086025bf6db218c2c26bf0ff823dbc08944f06c7be29278baaf5039e544a54de7208e0392bb5d9972f3c3a7e69532b5d4322c71ea4af6fa2167996145538735b3581250c1fde20c03b14d01c101a0a04e79f6c6a6390f10cdbb3fa3e3fbb03a64132bf82e965039f0231d69ae71ac20ce11bfbae7229
-TAG: a90fafe3412c5b67009dc185a9b38d00e26e9cd299e550
-TAG_LEN: 20
-
-# DIGEST: 500e5f2a56bfafb2d93e26224c9c2df562589f23
-KEY: c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3
-NONCE: ef4f57a74706de4b381c692ef164101b
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a02
-AD: 5cb8b9d71d2989ab33e978
-CT: f0d7b956c586c029980ff8a78a79df78d14328a608b47cdb8ca3670f4bdca883033f8372b6267218b07dc5b9aa5b8104a1c8c3fab4d6f3d39c2fe8d7c997889a8deb970edef03204852873f1f9f07e41754996f57fec4d72cc438c7adf58a9e888aecc2bf6d7d240431c1481e7a0c9bd27743700141b7be5206a027165f9ae82cf1f3aaee97dde5ce850e34bc714ad67c617c6640905b1c067a214a160df4e787b48cbebe465cfeee405c8611c7d376ce913bc3a5c0e996e4cc252a89a48ff09a18cce553dd5ea3ec9b7d8417abdadaaeea44ff233ebb45fb6385fc2c4d9be76cf2ab7f803cae25fbcfa68bc05cedb14492111696884995046b5959389081690e7e4ec9c1af09a482e7428324632
-TAG: 7ac73e153a515cf974176c0111800c5f76ce31a1d08772b950754a82e6c5b7d5dbe6
-TAG_LEN: 20
-
-# DIGEST: cfa6a42a2cc0ddf1c7b20031c95e331696bb9ece
-KEY: 85a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a747
-NONCE: 06de4b381c692ef164101b89b476f72b
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d
-AD: 2989ab33e978c4451e3be5
-CT: ac2c01cbae12fa7572615a755522dc5c0aa6d7782167e4459e5dcbc6a5c2cd8164890d2715a61e4e80cc13a35c48b537f441ad1bb63e2d3eb2cfba711fa3ea878cf0b4961ea3a016fe0a918f7683be5a243f02ba3e651950f15d4df7b7f144a57feb3d6bd50707731e273a2b78d7733be4be6bbddd4aede0ff29ec67d280f159210ac1ec62500a8f0a2c17a6d05114eede2ef4b393c4728d3045e48bd381d616ad13d7672083b55aeb1f6bf0a043bdf37712cafc7d57d23b1fc96371bd111cf0facf75d45e28f45cefc76ae50a5a90c00915fd348d5dd2110174ba52b67c6158c1ab541ee57cd7e29155e6a18bba141eb6b5ecbb2f22f68e37a695a2e37aeea8e2f66209d9664227344facface4d99f2ecb03f
-TAG: 39f33e804488bf9293f087647a39f5b594115586268ac92bcd688e1580
-TAG_LEN: 20
-
-# DIGEST: 2d1b27948de83e32a0fa5be7040d896824ac1fe9
-KEY: 2feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c
-NONCE: 692ef164101b89b476f72b27f06f520c
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e9
-AD: 78c4451e3be585a29a2af1
-CT: e750bf0d24339dff581342ad50a30cd209bb3a4ff8435fa17428c504aadb7520804eb83698f54c13532655c032b83f824cfabc9513faeb6bc63641e9c76c019964699ab8bb31bc22c0a1acbebcb76a095cac94afa630030e036a48cd49ebe0af001604bd753234e706b48183f2bf93028267ba8622cd661910a6e147c8af31364f3aee50b14a40cc6a8a0227615c4cc6a139cb2a33374145841cb58c44e0dbe5487294ff9e3691d89666eca0c3edf6b9b026abe508f1718a86a7ec35c2719265fc1424e445335d81afaf02650f4dc41d752dcc2c272a006be8e98bd80250c66a616ad87897f7e5b9a8a00f54e942914e2339fb2e08359b3f78f8b9c8927a5fbb0a810c4fd826db8e0167d535816e4b2d6d4d199b96ba1c37
-TAG: 18a564e0fd21d17bd5530d73dec0bae15222bb76a8903d15
-TAG_LEN: 20
-
-# DIGEST: d35ac8b9ece76d43f1497ac8681c5077398bf2ac
-KEY: 63b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef16410
-NONCE: 1b89b476f72b27f06f520c9267cf7140
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3b
-AD: e585a29a2af12feef71e10
-CT: b1def7ba0c05f8acf42e15cb052fafd63c2febcf277cc6aae7065d606b502852696a6081d096de91a8673e3a96ebcc2b0120ad68a2b1a85457dfd38e187ae42e8279c3e2b57b1f7d69e11a51d1b8d7165c6e74d84fc1df402ae551134939e5a17e28d5f415a491c12b3c70d473c370542d7794103d7d639d9dcdcd5f67ff7a2420d2d38a433ec767efd5e5d9aa64ce3570e116b50b2514ec29a7afd8a831ce30342c2cc79066eb1373e4d44fe432271dab68bf1fe2a6a1c45a4060943825bbebf790a2298bc9dbe4891320d3325a309041b411a629346b12e3e929bfd1fe5eff9068713e6171a89a2cc54085a2224792ddb9a7ffceb5431d1b8fdb7d7de82c7db78d7f80260333cbae973c7f3ced0752e792546f2e65fbed672ec98717
-TAG: 2308ddb2e01ff8f34d767efcf93b5d989b11b610e5852a480286b0bfab442e52548f4b
-TAG_LEN: 20
-
-# DIGEST: a3b33fa67f5c471a60a63dea915333550bf3af04
-KEY: 99200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f7
-NONCE: 2b27f06f520c9267cf71408a41729bac
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2a
-AD: f12feef71e1063b0b4e6e8
-CT: 046bd6d55b37dc68cd7cffe008316544ff781e42afe4200864178ae7d666ca3f83f25ee4ab1f2847e132d762225b87ea77dc30bde8f3ed156251f9366573cc759bb5bfd129e3c3f799832ba8b489ac3616c3dcbd30ee75459ce15e7885da51ca277ddffe5756b22781cfc00ad7eb1283a4ddbacf5f2921b155b4646335069c03f62cc01d75ee33b40a20f46e2a8e9fb1b3b02bb7d7cc56913cf9159f12e2df6b166d1d2a064807ff296f774216fb4b1a31f3b1da9d9dd6cc76f6d365a6fcf6e7424694b88bfdd8af1237cba450a7ad1bc8bc7ec3335eff5edf0c95f8f0ef051406513c910fee9b51326b4e17cee5446ed7477aa9399c4af75ee25b56154b30f410c47db1cf9ffe8740e52501d4295bd3abbf75b88691d50488b07f38abc8a6bab104
-TAG: a701c8a1a2a0182421059347df07b84f8055901ed051dddf5737bf24143e
-TAG_LEN: 20
-
-# DIGEST: fc45f684acf19a1dcbf767f671396e793430d7fc
-KEY: 3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f52
-NONCE: 0c9267cf71408a41729bacb5877e72cd
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e
-AD: 1063b0b4e6e899200304bd
-CT: 818d8cfb3cadad479e68b2ff3f8fc79e098ac47e2bd838fe955af0a66afe07b216f744f3d1192bbaded6127387742f8d45bcf43341a3f2bc9be47fd9ec413ab0e2afae4b34ddbdf97988a3a3af1b578095502f79189dde995b234daf811380fb12c60b0910ae663c195fb5a834e7575487f1c4453ae20c97b622bceb018623a107a26a9663a62b0ef0ea12e3d2cf37b4ef2770c977c06a17bd6fac29483f6c56d2c4b755e38fbace64b1ee521ca994b86d2b1f9610b7c46d1b65a490b56f4518de3fbc9337699a5c2c91818b8df531149f6fbc0860d5ab93abc5df22465aaf6207f28eae0792ceac9ceea56672262960bc6d821d0ca831ac1ce81dc1771f1ee8577fb3ed0b72a93b80e62fd3ce2afaf7668a0c4c08c99014fb254381e02979d69b2ef411f67d3d
-TAG: a7489dd0cc26b2ddcfaa1f7ceac677cbb88bf0839b9838047c
-TAG_LEN: 20
-
-# DIGEST: bea3f11679bacd98ddd996236dd603d319aafc6a
-KEY: 7d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71
-NONCE: 408a41729bacb5877e72cdfcfa76aed0
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6
-AD: e899200304bd3508132a02
-CT: 35ad27b44bee4b205fb9224755d1d79d5798db15916050287c9ec894e706331a290d0e32c08b5f417e1cfa07a1d176a7830e5aaf3cdedec5ddf4143cffb045f55cf7b901ce3de905ecb0a4541db8161082cc12b0872d3818e793a379fdb9131b3d521ca7d787360f830ce7dba5f79cd204dfff53ace458842153c3b0489ff04fb09b9f2a4ced538c64caaaa09713000ab48f0ca6b283d5a59a7d1845ef228261ac41d1a71a134d28bfdbb92b6cfa18258702e33f9be85f2848fe0f052ea8133468b70aa86de44adb5f31d2415bf852dde608f1e6673334416e8b17b3010dd53d95f9a5322e025a9b259f9cae0158f8864d98a8297e2a3140ea4ec962ae8c904f7a5108eea7583f13d977008d685aca7e8fa7cbe80645aa1a016e557a6234c5c96171c017b8f4ef1a2b9a66bc
-TAG: e7cb365011df84ce4c1bb1ad99a47ddfc2dced82907168cfcb15347115231c288f5de339
-TAG_LEN: 20
-
-# DIGEST: b0ccc9b5ae13a7f8a01100af61a34be7ef6ccf6d
-KEY: b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729b
-NONCE: acb5877e72cdfcfa76aed06707a07c3d
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304
-AD: bd3508132a027d1ff4c047
-CT: f454347ba4e2b6254e66b97f8ac519c2e263ff43c65869553ba693bbb54a96c042228493f97292e1f5798e73c86ad8f4c521e0c4f199902e534388c9d5d2d2c54fd992a3e073381e0cb2fad75331979c76690c8d8c1bf3e966f7bb8f5dccdbede2f628618eba828c8336e2914931613e12f7ca9e0b674390bc6128f9e18f3491f98a073013d1fd78dcb4f0ae4eabc054f8935563353c4b6bb44c3bb99f76568acac0df85200987c67441d75b48312e98847301b3db282058a31f74197cbd4d1ffa6eb69bf67e9cce44512d35b9f141231424dae335797bbb16c16571fb607908324ab86d8034341e341f3a4646a2636ab5326bbf1a63445007fe8fe4d5279396c1a36d04bf97bdaa5978d9c4e598cebcd80a1a2f0045f1d0ae626f92d09f999bdcdbd889de2e4cdee882b757911fbc8421
-TAG: 312c1d345e3526356c9cf7e7bdc63b30d2adc79c33b0cc32143d2894b48fed
-TAG_LEN: 20
-
-# DIGEST: e2b953c833076a52442a7afab46150176c47b730
-KEY: 4706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72
-NONCE: cdfcfa76aed06707a07c3dab699719fe
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a
-AD: 027d1ff4c047b3ef4f57a7
-CT: d8a6fd43a147414840554083c11d5fbe0b12d2298af893294f4273df0492f5d8bcefe2c811587e124d26f8cd7c737b2f848b2b25945d4f031db45794ee24b81103d172c0d0e457059eb972371f275a0c03737ad02b4f8526b32a39c460931f05914ab3c2a16a48405bc662693cd08e2d79cf722b9d57b998f318f25dc267395c195d83b32c87c8812b65b6db999d64560d8967cd0ba99445b1601aa03b290cb6803a8e6b0196bc9ba6dca507fad6e4041666735747f08f0bd56f1f5097193f373ec062750dd462d1d6e987999f7d0f06fc1d0144f98fd163cd0b0aa64f2edf9e29afb05ea1f1d055f740e162cb14466e01ba68ba9fc942a60128e2b6d58ca12ec2a905747c3035f7579a1eb8abeaff88413b52624f6372fd5f2664ba69e71b100178b88e365ebd0489c48bda8a4a490df66bb167de1f
-TAG: e77e14318d46c2bc8d71ede61ce63bf623a1f2822d78b8a7e70e
-TAG_LEN: 20
-
-# DIGEST: 8e84935ed1bb79dd38ae38924952e1105101533b
-KEY: 1c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76ae
-NONCE: d06707a07c3dab699719fe882eee2fee
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c0
-AD: 47b3ef4f57a74706de4b38
-CT: c2c1f17e309846fffa55e6fe4137029fb8506ccd4b238523812d61096c4a533737c22ef0f940f720d26563d2c7c90a48c3b4ecbcbbd9a641242a68b466f4eae6f663ddf27555b0b492419847bf333f815b7467ac4ee70ab683d37c1f966ee8d40d34c181ed1298d2084b634d4eb49466b21f39909317cda6a900925b32641184c4165cd3b6596806b6482c02353802e5ca12c72f111b0e0f7edb9c373124b5640e06d3163d4516a233db3183f67afeb3cd33db49998eea63648c69f441357f092b5dd5e5c3b69254640ae313b71e741c00cb9bc4944b1bae449fef8a32c08ecd316723a286d25598280a1ae189f4a321cf443135cab43f4721663848ac1373208a28d3640e16e792bad274b2d98b182455e56d27211e97b94e6ecd95bb33cdf8c42f04b5c4536ee4838c1610e90f312bb5b0a1de5825a261b5d089
-TAG: 67070bda84ec98b059629d10d0d0849495d1a8e0a5
-TAG_LEN: 20
-
-# DIGEST: 99ec6b669dbedbe99548117f37189e669fc5d8a2
-KEY: 101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c
-NONCE: 3dab699719fe882eee2fee55ed8b1153
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57
-AD: a74706de4b381c692ef164
-CT: 352e3b5b2a8a9552e0159017fd9ff4c169869ff3d1d900711d29889c4f1365b1e3d15c7162be4a1dcaa6b7209b9ea600916345cab1f2c1c79200826f180e1f7c92af192b92168c4f73ebf2a671577c5b995a26eb24b125ee24a47f78c94b48f69883b1ee5dd5c9e53835640066ecb26c631fbd18c41a67e59ede2d824e7d7f6d1ddcb14fcccc85a4faa5d46f91d03d543ff87989e8d1b3b2fd87415edc709abdaa7baa5e2a78c394302a630ee14e908fa8dddfe0c3b1830ddd036ad5e65e4d3490321dd450c01bb566427240882b07c0691f2f37c346845da3a8b50e291d5bf9b5572e72b7a031ef71f744acd6a3ed9ea32ada739184b6268954af35c6c293e64c83573e95b166e76ba981ee6f1723fe3865e0f17b28d72a869cc0cdf9c21ff97a11ccb6fb08baa5093f7acb55cd5c534389e1564b187a6bfb9cbf98044d718a
-TAG: 99b9c8254967607e0bdbdd2cee977c194e315505fd3dbf288be63c3fc871917a
-TAG_LEN: 20
-
-# DIGEST: b55f018cb06f74f0a9f76e65a23c1744ce7535e0
-KEY: f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719
-NONCE: fe882eee2fee55ed8b11534c870dc695
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b
-AD: 381c692ef164101b89b476
-CT: a95aae1040d61a7b44194c20233270ac94156ad0d735c30356beba1adcfa9abe3bb55cdd41a4f1a27446afd5221a3abca45d7b867a999d9cc1d89f19cc32907083e72c43f5e39f6b5d5682923914f4cae6fa0ecbc02c9d7c289c39a9a159b714c9e0eccc143b13fc5632ff079d4216b331617d2dc62ce9fa5da2b1c59f413d211022c79ac5550b0c7ae525e0af3d364138353f4ff208215393f5667359b2f97b5852959c6e4ffae26fdb93c1b15720e53206f2721c58c8a7241806c80163796ba087a073eaaf1cd3f433fa24518d0989607339c2d0df01ce1fba94f755ca5c43243f16035506bc7e69b21eb8d2970f35dd282fdda64736c92229254aa6b74e3dd929ae1cf9607950407b01c5fa0e9990488f5d07fbaef1062f51acfd745aa3bf27cfbba630aaf19d02aba5a55b95a6949ddb8669ae8b0f13453a905a43fb6f1fa97fe1c514
-TAG: 820beea65a549f03ea186313e6d0eae129bbdd8cd40f3ec88f3f63
-TAG_LEN: 20
-
-# DIGEST: ac3202e483c67fbcdd751950e1497feb3ebacf52
-KEY: 520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2f
-NONCE: ee55ed8b11534c870dc695b814bdf1a8
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef1
-AD: 64101b89b476f72b27f06f
-CT: 458997cfcd9de1ef0222884a21e1af8773fc492139b15eeb31c48e5c32c918036618f4969d34c063cf759906a92956fa066d0045e8acb813081a55cef1fecb34178063b4cf6489b35374db4cb422b2f88b28fdba361550f087bf686ae0f7ebf4e5ac6ab0e4351d7682dbf825a79bc9a8ece0f5679517d33593d1fb9d1927e6f944a02cd2561da59f01634f4328423c7a4e1d1d57debbfca349e5fa1fd4735a87cfa8737ca4cc447d3249d6e1ab998f4efd62bb50bc079399ba250eb24cc43cbf3bdb30e1c5a4d6b3f679b742f39f123e75646c4a42dddc3714042fe0651e1efb0078a636d712bfe51208f8ed2ad86759726942a9026e5e158c8f42333601e9fd54457183a7253543f6372b57fef6dc9db5a655f37b265fbfad0693c0504038e36883d61e83ef9faff4a795fb21787949793ae00774cd86b8df51fc5492efd7800c223374e59adb59bbb6
-TAG: 9ad18f00aa5cfdd05b3586477d882fab3bcf49a0d900
-TAG_LEN: 20
-
-# DIGEST: db82ae5d79573da2bd7215485a92063861879c3c
-KEY: 71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed8b11
-NONCE: 534c870dc695b814bdf1a87bb1052c67
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b4
-AD: 76f72b27f06f520c9267cf
-CT: 8ee287bb4179d54a23ac238a457da5317d6f73129f16a288d5d08ce503395ec9354a9babe85135aac28e00fa66e16867a09e9c6c2366d73d74b80544b85ae48ade77800fc82a3ea14a7d645f0cfb19ce2281d2de096ddeb822d838123806908c161b0372771d9281f4471fca2f2fe6d4d33bd6de70b21bb66728f15948a34c756664019369efadeae8d84a777a30d79aefe978f6803c56ec8a2138bc294787a1083cb5aa0835585acd7239a85dc8b556fa78f64f45973e97061591f756069ed4314a2275e3a540417d87a2709b0d22a02c2d6f7a34976290bb83cfb64a3e90503879fc26fca103cf64f925a9c87848c736b349145d86351855216440eea3f6454e4ba4d7316662b04b4ddd0dd66bc99598f8824d062ba29916799859e38fe17fce17c83b83a7b4e90e6b112197724005a70f5440fdbcb6a2b6fe3bcd660dd7078bbbe6b1d00ac7782edbe62ae0ef62
-TAG: 94689a1c2d12a0367c1961cd21cfdfda24a5dbec4eaa3d68bebe6b12bcaefb1ea1
-TAG_LEN: 20
-
-# DIGEST: 902d703861f9872e7b6482f854709a214aa98731
-KEY: 9bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed8b11534c870dc6
-NONCE: 95b814bdf1a87bb1052c6755a7a116bf
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f0
-AD: 6f520c9267cf71408a4172
-CT: be32e45e2b86ca112fdd67aece84c9a4ffe6f773b616aab51eaf3d5d9bee1622f377630d65b496169d5c724e303fcf652fb8275a6b6857768a067a77710ecefdf85666ce3c35d7f0b7394035f220e1d944e823bd2c43c722cd7a9839efcaf23142320d4fee27e0d5e4499e249b3b662f7cb24b48686d533f55707c7f09e70eec383bf1c022bbed0379d0892342914230ac0194fb067959abcb1b7eaacc4783ec10d9ff1ef334ffcebb468008e8f0fac1fe342ef71718731577ae555bf0786d2cbfd2a3c8d7043887a720e514373d248452ad24eb639b35564d5e0638ea4d6a560a4e6073a45d02c0f42087e430cc52d0536587696f694d05a73b8f61056fea619234673ebee12c82eba2a51e0ed0006cc4884a20da9cb4db5bd262513250f48ae4f86bba13fd659db46b38d155532f0c0c54e7a6768c169b9bb420ae0ff504ab632f25759896fe57e32775b65583d6c32941a529
-TAG: 4ff47a3c8ffc5ba8a5beed898ccb282d69807358004d87728afbd3aa
-TAG_LEN: 20
-
-# DIGEST: 4becd26b9b5c7bf831523f44cb72c8e50ff8033e
-KEY: 72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed8b11534c870dc695b814bdf1
-NONCE: a87bb1052c6755a7a116bfc9095da49d
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267
-AD: cf71408a41729bacb5877e
-CT: 596949b6d943048a68d9c5e6f6b6b91836c497c3c160337f4b1a3ed44d0db20d00774ee636262481fd61e81d5717feec56bd1b2ab077d205b4c8ac78bf225da9cdf72bc1665330a87a31774e282b676cb1dfb857f32e56806c1d6049594136de222041d5316df307bee6031ee1de0251dbcce0c3fc6f121c0f5cd84579b65055ba71a429acca3938dd0df53647a4a4dcb4321a86bd8f96cca38814937d6262324e1cb76286858cf3c62e9272e1b3473eb7c75a60859142ffe27daf062d0e05b643657a3cc30a0df09c101079547005e22e8cf833e3f0a7c4609e3c80924a2e1e4f61c329b9baf20fcdd8662b6dbd02a4941c3e68247bd00aad3ec3c7d925cce788a05b2518e248d68337e7f9b1c8335fd8f7d0c0ec4454709495fdcf191086d83b71707f97bbb3dcb88a0dc572930ff27c0cd9b93ac1a962e54e726af68a2f1ff4e15cebb06a28c61c5492a08b3bb73f0f7f747968dc6653ac
-TAG: e1085cf56fd0172170fe14b89e755f8ae4dd3a89d561ff
-TAG_LEN: 20
-
-# DIGEST: bcf4785d0e3b34c55cb2505b559fdbd525deaac6
-KEY: aed06707a07c3dab699719fe882eee2fee55ed8b11534c870dc695b814bdf1a87bb1052c
-NONCE: 6755a7a116bfc9095da49db3d71f4b97
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41
-AD: 729bacb5877e72cdfcfa76
-CT: 4cef7dd855fcf77232ddf499ce5ea322ab0fc48715fb2dece1c954fafe396791c8dcf4ced2f3ae865f6e062d193509b264858dea3d05a13b62e9c958971040bab31fca1b748e05fca1967a5aaeb0efaa7cb2367149e0c5493d710f2862eaf2030a7ebc2566ed4995879cf27a58beada2a97255f1dc09e2bc102bfc47fca7503f39d04311ee546a01d3854574f389b013425ba1c2142b9a8654fd6bb28be2c4a5f6a923b23867b4c9e00463db4a1c774c101e08c911501853791ed3604eefb2057df9e6a522ad108677ba0929132f86357a91873d46d0d78d1e7278e9fe9e29e6c988b07cfef195953435f5a2004a05f0ada6f75cf6a63297b66a0c1cb574d7c87e99bae61a614e4ed5c50271d9f1e8d3c85393a4d219fdb3bbeb43bddca914eba85e041bce2b7a4b211c628aee1161e93fd13e1320c2e444b15bd7027bb40269e15712e1908f03f52658b85786b3378c4d3bacab39d956576fb8940481b1
-TAG: 0fff63bea1b1f0cdaf656dd5588b81a4019ca07ecc27430d947686fe19fa9b5d3272
-TAG_LEN: 20
-
-# DIGEST: 13bff121568d7c32b2546132cb4ad490cea9303d
-KEY: 7c3dab699719fe882eee2fee55ed8b11534c870dc695b814bdf1a87bb1052c6755a7a116
-NONCE: bfc9095da49db3d71f4b975c5d503f47
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb587
-AD: 7e72cdfcfa76aed06707a0
-CT: 1a8d2a54eb61c49085190bfe8dd6c6423c6a6c2b147343f07746cf45c004e7ccd780cf0bf41d7f070590d1b649be4df0e9fe7df3919727f78966bcb5991a92016a9090c7976ea55a0ba039b416e61067ea414d87161ad03592ddee51d40d2bfcf53873c4c92d869af7614ae780814aa4aa12a2967cb8bacbe5d40542e4e8c619435c0daeb3b01c55a3eef62c633df798e2e9d7ae350a9a1e5aed3ddc64039f968cf9d918ec57cebd4a69b195c8bb8082fc8af05e5b577e886b7b258fdd7b60503742eec8f861ca6d8f7cfc5262afb97aed6205765e9d236a790680183fa10d302a92a2ccbf8ca3153882c829c1f70a449748a6e08f302acf9f8cbcafbc2d04fdbcb57b581e04d8c15120aff497aab1e8d3b4b2f30d9156a213c08692c1dc2273e6a9c835a962311e9a8855820600688d10e00861abbd63a43b1a5476d9f00c304e74cb254291c51a8d8967656efcba8b54e53453fff0dcb44fb53317611d2ac8bf15a0
-TAG: 0315ed24d43f8610403e7df1268a84c4c1b604e54b410323097fa2dfe7
-TAG_LEN: 20
-
-# DIGEST: e0ec91f0baa3c5fd0c50f135517909e26c204af3
-KEY: 19fe882eee2fee55ed8b11534c870dc695b814bdf1a87bb1052c6755a7a116bfc9095da4
-NONCE: 9db3d71f4b975c5d503f478b22dc8253
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa
-AD: 76aed06707a07c3dab6997
-CT: f76b9306112d329d3300d7961db8e83a93de9a1de25a25505b428e14479e142012e4d140bd327cebc7eb5f45681d863beeee2161e0eda1d55f20429fcfeb104010d3db857a7edd43453f0889d8a54f97eb406cf4d0d57e8e86562c55ed0ed4ca292f77ad1362ac5e154b768926aae31f9e2b7f67cb4d6663fc44aa9249604d01a767b7bd32d2124644b7da4c08a5dfbb17ea57c0b7b757cd2719030371112da299f73159f436e39bd3e18319724ea2b89cb82ac19be902d1df0b0555d5c4a375c2df99585defa395d860be8ce4693220da4bac58584e35f4f46de3de7d8538f11c20f04ccdc9daf42abe19f6a4347308ea00bb764e9f44fffb3bf7f7cb0b8d790301dd47c3d823346a01c68287ca3a4641290c51749ea2d56d87fb6abb533283e7f67684069085c16a9be4b38f7fad01c5f8ecfbd4a2ed75f79f86868bdeb7bd4f964c19984c3d4db3f54c25906ef9f11ca9c2852a4c1279d96e07880be6aa2e1bb5df14a2d8812a
-TAG: acf9ff7129a4ef26ea7f17cc78c25903cca527d06af831a6
-TAG_LEN: 20
-
-# DIGEST: ee7d6f651db434a281b5cc57c2c418db731c65df
-KEY: 2fee55ed8b11534c870dc695b814bdf1a87bb1052c6755a7a116bfc9095da49db3d71f4b
-NONCE: 975c5d503f478b22dc8253bee6fd1b17
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707
-AD: a07c3dab699719fe882eee
-CT: 76f61331693fb10e859759bfcf1d105cf9609cb381e016502aaadd2db381a27ae8065064ac38f329b79861d6968ee1e1ccc8bff41bd8c38e82c91e813caaf1db5d8cd420d67e58db6a8b6b8b65566f8dd374490d28f0d33ea88bdeaa1fcddb4ce77fd96c72e5e646c5e5291db6a376a87b0f54c5e39b38f26f367807396ea8b11a6fac2546bf5d574a59b48c61b7749778cdeb52acdd54baf61f19802ef03a322501031c40930e9160df61a6946f6782dbe6b917c2138194a111e0501b775db1a66e5c1a5df5c42f58058b9868ec525f8f45403ba27f1f8a8ae9728b2ea140a00c822cf434e41b3105fdd6af4c2162376bda1d3bd5938ff9b486a11ae53c243cd4e97c0f632ea07099c1a23bea9b4571294ab518250a3570c1ca7fa01e11e1e245b15e8c266f9f03142d0d16cfac8dfa4888368082c6ec86e652c8f1afcd32dcc95b3e2cdbca6f19887b124a3c205fee32595bfc933dae224e2df5652c772ab6941a470386e14224b565639abd
-TAG: 8a71e85da5d5e89fc0f7b0aa6f1a6761354c3d7be6e00f6db3c79b69d91cf8bbb13c5f
-TAG_LEN: 20
-
-# DIGEST: 810e1f01bfcf6bc13ebae7861454ac133b2d6cd2
-KEY: 11534c870dc695b814bdf1a87bb1052c6755a7a116bfc9095da49db3d71f4b975c5d503f
-NONCE: 478b22dc8253bee6fd1b174c307f01be
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab69
-AD: 9719fe882eee2fee55ed8b
-CT: c76fd203ffada1af37acc360b1d26ab9364882831ee2f6ee68332165d863704db18ef1d5921b8134ba1a9a16d4da0d47670b2f5fde4d1194d8b8a62ba57f7e628cb144d605b7ad561ec0c66e3e7cb8d782723758e0dc2afc57c399d440433eb911b6dc3873adda54e62719c0e345f083e88797321232960c2c406776b371a64bfa82c96a49f07223c3cc8470aab3a7cdabf43c06349f0cac94a61e2503280d869b92ce7f88e281caf490e9edcbfffe7a7528669d5ded607e7b51681b06003ff061bacec4bff3a4c43ac3855142de282584e76eee9d2af0a543c7783fef1af169540e712b5d373823f1c31d1985f3edd2685edbae95b9b095d82ce7d77a79f406e5b44e7784c2d647feba197a9cc44271938ccb5a11e962d188d80d1aed890499f569d14772010ed7078518a196fbf2110bc5bd0397ddaeac981a00865ae4255f60b4660b67a828d855344e5dd0db5df6587cd8f8a60fc652c4626a9bac41bf28f6095ec6953e7d2873ca3ff14c068d259585
-TAG: 80513d3a7f34ec7d3ff7d085062ebfd5b6829f69086235eea68eb2195e08
-TAG_LEN: 20
-
-# DIGEST: 881551d50a849b7e81f0cc0d722f631e32a4c97f
-KEY: c695b814bdf1a87bb1052c6755a7a116bfc9095da49db3d71f4b975c5d503f478b22dc82
-NONCE: 53bee6fd1b174c307f01be95abaa9bee
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882e
-AD: ee2fee55ed8b11534c870d
-CT: c5a11b6948d9ac5fb184b7df3ff5260b03d6e6c1cf5830a1bc378de13e91f8bab09c96aefa60948ee51035bd24f3dcc0982a385372b2d30aed79b321717cf50973971483ccdf8121b5117c8930043dd229af9fe9b84fe817cbaeb1fc306fffc61e7e5965ea8367e42f91ebdb969b74300b1329e0b41bd94f6d5c53acfa55d088daeed3777c42d01ec2e53955c428a15e48856d6fa774788b1dd591d45397f89b6718885e02b4635f48078f823d2ce914e122bffc007d894f3a50aa399aef33b8255e4b1f84ea591f1898489516ad6a3f4a62275578fd9aba2203ae079f60743961426c5245ae672d01bf294ccb5ad36da0a0462db05a88aaf16670d03179a6ccf06b5e872d743e57c924d2a2bac38abe0ad23b44ef0a15839c095ab7467a5d10efb16bd183b5766bc51eb9c7ca8ca1e2bb94a1b54f8e80b37b7393bb207d7fd79c01b09943145dc5d603247ea08866f3b8e419e9f04e55f610e0c4491a281af0f15e11a863ee747aec65f65da5ee7b31fdfa8a120ee4d2
-TAG: 9988e65757069fa6ca1e062a9163d4fcebea3e7220258682f8
-TAG_LEN: 20
-
-# DIGEST: d525f72dbdbf54db80ddeb9c2a84aca41451353e
-KEY: f1a87bb1052c6755a7a116bfc9095da49db3d71f4b975c5d503f478b22dc8253bee6fd1b
-NONCE: 174c307f01be95abaa9bee5857772305
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed
-AD: 8b11534c870dc695b814bd
-CT: cc02b0c77ad10d25b9c16911516db68583194f48650131ccf55d29c35ec9d2de2b3d3ea2ee9937b6a87212779560b4ad9cd49b84304128329587e5d3abb71402d5eb0411f2704816409b2ca24f9fb3f2a4cb03e9e74ba1345a60bf6577159c8fe82b7747621311eaba3e43bfbc688edb7de11603cfd13ace7ddb6974e3dbd2b20e86e4e35e006ff87c06ea69a6e6b8cf2e02a7ba0210e4d10a474a06ad9d75559c0b9966811f94d5c209eb74e185de3bd1cf4d675de9abe7b2f11b907fbab8c128fd1fbeec0697ce9d2ad66e600068037a6a89ffa19b3c66d146655acf93028693a3bf0c86fb704927a9b10ced07f0b6cbac917f873a2e97cabc8b6e1b428d4ea4453a42d582e42e5586b7ced5c187085b1113ae5aa699b5951c3aff18bc1fa6d4c18e075c53ce657af855c4522a0c3d866bb7b0592ee3e04676b433b5f1097bc1cfd119c3b9f5af2fb69ce8200a8188dd4ef0d880258bb60ff2e9a276e7f1fb89372d835c32cb577fad96731b0891d9a23bfc4fa1bde25e187dc96c
-TAG: 5007ee0a1a26c37857e867ec5c207581fdc1cb334fe2cc8adb94874c2566875c90d87ed9
-TAG_LEN: 20
-
-# DIGEST: b25882426b4730205533cfccc0da1de1f6f2c459
-KEY: 2c6755a7a116bfc9095da49db3d71f4b975c5d503f478b22dc8253bee6fd1b174c307f01
-NONCE: be95abaa9bee5857772305daa4b550d7
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed8b11534c87
-AD: 0dc695b814bdf1a87bb105
-CT: 152a8f32525deb44c4fac83d46a32177d6f70edb8b7f5469ed5af0aada4b68d0c95c6e86293e40c25fbdf15570aeb42f3d1f055fd855b3115dabaaa765c5844e9578d8ee9f63c8cb21b181b556b8b687ef856e0cf059adf1d51064b7390eb95b32e2ea25308b4a04921d55240f64a5767fabbe3207dabd28b5f442597e75f3c6a1c6a26f0b44c316b0834f47f8445abf978509fdbf7cc65bcacd655c4eae698e6cc605a811c56a4ce31f38b2d0114bbf32eb591ad08e9f64434fd535bc9b73470879eba47eae13487edf13423b898e00efde2ff3f93576eb6f8e6d9131df10998ceae836310d4000a5905ede4db0c24b15c83d3476944f19eb7a4e6a493583f13486e5cc1604e01c9f6b47d728cb5dcd40d581db1ccc263ceb23375402395898dc26eb6947600a006294e28bcd1a70a2d89c1d1fc5ca5e6e28c16bc26a1fed1d8ec85b0daf7d4a2574c8d6bdcdc9fc4cfc37b79281e1470eae42846b223e303e004afa0d0f811c81f1da124c92c3d123284fd2199b645b6c7a86742d3ed2d5de90
-TAG: 0590d1b96aa2cc86a542ec54cc7524500c7997bf02fd492b08c0262e2e95b0
-TAG_LEN: 20
-
-# DIGEST: 939442486c730c2cbd8df213d81310e50534f06c
-KEY: 16bfc9095da49db3d71f4b975c5d503f478b22dc8253bee6fd1b174c307f01be95abaa9b
-NONCE: ee5857772305daa4b550d75f05d80898
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed8b11534c870dc695b814
-AD: bdf1a87bb1052c6755a7a1
-CT: 4d05fe0669ff88fb0fb4c053661c7fcbb79942de55c9c83648990903dc2af904086a05e683f71263d3f471a5c5f60cfaad78f79acd972c85f25ecf41f033b7fd8ca5fb13f011ef27bcb27bc10ed9f0ca233f533eae78e95f7dee6dafb592c66209bc946b745ff843544182b110540cc33615814a779b92ef8e69394d046d773086a29b3c7d70eb18d580915aff1490681e78efea704f81e2410617d2d92d2c62dfd78d8626b67b1800695bcb979bd6dac36bd4ad12073eeb0a4bce6026d02f92862392e3ef81653b6b28efca81754e99112e66f12593766e9153864fc7d6ffb46c0c95744d3a96ec069c27760ab353db33492f195d49147b6b166f09e7b0799ae329b30b60318ea4adb91fb338fc82bffaf47674b5d6e0847b317290b6ee46b43ffd5548c2c2c36a04971d6490019ec83f174ca095d5a983ddd5877927e5d6cfa62992327afe6e44e072a18a122de78569170e20d36b63f17049cdd01da3fcc50e4915e6b1aafbdeb0e5da30368552ce66a0bdd318deb534eaebb441111579c273338cfd9f55
-TAG: e0479da82b12a047d37ec97cab3d5f09a0dfd19632841cf1eac3
-TAG_LEN: 20
-
-# DIGEST: a7b522c0de411517839342925e8acf703ea12e8c
-KEY: a49db3d71f4b975c5d503f478b22dc8253bee6fd1b174c307f01be95abaa9bee58577723
-NONCE: 05daa4b550d75f05d8089850fea37112
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed8b11534c870dc695b814bdf1a87bb1
-AD: 052c6755a7a116bfc9095d
-CT: e0015fea482acfd931875e6af31a81f2dc31103849db0354c7775ddbff6dd3baeab029bd6863b5a3e0bb4b3c5109bdc1d289df63a2b6a577e3c7af1000a16faa2a4acda887f7563ef227a214ec4343840058f94833f9ccda64ebf7e14358bdcf1224aa7e79153d4c128c13e23b5c41e76047e069070e522d62367a3dffe2418e1d2ea71f84f1c032568a8ba19040b1e06d0302fbe1b95298f7f16b75211f4c45d0015e049677874681b309f9115b33812e57ee411c43f8bdff6455368985b2c3b455c762761828e0a952cb2f51500317f95968eb275f52f66c80fcd1d454e2bd2b7c51bfb0e84cd5f8f1d2ee848d6cef1c2b382f73aea027a71dbfae5711a6a6b60d67747115bf138c7e88bbd5eeed3720ae5d9a3cd03a18ac7ad05ba0aa850814060964a6f324181c26257522e7e9db8848f4a26c13eac3f71132d82620d4d7bdd7a6b13edaff628a41a05de3a24ecede59960223e1a296bf1d22e268632f4e1cc4044a7548531efc9c8dd7488fcdafdc3ff6c0d7f664f537471695875f9da4f90a642d0134bb4659c79f
-TAG: 9703ebaf5b98044e677ba5ce1e5155cafb39a4ad6a
-TAG_LEN: 20
-
-# DIGEST: f61096694be30b85b6571dfc8b5bfc4d364bd225
-KEY: 4b975c5d503f478b22dc8253bee6fd1b174c307f01be95abaa9bee5857772305daa4b550
-NONCE: d75f05d8089850fea3711265bf782610
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed8b11534c870dc695b814bdf1a87bb1052c6755a7
-AD: a116bfc9095da49db3d71f
-CT: ce8e2a194f41ff1b79391f55bd476fa95060f706df76ef47dabf84b2c8c5c2390e2b6e95d299cfc316f0ba7df1ed7dda7ebcff09fb1928a341361132200bfdc5ff36bf6260980569edfacbed09160c009405b412373e8102709e0107cf4292efc32c6d7991df26bf862e36bac504341916b6b2378bb82500e0f1a323d6e668acef8cd24b609c66225d4745afd2ae547793206d0e76cddcb9dbb22854508d7e16a7419a63a1d6fe6c2eb353dc7802562b83adede2fcfb02ffb63080d4113a0f011659a1c243c3ae834e726f2d4ee202e82d174cd2df26c35e157ff3cefbdcedf98dc438ea8add64cb88cb0ded1c8873673947e5698cfce17c2c20f8570241a855b7ffd0800626e4fa17ef59708b7968676076b42e4816a276dd0a0cf7b7eb0624aa4fa8c2a05e11742bd1a29cb3a4cf3a319f8c66874d2fcc7018bb32fc8e51ef20e410197c3a0173e22bee6307b732be8d610c1ea994895c20f45181b40de55c04bc70e971821d5c852802fec021db47d2d7b8a3f91f8b21b2abb3b7e89e6e181cae3baa1bd5077b749316f78fc44c8c
-TAG: 08f6b56fa105e8d5c3d5a52f4e3a66874f74cdc4f9cf304deb02040eeac9e72f
-TAG_LEN: 20
-
-# DIGEST: acd9a5179a0ec782a63bc824188d838776bc1b81
-KEY: 3f478b22dc8253bee6fd1b174c307f01be95abaa9bee5857772305daa4b550d75f05d808
-NONCE: 9850fea3711265bf782610460bfd24ba
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed8b11534c870dc695b814bdf1a87bb1052c6755a7a116bfc909
-AD: 5da49db3d71f4b975c5d50
-CT: 8a610f075d994055451e514414628e2c30d72d5567cfb3d2592ffb1f4a85d553f85563a0352381df79ada451e8d6ffb6939edb73f57919abdbf37da41a3db4bab0406a73c6f61b84581c824d72652c36062130edd4673d0cb22c009fc67dbd9eef0365a67473e2672d522a3753b33ba2ece80974fd9550b667e8c942afd6a22924100b89abf9901053d5568197e9a11c85183f45385c2f3b887d78b04971e091a5d2b20dea01b60e61ef687c708fbeae417c99522e23dcc37ac2a23b785a6bbdfd41937f0e40e5835587c72118ea97f57c539451ba7bafb844b8cf3426ad973d8ddbae7a3eeedc6f5dc77ae6e05a752592e0d2ed0bdd92770952b0c11af898180767ccde0081dcf8ff748c02206ede73dc32bbef560e507962808fe7e6f3c130460d975757b6dfd2449fed5838bf4e3140bdc83688b156c22cb32f1b41aae2e53c66c06b81e85fa17b45763507f3fc9dafe4f0d8b2d71d4b4e645ac5047162988e3bb342142112294155dc646646c4bd9bbcae5238b0d8ab782fd7e4ffb383a4fc48523b8d28258d3b42e5e02ff3120d025e5b9097
-TAG: 8a7c839811873d4b04e948b26a3acc920035433831086563526a6d
-TAG_LEN: 20
-
-# DIGEST: 152118d780c866c5eed3a08d2d9960cdc5acaabf
-KEY: 8253bee6fd1b174c307f01be95abaa9bee5857772305daa4b550d75f05d8089850fea371
-NONCE: 1265bf782610460bfd24ba022e6da12d
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed8b11534c870dc695b814bdf1a87bb1052c6755a7a116bfc9095da49db3d7
-AD: 1f4b975c5d503f478b22dc
-CT: 6ee0912f8730e5e8fe419530addabe3c51e95d2261b032755287969f8834e473226e4e9113c586759fb812908a64c3ee020f4d15010b903b4c5e721cfb208eebb3e58707914f9048b9d89d53dd80d53dad740394a943db83bff6d27980ec681c7b9ffa80bc6464c71c0c807a7c8e445fd94edf77270e79080cd597ea69dc69617b9edf3d088785a47fe0b67188a2a058205a166e3bf8f61246509adc0d1d833f1a96f09970aced95a110946e68cb56ac439a2a850f97be36fbb4857c470f431ee6be051c9eb7148261e52889a789b14ac5d6009d925674ac8f22b46edd8786ba24ef920aa599efddf948a62496dcee2d453697e320610bbb3cfa7e657cab4548b92d0f40c7c927761fd6ab1cd50b9bd941768e7147515dfb3ed5a7e34440a75a6f9119e7bd0cc411ba3181adf38252230b73823daefa3295b71e2e967ecaf7916c1049f3235fc0249ffd7ce42563c910756eaded217d56e188738792f03938901caa6b23a5b1261033fad3e9743ded57121945f2f1086e567de844ff71f88920ff3925bc28055f4e9fb3b6eff0adb7d94c3e45c2842b4cdc6168
-TAG: a6c9db0a3a86abd5bfd20bd9cc96063d04791e407c80
-TAG_LEN: 20
-
-# DIGEST: ca91b15125e07b81debf75ff84e7eed4da5808a0
-KEY: 1b174c307f01be95abaa9bee5857772305daa4b550d75f05d8089850fea3711265bf7826
-NONCE: 10460bfd24ba022e6da12dd4c27f4372
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed8b11534c870dc695b814bdf1a87bb1052c6755a7a116bfc9095da49db3d71f4b975c5d
-AD: 503f478b22dc8253bee6fd
-CT: f39aee42285906c6ac413a75c9c35aa8990cfcc1404672886cf6b2c26013396c95213823f09d2f5ac5ee06b500caa7abc0bf72d1f00ab37a12daee95a9a867e570d6659dce22f8b4bf6e98964349cd96ad2c2adc7261c00732729d4e4fb1b70ca745ed300a8b75622296bd4fe6b2ffe5428b42bb1f5ad709a868a5fa4571a6dc6ad44c3cbf292c961bd18dc23d0aff520a344f3c964bdbd07add2af0bca8355a3f71e4a11779b8f0ee7c9ba514ba10a7663ff30c347f96902f86d77deebf0cc8b384382e509b2114c0fa9931c3c28d737a7f46945cf9609c7cd4143f0c62e5510aa5cbfea578a5e8f6fa2e4235b13ee4cf2c90666ba7225b042ed15b84124d53b14395574960586810e2cb6b03d65817fe6ccfcfdb98b35e94b0fa076783b60296f6bad6ba20e12dc508e1f6ea9e4fc9a50e233650d997ffb17792fd8803c7515955da482e62e18051311fcac5b6915d814ec2182593ef4b7a6f7d4cc3b8b65470a7f16180d54164ab0bbdced684dcc5f7a1f061e755d801364097d052234430062640edfd0a122e20877d551be7a92128c1ece727fdc237d37af2ce223e5d
-TAG: 9ab881694f96395be0c06430ab88f233b90e833d3fceeccb3b8371b62868e99647
-TAG_LEN: 20
-
-# DIGEST: 93d06638fe1e836ecdf5d30db3e4fd0660d9d701
-KEY: 01be95abaa9bee5857772305daa4b550d75f05d8089850fea3711265bf782610460bfd24
-NONCE: ba022e6da12dd4c27f43724809744548
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed8b11534c870dc695b814bdf1a87bb1052c6755a7a116bfc9095da49db3d71f4b975c5d503f478b22
-AD: dc8253bee6fd1b174c307f
-CT: 8693a4385e2082f13e0a89dec1e8df98242e30d84d9b0a1fe5905201846bbf34ba9e04afd3fc9ff4ada361cbae026a0862f7bdbfbca6c895ef0977852fc79821942bfeb89e8a51a46e99726ccd7d2477b683cbd9350fb9ea0378a543b70699df0bd9f1d29262dc6a9a116d8eb62f3fa7237f0e098e713ecea3af72d9daa702cd961de566f2ddf91de0e5a5d1bbfc0fb508b6b81c27190f4f1f05a8554ec96dd63cb2adbb10fb7e6662422130ebbe7fe36cd53bfd9cc7e21d1777c9347c79834f46406e409472fb747d20ad0ea516bdafa838adfa031e0d10415a55da4a46102cb72338922724554c5f5a632ef40827337695295c3bafebc537fa88d1f648d5c459bfa24e4956bab52084f8c0cfed8db6ed3d4dfe8f21268d5aea323d16f10ed304ba909d816ff848c1bf643f0b3926e23a39ee79acea462d7ceb91786536814213be4eb44e85d540af000069ff0c7b533d7f614093ec4b327555e1e3f311fd38138fb47c509341142578dc69b03161f9beed51708f7c7e14314f48a8f10a958179b189d27ecd1c9d80aca2d5c87d68f3b785a070e6922fc7b332bb9574c515d0e940c01a
-TAG: 8ee8037916b472d567f5ab24e993e303144cfb49b62486bcff710dd0
-TAG_LEN: 20
-
-# DIGEST: a12c8aa71387379d0e43afa0321979e018d56547
-KEY: 9bee5857772305daa4b550d75f05d8089850fea3711265bf782610460bfd24ba022e6da1
-NONCE: 2dd4c27f4372480974454879c41de9ac
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed8b11534c870dc695b814bdf1a87bb1052c6755a7a116bfc9095da49db3d71f4b975c5d503f478b22dc8253bee6
-AD: fd1b174c307f01be95abaa
-CT: 0895c823437435ba580b89e28d667821b5bfad60bd76bca45bf922c31cc889f51abdf9b47aea2b4f2c5459f38e8e5e35d0ac624bef8dd3a96a06f3491ae629a05d15df535e1f2f1dbddd22fde0ff631fc298fd4f79a67879f4367f4e5a372df8b881b32d88057357ca1b5fbcbc7efdcef7e143d4e1ca35fda0bc19fc6da65f08fea0a381c4e93d5cc7c7198959cfead892f8a167631326da0905bd348faf7b7df25b621d7b7988a7b062ca6ff4c7ce931a901f2d509aa42e9bce1f20e68024b991520c43ee2d8689ed7e1a4f14f53b05566dcb9487787243f11beb5dda2c78b145b47fd4c13d6589d42c7e504c55d73f1bdbe5fb4a500a57001373fe772c2211dcac1eed0004634ab851f2e58b0234e1aa6d0d50c45695fa8cf24b1b35f2ede35406927e8101395910e865a3c44d81076bb246c15715bf21e3bc8a0f1ba0221755a17d5e4d72aab1a227818a7009fc4d4695a69a28a328c60903595236de7470a7af21bb0748ab7936f29cc5b0198d222c69800e0229e041fad4393bc16f28025403f209e0d266271f232ffdf89808715d51128514ec1936c7c924d58fd7521597fa44126d12b11d4a
-TAG: 54fba9cce3639ceb31a80a5ae5ec4ea7160421c604a532
-TAG_LEN: 20
-
-# DIGEST: 8a524c3ce814e3059b4c7a6ac748783ce1385c68
-KEY: 2305daa4b550d75f05d8089850fea3711265bf782610460bfd24ba022e6da12dd4c27f43
-NONCE: 72480974454879c41de9ac9f98233b5a
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed8b11534c870dc695b814bdf1a87bb1052c6755a7a116bfc9095da49db3d71f4b975c5d503f478b22dc8253bee6fd1b174c30
-AD: 7f01be95abaa9bee585777
-CT: eab2468c2d5343dfcb43ff97e68caf92f032066f92d1f918ab524c3c89deefe814444bb6c24dec9dc20d59a401443905c653bf42ab7a67d041bffbc6940b5fe55afa5e15e748e779f6023b797b2b1cd929277bf6b8a415f93566fde4a773e4828aa0704caf46321d48332da01c7cb8b6b295ea13d9a9855a9c9499b5ba38370b6bfa982e3538302fa4ebfad9cd5324fed77c8e70437818ae275b68fc029d2caabaddce7dc50df388fa986a985e2df6d0450c9a00e16005734c7966fb7bbd7312957da2263fbd88a2016134aa45ece2ac93b47151acb0e38ec653ab23cd6003104c2ad254ec98f64a7a27a0d7c58f35e548ab6a291ee927190e7812c7a71a71d765943fe4fe9cc22a987917a4c35d28e25c8d2e0354f17a0ded0e61dc6609e8ddafc512306e71d0e8bf2cb3a04221b6d1721da96836e8f155ee0c3461a1d58403f8fe7ef13e5babcf9fd9d33c59a1aae25b082fce0f3c5299df0b83714ae9196dd809b750e9832702207fdcefc011f4107cf8424aa29552d3307d0e4c14db84751c086275400b5d3fe6eca4f5499de1290d34894c45187e2dc33086ff93feb97081d300931323297a8f1b93b41d97
-TAG: 3c165d9a8c85f4ab226939b775c48cc1565fd1cd6117c864bc0a9b7ec5369e66cf35
-TAG_LEN: 20
-
-# DIGEST: c31dae836928083019ab6902865d9f14c88fe27b
-KEY: 50d75f05d8089850fea3711265bf782610460bfd24ba022e6da12dd4c27f437248097445
-NONCE: 4879c41de9ac9f98233b5a7379a56179
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed8b11534c870dc695b814bdf1a87bb1052c6755a7a116bfc9095da49db3d71f4b975c5d503f478b22dc8253bee6fd1b174c307f01be95ab
-AD: aa9bee5857772305daa4b5
-CT: b2a0474f96d94bf836f29da058d80da84d60b11126b3a9f8f6975def0fd2b2ea22f1c3ebfe8b9421155c364d38f24ef5e4e4440edd34113008e29179fd6637d6a0b2cb3b6d50a7cc3c4fecf56166b5a4a59eda1fee7ced7541e203fa9e07b2d43e136ffa3ef17eb0a59c9d333f38a4e7da8c5416f537c56cb30ea671674a7af92d966ba6d2d320c04791514815bcb6da500b469527b0eb66e825d81bebae70c376493846c41ae85c94318750a499f30f02e18eb4a722c47e80c08cc7b5f28bd7e9fc7ce71c38feb46aba20539716bd224d26e482b352fa1bc54a987d990b330f55c3eff7364247cc1d4b73dfab96fb8fe21a6f61a7de4bcd27806915bfe89e6708e2c00249bb847cde5056a468f94d6383a0ccab628ab96ef47b5a7b5e645f35af3159318bd913368bf276bd15a6c0981462ab7bbdc39246c98699c8b8369781277a58bc2a322f31077dc71a2feabfd900fb5ff851d07a2dd4b72a26c8e2a1a9787b83c13c4eebf0168828dab4636e7f419b72e7fdf482a9821d7785e18d110a5555aabea1762be06ed15a3ec1a42480bfe53cdf03eb1ec0fa75e5b2aaabe7a63beefcc4d059c4402952c97a8857b89542c84f
-TAG: 525a996312ec2a07812cadb094771cf21fcea2209be5a6a6bdd550ec61
-TAG_LEN: 20
-
-# DIGEST: 4b2db052fc8a09f7a0c26afc66dbcd8ae5c9bf62
-KEY: 089850fea3711265bf782610460bfd24ba022e6da12dd4c27f4372480974454879c41de9
-NONCE: ac9f98233b5a7379a561792c0f311643
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed8b11534c870dc695b814bdf1a87bb1052c6755a7a116bfc9095da49db3d71f4b975c5d503f478b22dc8253bee6fd1b174c307f01be95abaa9bee5857
-AD: 772305daa4b550d75f05d8
-CT: b5791488db7390a80622777e45f78e9154bb13e4da959bbfb824460bbda64f776864b921d07968201bbd570a5fce10d6c10777bd237130821c0df9a0248b604b9f814429a2c435b3154a2f05cb237a271a2f949c9e82f8d110524a48531cfdedf07fcc08c88d3a90c6852c0d91fb4c847dc6c69fdc4ce1c684763892b09159de9ae8b57720da5a949c7e46b5e34739820fac62d472dc50a3ccde3c64fd47d398c07372b0a37ddb026dbd8c27d698716f12aeecb4b1dd3ef3411ee6b71d519caf74cccd225c2d445c469503611efb27e3bf9f27d74fa796a07c8acbb8f6d8d567c51891a0daefa7b7e948d3292ff927825a08769492ed47e2f0f54dc2cde68486019e7ee93cdcc39305dfb388156ca44d1e22a16083168ff74a647424afb0c8ae7e589a68bf372b49ea9aaf0e58690cfbf8d014c3682588a1eac2ca6663138b35c7a76b7c099a2e4ea0ee4965ea3ee375ec279ccdff3d38a342b0130f2c962fe3b0b54185fa7dfcc59a783913557afd00f5f9ed55c3958eb5d1899ae70f3057e05662881f369d9816b2e86c8cc6c40dd6537335728443e2cbbce66ab22e86335c7800b170cef707364a93472c035542489ea8681d3647d2d6
-TAG: dba0df4eabb18212526497bad9f0f8f25ec9c1976f82bfc1
-TAG_LEN: 20
-
-# DIGEST: 881926d37fae9095362fff56efadd9fa3c455ebd
-KEY: 711265bf782610460bfd24ba022e6da12dd4c27f4372480974454879c41de9ac9f98233b
-NONCE: 5a7379a561792c0f3116430e8b6ea058
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed8b11534c870dc695b814bdf1a87bb1052c6755a7a116bfc9095da49db3d71f4b975c5d503f478b22dc8253bee6fd1b174c307f01be95abaa9bee5857772305daa4
-AD: b550d75f05d8089850fea3
-CT: 33e5dbddc7a3d14f78529c8b97fcff71b6d4e93354361f17bf9243c5cb1fe26577d8b2dfb5205f72def5923198e294294a612bc2064380fd2e7367a84afc10b7db41a12d38754205937444a08dc11bbde5565a8e103eb305f85540405966d6f3760096c0b54bce8414dc539c91da221943ce0327516a5e8f4aedc7997a64a7bad0f315dfe9b8472f934c67efd104eacb2c3ed3c1efd8949d66033e297cc655732b781399f215463a8c053ba05b65680166d7d5791b39e4e88c82a982bfd85061bdcfd4b52864a0e9efba5451b5aaa9a1bb3d59f2cf9214c994afdd87c2ae389d095e380bc33d66f802f635595da58e2ce0e1fed44032c940e6c1ead3c1b33d820cd8a754b8592a2f16ccf7751a82c36da56b5e6b5ba588d33068ce3e7f4e9de1fc87612b55c44b61fbcf6507e660e3ae5f56fc3cd751f505a854636cb87067ced759c1136325b58cad2a2558565cc7aa006c9dd88155003d5dc1922177bb61142da62844956fd9d4b60fbac403d5a92b122e8f63ff4ce6fae70fd824322d8607fa59c6b0b2134d8165214d41deba7d28f99e7fb19e75c4358cade4b5d478aaefd957cb8698598857f65c382148add2d90c6cbe34c1f330f611b7e8b265
-TAG: f936b75a9e3c18e6fbf320eb09bbfeb26cc01704e704e1f22c60cd5bc5ef1b4256f89a
-TAG_LEN: 20
-
-# DIGEST: 92d143942e6ef5b44ad7a4b8e71c22f1ecaafffb
-KEY: 2610460bfd24ba022e6da12dd4c27f4372480974454879c41de9ac9f98233b5a7379a561
-NONCE: 792c0f3116430e8b6ea058c4799eea80
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed8b11534c870dc695b814bdf1a87bb1052c6755a7a116bfc9095da49db3d71f4b975c5d503f478b22dc8253bee6fd1b174c307f01be95abaa9bee5857772305daa4b550d75f05
-AD: d8089850fea3711265bf78
-CT: 93314bd06e0f9511f8577aed88d71c6990fdfe4ea3564450cdec06392e1759dd356827fdf82ebe96ecad77f2da1ef961e601d93237ff515e46b00dbe0b0329e17bcd2a386ad9942f678f5f2942b73a39e5a7de74fb6f22911c697babac2b3a29ae9534dcf2a262227066574bf830850d0993baced9a839c80159d7d91724665e06e22268106e9eb4c99ffc7b2529be6ce06308e064e69cb712a473b25e6f84f6ed1fc72075245ed6db6fc64eb5da492fb8fa4b15dd4424dd2858e1d201044dd147b08adb4a76b63c3fe2f4c0ee49dbf0ebb1b7651be3f28edb38418b162fa0f8dddab8557e55e32b63e2e8fd401d3dcf0454ddf995a77980dd131fc48f1299a246680983d4667eb1429e55779da5c8c0e34fcd79024894577d24886a1efecc6ffc1daa6ca1c9ad7c7bb4b707f8cfd767085496145b2f65b6e755359150da8f2d5c751dede44dd061fe40ad76a5dcb509b593779cb6c8536490079394536a25442aa1a12a0d9b75d5cecafb9ebca23eed3489ab975b9442ce706511037271bd022d4bb69d75ad93683764d40b0135c85740348ad6142e5ec18888304375cb25be53d0b86bf2782c8e626b7b20b2cb2907334e95037f298271e6cb3456fc322c384d94
-TAG: 789413ce734326aa07cf608624f01bf72a6f7817b28198605cf6b6378e6d
-TAG_LEN: 20
-
-# DIGEST: 7fcec4927096421498e91df912cfe43b2e971d4a
-KEY: 24ba022e6da12dd4c27f4372480974454879c41de9ac9f98233b5a7379a561792c0f3116
-NONCE: 430e8b6ea058c4799eea80abde04ee1d
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed8b11534c870dc695b814bdf1a87bb1052c6755a7a116bfc9095da49db3d71f4b975c5d503f478b22dc8253bee6fd1b174c307f01be95abaa9bee5857772305daa4b550d75f05d8089850fe
-AD: a3711265bf782610460bfd
-CT: ef33a63fb8fc5b6a4424fa6644ee0c833a6db43d65f67729378d77ab88f73416f6a63c2419bb6ffdd2378fd5280aa0bc6fd34bfaf7687f9697d0038a0e509c5826daea0c2a3dc41352f437cfdbba7012a470f42878fb127794b49476cc5f9d5f1ee34299e155d394947b2e277eb9c22b1eda29a2c538a174b7dcbe55a8af0614bd54e5ecb54d59f6393b30300354f9d1655c49d2ace998a02211e242088115421ae2c89e2fc91f5c3e63a78c24cf3f228e421d8148131efbb83df5350bcb54aa4f543c8789a12c08f2bf1dcbcfc1d4bdf2ae48a657b9ad7deaf4f82adedc92ab630a649da8416d9a1f4e4788fca2f8abd79b8e3119cf5a8157589f8cb59c9b1e0b53af9ffb6ddc69de771ece7a22d2536d3df661fa94a278276a0829cbc08c8ac613b0aae3f1396d4bcae75ba0481015f389313084e0fa7e3c51421f85bfc2335e98810813cc474a3c7954e3f9bf740ad4cb0bd7cb77363fabd3f7f2464058a3bd72c864c9e58b23108d9ef91f633ba7d5dbfd397a9a9034cff23f88b5c014b83641166948bc1769d3ce1fdc196c385867f398c06ed5d1887411fee29079b1e7b4256002ea34003ef00fae7cf24353d72385f5070d0f7306cb4efe1934571f46fa4ed0c1d00d94
-TAG: 6fc6e19a4ffaf8a22622036eb3548c75b2c4616d216e9ed282
-TAG_LEN: 20
-
-# DIGEST: c1c6273ce723df9f2033c7150d466c011bb457da
-KEY: a12dd4c27f4372480974454879c41de9ac9f98233b5a7379a561792c0f3116430e8b6ea0
-NONCE: 58c4799eea80abde04ee1de13e937af8
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed8b11534c870dc695b814bdf1a87bb1052c6755a7a116bfc9095da49db3d71f4b975c5d503f478b22dc8253bee6fd1b174c307f01be95abaa9bee5857772305daa4b550d75f05d8089850fea3711265bf
-AD: 782610460bfd24ba022e6d
-CT: 8308b83db00f58f91f79a25ff76d277e13cac5a76e00c65a8a4b6ba7c2a189ea487f023c456f5d7e456a7a5ba18fe7af240b71a82898b640269c1402866f4fd25cc41ffd9f883b1c81fc4255c3425fddda7367a9a1ac231e8a5f694b41a7d22cf9312d2372dbc6d4e50d26a902fb2764ae1da84acf5f488fd29364b52ab6c5d4945268d5746a2f06406a9fc8eaff98dd509fb421a76b1231b5703f366127352d516f5416634b7905728c45dc3ee68bec892fb58d6cf713f33f7b09e44c7ae4b8954c6c7ac7cb156e57612d5f153b22fe0b6a8e1733e122d48698adee8705d8d3258f266facfda74c6dabedc2a4c31ddc59c08d367d929479c526a6effcaee8576b3d4d9fbc0b008a8c4192d6363b6f0a9b79e21f91d2e65d9817fe193ae62e1c81cb84de7b09203f07e0af073a9324ee4ea580b125a8e380a04ea48051d7cfaaf67145cb93d7a3a2985f723909552b9870f5144b5961f0ce965058ea3e27d9a79a5dcf75027ad15b17a3fa6e18259d134eaacd1d601bb75ab05e50b27c97c81b037e05ef5a1c83a74d08d853d4aecb7c8fb29ce49f1ede3cf5d9e1fc95402601f560b28f55fae01644a68b664f1c1cbcd1851707cdb3b191fab5e0899b75c4d5d3f1511b7d7ed09adc946900
-TAG: dfec7c40918a7fa5043fff860e582301fa6eee459cc5f7e681c7746c9fdbd86a475f3abc
-TAG_LEN: 20
-
-# DIGEST: 11424a64d5ce78fd71b30a8070aea071d873afea
-KEY: 4372480974454879c41de9ac9f98233b5a7379a561792c0f3116430e8b6ea058c4799eea
-NONCE: 80abde04ee1de13e937af8f1a6944f44
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed8b11534c870dc695b814bdf1a87bb1052c6755a7a116bfc9095da49db3d71f4b975c5d503f478b22dc8253bee6fd1b174c307f01be95abaa9bee5857772305daa4b550d75f05d8089850fea3711265bf782610460b
-AD: fd24ba022e6da12dd4c27f
-CT: 9dc9d73836a8b568e40e805a7508f7259ece28a4f4b83f1994ca9078d14b785091226ade8921562912fc16ddaceb1958eb92e6688f5eeae81285508168680e648a42908309be71c92dbd21d23d6e80ad62d6cf3fea415e7f46892e01e4b3eda4bc3e17acb7e65fa1d003ea9b6791f9923411680ae6e1d012c3b383e46ab698f0d572523d8ab87ed28ffc00b5c7a2d1ff6055509c3c2d67c0576289b65e73fb47dfa48b56f9b5b42f934e32123f09072f0e409d2a98e7f78901a02b7e1713c72e125e69dbc15c99b27510a89645871cc07257827e3058168990e4866e16afbf5de7547f3f6f3de7c497616e8212a11440ddf641c8de62e0a96b4220edd22b475a175a73cb7e8d9f66633e23c53e7e78c33fe54dcc9fb20fa6400400fe893cd770f668b6e763db9dd8881f0206a8f2769f1d53224a60c15b65210a12de00d159820e8dac8df1ac34388137508743c18390bd625c848916639f035df39daeb48ff13890ec8dc3f8b0dc64c57ca6e0f6b397e5c7d8aec2b5853ecf3dfeb5468589a92d7c1050fc07d3787e3c367249716c514fa63ebb6788d6875d2167c396109ae7ec6ff4684ee7f7b6f5c2e9688bc23676d3d0e6d11da1aa2c977d7741242381de004c320259a6e7a6cc7ad22cc44bcb27bd
-TAG: c41f70e4bfc77ff9f73b2fa6ca7e5060ecf484c8cfa6d75edf76d37375443b
-TAG_LEN: 20
-
-# DIGEST: 6b7295febce7fba8d79d1e7ab8fdfc452191e2ba
-KEY: 454879c41de9ac9f98233b5a7379a561792c0f3116430e8b6ea058c4799eea80abde04ee
-NONCE: 1de13e937af8f1a6944f44d722271233
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed8b11534c870dc695b814bdf1a87bb1052c6755a7a116bfc9095da49db3d71f4b975c5d503f478b22dc8253bee6fd1b174c307f01be95abaa9bee5857772305daa4b550d75f05d8089850fea3711265bf782610460bfd24ba022e
-AD: 6da12dd4c27f4372480974
-CT: 02972895ffc3e4cf8325f5ca5b26ee8a4301df3c45fc2f43412b827ff9e8314c70dff0ffd3c1dbdffac98a4407e9179557f8df243b0d07f1b672aba943ee38eb677f20985dd542164dadecee488f0657ca790f54d26741a1fe6f246d04c46781f0ebc0122e1c33a35c73065757e98177694d736db9388b4cf48850ecc62cfca7dc94184ef8efb0b1ad9987d76d571f2a1a36981aa1baa978f7b91a65c6c25d006d8a3df86e2727903404922f480dab3a5d5996b07422f3b1a2da3192f41fc34cbebec64144d4db00757f62fd0eccd592bdcb7d9cba618797b1063a6398f4e4cd8886ecb2edd1d75fc011f37cf9a0c4ebe401efdb64cd2d7807766fd40e3b3d0aecfa0d49d6747a409ac2036f3ad6f0dad8e6dcccdf7dec4048ecbb0fb7882dfe603e66a5d7973b29b956d1332f040ed405d97193053e52732aa677994a02cf10e3d4081e6bd1ebb1f3d3b95125aac94fa6637797f6db5674c1d588a30ab4739f8738a299ef60fc5eff5c7e7244eacee4dbe9a66ba60c85567c64c86a7bb11e211d2f30bb45f037f7bfc95f0bf9a87a65de21a04f1955f887c04029bfb0ce689f6a46e84c5f8076dd9806c3035810f674b417379ecd5b4372698f7b2dfb61a30dca69555e49d6f6ec3f44e7dfd6ca533b6dc2341aa63b
-TAG: 9a1e1d8f8f1183ced733218bf5c9dcf17b3adb519cfc8771b1b9
-TAG_LEN: 20
-
-# DIGEST: 1dadffba439570155af2509a548764a93042d23a
-KEY: e9ac9f98233b5a7379a561792c0f3116430e8b6ea058c4799eea80abde04ee1de13e937a
-NONCE: f8f1a6944f44d722271233a825264e97
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed8b11534c870dc695b814bdf1a87bb1052c6755a7a116bfc9095da49db3d71f4b975c5d503f478b22dc8253bee6fd1b174c307f01be95abaa9bee5857772305daa4b550d75f05d8089850fea3711265bf782610460bfd24ba022e6da12dd4c2
-AD: 7f4372480974454879c41d
-CT: 0f3f2b8e85620a4829deb7ce60af43acc0da265bbe6c61939a327ce4a93212cc525edb28a369d54f8e116d81f136d555be33ebfb87eded221fec99f4a38b4fa3ccf58e15e46cd8ab535cc6f62af5d3f38cda649dcc3051a038406430e2b2c088e4b6c5812237d1ac113b0a47364db16632390253b3aa6f3d90f155ba771251ea35a52df0a0969d4f182699aeed419f631c0a22a48959bffa701569743177867e0b9cca18e243d77452f311ccce9c63211d6121a8f97aacebed9784accffb8e6e173141b3dc512a3414bc3a652cd8f0e2faf8fac59e3eca6e613d8466c27c21ffd772c6b18b4c19edcec6f4fdf2005050ccb466737a9ac629229b42effb9019d370af0f7944f7d2f5ba8505db265b373e051376bbcca7f9ee6ccad1f5651b24a516b213d6e90e6b01fde4d673972084d90f44c6002f65dc5acb49ec625ebd1ddf8b9884bfbc6e012ed0214c14af86717d61514927440fad1c1bcdab86b57bb93dd922f51f557e32b6501d99a0a4fc810f0cbb74a4fbdcabd9bdae42214f3a690d5e343498a022acc34cf12c0bee4ac19c193b7537b0400a26940a5bfbc5e1fc3a4b7591adfa9bbd5072cfc6b77e132da8aaf41d9a71b2e5da61c0b26a6eafe2e9245d98540d24286f7478c73b28c351fbefedb46c7a2dba1a07d005
-TAG: bc3abfebfdc7b862b965ef5919df45ac6578d775ad
-TAG_LEN: 20
-
-# DIGEST: e654b4c78e1c0061eea2996fc126c9bfd41eb6d9
-KEY: 3b5a7379a561792c0f3116430e8b6ea058c4799eea80abde04ee1de13e937af8f1a6944f
-NONCE: 44d722271233a825264e977045318c9b
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed8b11534c870dc695b814bdf1a87bb1052c6755a7a116bfc9095da49db3d71f4b975c5d503f478b22dc8253bee6fd1b174c307f01be95abaa9bee5857772305daa4b550d75f05d8089850fea3711265bf782610460bfd24ba022e6da12dd4c27f43724809
-AD: 74454879c41de9ac9f9823
-CT: 04183b22cc3b9d14e40a7ea1b69be68bb2347bfef9ff9a1ddef915f42255b89d5f0cfee79eb0594d56a20fc9a1cdd263deb0242f169eabcdeeffbb64a00d8df58c058794d36cae1ed22a078baa51d10bcc28ae25990a29f400cdc725b479ba7c67f2b7da61fc25d3f063e72130eebe852fe696152c221dfec1056d5c67bcb7e38d9eb45693aede0b0047ef7b064ff1fcd0f4573fc70194a22582054f76ceb2792e2606d07099af20f76535aea63446200c49bdd188e26f784192d131f2494238b610f6f600d89f69b54c1e72c1167b9f41065888b9410c6ca631e9f0b82a72dbc02cb94b0e8aac9cb673a2ea93d53b0f382959c0df460eb00d947ce1cd6c41991f52420046314204318e364d5f8bd6d3d265cde880aff7cc16342a24f2204ec33fa00f3b7ea3ff74c6bde45a3224764bca6f8998529dc59b9a50c1db15263bdb8285f4a4360c1decdc7f2613036bd059705aa5bd651167cec76a3aed48ed5eadec9d558f87865bd1e95da7894792d84a7be856c7892ce585daa6cdc498ecc9ba39f6504144bfeeb4e098087858d008ba23a295a11a3eb13b38c9d86758fb62f133c69973a61a904844352365f007e229fb3c1450e74d5961457b5719268b4a23663de7680115e84b0dc6b118537fc0d9904eda1d9034db6794c51d798c579b34
-TAG: 4702f446158e33bc30825d988a3ed847cb93cd89e4412a8ca0e83fdd53406897
-TAG_LEN: 20
-
-# DIGEST: 654b8591c7f0506261713e9ce7a6fd24a6b9357e
-KEY: 61792c0f3116430e8b6ea058c4799eea80abde04ee1de13e937af8f1a6944f44d7222712
-NONCE: 33a825264e977045318c9b66262c0f03
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed8b11534c870dc695b814bdf1a87bb1052c6755a7a116bfc9095da49db3d71f4b975c5d503f478b22dc8253bee6fd1b174c307f01be95abaa9bee5857772305daa4b550d75f05d8089850fea3711265bf782610460bfd24ba022e6da12dd4c27f4372480974454879c4
-AD: 1de9ac9f98233b5a7379a5
-CT: 81f1e6124dcc3ad1c6aff527c8d9be440b276cb9a78af0eb13c2656ad2c53aaa06b0bffb486100fcbe2ddd944826d6a4d0c749e4a4e646aa404b1a5c4bdf2c37c4ea58d5ceb59aa212e93adc34374a10fa1e5c0e6d1c927e4abe18f00f7caeaac7fd49fae791e04c725d2804aa73fc3bbeb636dcba401ec7f07781ea5103e4802fe94208ef07b78e7a04ea1340f135736a69da887f2886743787cbe6e4c036d04843bf617def845b2d287acc741a707eadc2bbd811ca7987a09bf3b883655de05b07783454e53d55ce7a604e4c5934f846dab6e8b9677e5de5376d38d8c4d0cb3b4dffb9cd423ee61beb74b622d2672dfa22bcca5b0e72806ae48d83a4d683a644f5049199f004256e903bf6a4a24997ecbea4d9feb8048400cd583f3ec860165acda29ec81e3cb8c735328ba0c2ee9a972d9367d5c09c029a003c0cfd0617b1659f5ec9aecd37a3307bff5a19d08d7df6061e5f5d442e76fd3aab4a249802a6e445b53276166bbc358648c0c46f56e85c717b7fd73d5ca7dd6e58ddc9dbe22698c54b9bb02a245629c761a0735db0813ea97d6d13a9e72531f69b0ed623a156dc99786cbc6099a8e11b2fbed401a8a2fcccd6235584176bbaaee17261a66457c714b12890dffd152482a72abfd70fff4fce8903712567a1022b3d4488a3f2beafd9cf574b
-TAG: b5cf6348163210be611c95e090cbde73fe628076bd1e5eed337f18
-TAG_LEN: 20
-
-# DIGEST: 1eaad32c8d0cefaa5e2c503bb2185a73e6387fac
-KEY: 16430e8b6ea058c4799eea80abde04ee1de13e937af8f1a6944f44d722271233a825264e
-NONCE: 977045318c9b66262c0f0368fe9d0cb7
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed8b11534c870dc695b814bdf1a87bb1052c6755a7a116bfc9095da49db3d71f4b975c5d503f478b22dc8253bee6fd1b174c307f01be95abaa9bee5857772305daa4b550d75f05d8089850fea3711265bf782610460bfd24ba022e6da12dd4c27f4372480974454879c41de9ac9f98
-AD: 233b5a7379a561792c0f31
-CT: 1bb52d1264ea749417b516884fa9a25fbccd4a07103bc00213614c9a61700c8fe401c438c3be664bec96b81b6b68b808e76d1af01bbef8cf65488abec789e973364be139800ebcc4c3e117271162c249ccbbbb8f6a1fefa4b7e578b8b344519364082f4afecdb3a1fcc267fb1e0b77d42b574cabf7bb3a339bf4b6f90c652b844fe78e3f3e927252cf33b68720caff6146d046211547682ba9c13a8a88438b920598c3a687cd6b67a96c589b4b827e09d644cd188e78d40a793aa0121a6c8e16ff9f86821388a995b17ec16c5d2ea2e28bf549ebc7218096f420946e296fa620d9a9241aca33674013550a054e6b7c543c5828ef38ae8457b5e9a4a2a52f1fee6004f62bb5018aa6f7853e4e5112c34b93fe12e347125c1c3a2b5e007d5a9e026ab13c196636feebcd0470a9864d50c71b4e29e6d71b678c7223f5ea34d52b17b2bfba5f31d228a203dcc1be74d2baaa6c718df27a8d1938a6a0552a305870cd6607118fd525877189d9deed6f1bd14079a19fca57d98cc2db5b792dd6431564e625f00622e384935085a0e012424d11ad122b9fee40ab5c5ada1f12f9500192d07e16ebf31e4d7ccfc983cad113c547fba55716f7c92f9f633beacf853ef53dfc3c8f8eefa2ea767cf9b338666781080e1692413909c95e492d801673bbc5cf9ef941c68981835e91b6
-TAG: 1389fe1b9dc1f8202b7fe5f12f6db61746a2264d5c52
-TAG_LEN: 20
-
-# DIGEST: 862c0517b3658e9b9cd27db608d49e24e9b4667d
-KEY: a058c4799eea80abde04ee1de13e937af8f1a6944f44d722271233a825264e977045318c
-NONCE: 9b66262c0f0368fe9d0cb746bbd55813
-IN: 936a91d0b5d2c0267218cb7090c6171386d641b87797b684e0fb56f97c3961d8afa22993a340b9b3c589c7481df3f4183aa23fd8d7efd88503f78b8ed1c8e9ba2fd6773e0d0c302a5f47e037446f5891d77df660ed82933f62be8dc55b436965aabe477e0cdd46be99371eb8da7dac997deafd64b1fc65de39f4f03541a11be112a72933c7b54ed4fad0be905d41203f5dce998f8fb2eaad409ae02116417dae0cef457b9e5e16dcc5b6f25607f00d033fb95fb09e4d00d6172e780ab8b700433a957a741c9eb80f2b021b1444769da00fcfab0f5f93b511060c9c5f3aacefe61b184ad2463939ed518ce97c3fdd293d72afc09ffdd4f41963249cd299b92e55ca24d8c078c49f78c7e713710a025cb8b9d71d2989ab33e978c4451e3be585a29a2af12feef71e1063b0b4e6e899200304bd3508132a027d1ff4c047b3ef4f57a74706de4b381c692ef164101b89b476f72b27f06f520c9267cf71408a41729bacb5877e72cdfcfa76aed06707a07c3dab699719fe882eee2fee55ed8b11534c870dc695b814bdf1a87bb1052c6755a7a116bfc9095da49db3d71f4b975c5d503f478b22dc8253bee6fd1b174c307f01be95abaa9bee5857772305daa4b550d75f05d8089850fea3711265bf782610460bfd24ba022e6da12dd4c27f4372480974454879c41de9ac9f98233b5a7379
-AD: a561792c0f3116430e8b6e
-CT: 1a969ac3a7a86368c76919cc844ae3f26eb0698717b84b8ada3fbc1615b8cfe2c3e845f9b37f145ad495531c9340bedf965ce24194abf9986c2d6a5e0b7a62f984a276e47b1f51ea1ec45497972cbe00e8699c623c2f4009cdb3b32f8b9ba235512785c0f8dc46590ddbb05bd630febe7d0e6cc2f96f143c66aaae1d5d0c3bcfcc148f43e999ffce6d49dd4bcfa2b095c883659d4cf7f0940dcb1ec38807283621516d0f1b375e0266eaf3853e0bc74aa6767da3961b65792ea4e58644488fa9995ca60f89a1c533547fd764b9cc5ffca134725754be270768848e4ba0ae54d5363a5f66fa71a52107625c9eb3fface5ab5710f87b4b516415b4de3e3b59c56d2f33c6a9aa295b909da9b0d19956b790a4f082607fc59d2225651a6767471bc513b81a3c0218d134d38ec301d3fd8065cd3cd9c2fded778eff193ea0b7bcbd2ad856a931404501da9eb7226014c28371862a9eecdcc58ed8ef86da91f8e58f49c7f99377387b9676f5ae9f05eb0212e6b7bd706653f3f70abbb8ae26fc4f994821b986e866bfe64881418374886ef549cd17c883b3f1386ce4494ed85467d48f827fc28daa252829bec2a36e6c241456ebb45fb264ea29e1a3e379f1b3dc746c0d012ebc9e38a54429fdb6008fcf2ab518260ddec20a4b8db972e8e0e0e2781429513062d7b9756e277529750f9098
-TAG: 8e85f86a65c047f1867e8d942c6e4a1975a52c59682e79407f73a9d493fa97b0b0
-TAG_LEN: 20
-
diff --git a/src/crypto/cipher/test/aes_128_ccm_bluetooth_8_tests.txt b/src/crypto/cipher/test/aes_128_ccm_bluetooth_8_tests.txt
deleted file mode 100644
index 70ce305..0000000
--- a/src/crypto/cipher/test/aes_128_ccm_bluetooth_8_tests.txt
+++ /dev/null
@@ -1,105 +0,0 @@
-# From the Bluetooth Mesh Profile Specification v1.0.
-#
-# The relevant AES-CCM calls are:
-#
-# KEY: EncryptionKey
-# NONCE: Network Nonce
-# IN: DST || TransportPDU
-# AD: (none)
-# CT: EncTransportPDU
-# TAG: NetMIC
-#
-# KEY: DevKey if present, otherwise AppKey
-# NONCE: Application Nonce
-# IN: Access Payload
-# AD: Label UUID, if present
-# CT: EncAccessPayload
-# TAG: TransMIC
-
-# Section 8.3.1.
-KEY: 0953fa93e7caac9638f58820220a398e
-NONCE: 00800000011201000012345678
-IN: fffd034b50057e400000010000
-AD:
-CT: b5e5bfdacbaf6cb7fb6bff871f
-TAG: 035444ce83a670df
-
-# Section 8.3.2
-KEY: 0953fa93e7caac9638f58820220a398e
-NONCE: 00800148202345000012345678
-IN: 120104320308ba072f
-AD:
-CT: 79d7dbc0c9b4d43eeb
-TAG: ec129d20a620d01e
-
-# Section 8.3.3.
-KEY: 0953fa93e7caac9638f58820220a398e
-NONCE: 00802b38322fe3000012345678
-IN: 120104fa0205a6000a
-AD:
-CT: 53273086b8c5ee00bd
-TAG: d9cfcc62a2ddf572
-
-# Section 8.3.4.
-KEY: be635105434859f484fc798e043ce40e
-NONCE: 00800000021201000012345678
-IN: 23450100
-AD:
-CT: b0e5d0ad
-TAG: 970d579a4e88051c
-
-# Section 8.3.5.
-KEY: be635105434859f484fc798e043ce40e
-NONCE: 00800148342345000012345678
-IN: 120102001234567800
-AD:
-CT: 5c39da1792b1fee9ec
-TAG: 74b786c56d3a9dee
-
-# Section 8.3.7.
-KEY: 0953fa93e7caac9638f58820220a398e
-NONCE: 008b0148352345000012345678
-IN: 000300a6ac00000002
-AD:
-CT: 0d0d730f94d7f3509d
-TAG: f987bb417eb7c05f
-
-# Section 8.3.9.
-KEY: 0953fa93e7caac9638f58820220a398e
-NONCE: 008b0148362345000012345678
-IN: 000300a6ac00000003
-AD:
-CT: d85d806bbed248614f
-TAG: 938067b0d983bb7b
-
-# Section 8.3.10.
-KEY: be635105434859f484fc798e043ce40e
-NONCE: 00800000031201000012345678
-IN: 23450101
-AD:
-CT: 7777ed35
-TAG: 5afaf66d899c1e3d
-
-# Section 8.3.12.
-KEY: be635105434859f484fc798e043ce40e
-NONCE: 00800000041201000012345678
-IN: 23450101
-AD:
-CT: ae214660
-TAG: 87599c2426ce9a35
-
-# Section 8.3.14.
-KEY: be635105434859f484fc798e043ce40e
-NONCE: 00800000051201000012345678
-IN: 23450100
-AD:
-CT: 7d3ae62a
-TAG: 3c75dff683dce24e
-
-# Section 8.3.24.
-KEY: 63964771734fbd76e3b40519d1d94a48
-NONCE: 010007080d1234973612345677
-IN: ea0a00576f726c64
-AD: f4a002c7fb1e4ca0a469a021de0db875
-CT: de1547118463123e
-TAG: 5f6a17b99dbca387
diff --git a/src/crypto/cipher/test/aes_128_ccm_bluetooth_tests.txt b/src/crypto/cipher/test/aes_128_ccm_bluetooth_tests.txt
deleted file mode 100644
index 7543ec0..0000000
--- a/src/crypto/cipher/test/aes_128_ccm_bluetooth_tests.txt
+++ /dev/null
@@ -1,208 +0,0 @@
-KEY: 404142434445464748494a4b4c4d4e4f
-NONCE: 101112131415161718191a1b1c
-IN: 20212223
-AD: 0001020304050607
-CT: 69915dad
-TAG: 064617ca
-
-KEY: 404142434445464748494a4b4c4d4e4f
-NONCE: 101112131415161718191a1b1c
-IN: 202122232425262728292a2b2c2d2e2f
-AD: 0001020304050607
-CT: 69915dad1e84c6376a68c2967e4dab61
-TAG: 99763ebb
-
-KEY: 404142434445464748494a4b4c4d4e4f
-NONCE: 101112131415161718191a1b1c
-IN: 202122232425262728292a2b2c2d2e2f
-AD:
-CT: 69915dad1e84c6376a68c2967e4dab61
-TAG: c4630026
-
-# From the Bluetooth Mesh Profile Specification v1.0.
-#
-# The relevant AES-CCM calls are:
-#
-# KEY: EncryptionKey
-# NONCE: Network Nonce
-# IN: DST || TransportPDU
-# AD: (none)
-# CT: EncTransportPDU
-# TAG: NetMIC
-#
-# KEY: DevKey if present, otherwise AppKey
-# NONCE: Application Nonce
-# IN: Access Payload
-# AD: Label UUID, if present
-# CT: EncAccessPayload
-# TAG: TransMIC
-
-# Section 8.3.6.
-KEY: 9d6dd0e96eb25dc19a40ed9914f8f03f
-NONCE: 02003129ab0003120112345678
-IN: 0056341263964771734fbd76e3b40519d1d94a48
-AD:
-CT: ee9dddfd2169326d23f3afdfcfdc18c52fdef772
-TAG: e0e17308
-
-KEY: 0953fa93e7caac9638f58820220a398e
-NONCE: 00043129ab0003000012345678
-IN: 12018026ac01ee9dddfd2169326d23f3afdf
-AD:
-CT: 0afba8c63d4e686364979deaf4fd40961145
-TAG: 939cda0e
-
-KEY: 0953fa93e7caac9638f58820220a398e
-NONCE: 00043129ac0003000012345678
-IN: 12018026ac21cfdc18c52fdef772e0e17308
-AD:
-CT: 6cae0c032bf0746f44f1b8cc8ce5edc57e55
-TAG: beed49c0
-
-# Section 8.3.8.
-KEY: 0953fa93e7caac9638f58820220a398e
-NONCE: 00043129ad0003000012345678
-IN: 12018026ac01ee9dddfd2169326d23f3afdf
-AD:
-CT: 0e2f91add6f06e66006844cec97f973105ae
-TAG: 2534f958
-
-# Section 8.3.11.
-KEY: be635105434859f484fc798e043ce40e
-NONCE: 00033129ad0003000012345678
-IN: 1201c026ac01ee9dddfd2169326d23f3afdf
-AD:
-CT: d5e748a20ecfd98ddfd32de80befb400213d
-TAG: 113813b5
-
-# Section 8.3.13's test vector is identical to 8.3.11.
-
-# Section 8.3.15.
-KEY: be635105434859f484fc798e043ce40e
-NONCE: 00033129ac0003000012345678
-IN: 12018026ac21cfdc18c52fdef772e0e17308
-AD:
-CT: f1d29805664d235eacd707217dedfe78497f
-TAG: efec7391
-
-# Section 8.3.16.
-KEY: 9d6dd0e96eb25dc19a40ed9914f8f03f
-NONCE: 02000000061201000312345678
-IN: 800300563412
-AD:
-CT: 89511bf1d1a8
-TAG: 1c11dcef
-
-KEY: 0953fa93e7caac9638f58820220a398e
-NONCE: 000b0000061201000012345678
-IN: 00030089511bf1d1a81c11dcef
-AD:
-CT: 6b9be7f5a642f2f98680e61c3a
-TAG: 8b47f228
-
-# Section 8.3.17's test vector is identical to 8.3.16.
-
-# Section 8.3.18.
-KEY: 63964771734fbd76e3b40519d1d94a48
-NONCE: 01000000071201ffff12345678
-IN: 0400000000
-AD:
-CT: 5a8bde6d91
-TAG: 06ea078a
-
-KEY: 0953fa93e7caac9638f58820220a398e
-NONCE: 00030000071201000012345678
-IN: ffff665a8bde6d9106ea078a
-AD:
-CT: 5673728a627fb938535508e2
-TAG: 1a6baf57
-
-# Section 8.3.19.
-KEY: 63964771734fbd76e3b40519d1d94a48
-NONCE: 01000000091201ffff12345678
-IN: 04000000010703
-AD:
-CT: ca6cd88e698d12
-TAG: 65f43fc5
-
-KEY: 0953fa93e7caac9638f58820220a398e
-NONCE: 00030000091201000012345678
-IN: ffff66ca6cd88e698d1265f43fc5
-AD:
-CT: 3010a05e1b23a926023da75d25ba
-TAG: 91793736
-
-# Section 8.3.20.
-KEY: 63964771734fbd76e3b40519d1d94a48
-NONCE: 01000708091234ffff12345677
-IN: 04000000010703
-AD:
-CT: 9c9803e110fea9
-TAG: 29e9542d
-
-KEY: 0953fa93e7caac9638f58820220a398e
-NONCE: 00030708091234000012345677
-IN: ffff669c9803e110fea929e9542d
-AD:
-CT: 8c3dc87344a16c787f6b08cc897c
-TAG: 941a5368
-
-# Section 8.3.21.
-KEY: 63964771734fbd76e3b40519d1d94a48
-NONCE: 010007080a1234810512345677
-IN: d50a0048656c6c6f
-AD:
-CT: 2fa730fd98f6e4bd
-TAG: 120ea9d6
-
-KEY: 0953fa93e7caac9638f58820220a398e
-NONCE: 000307080a1234000012345677
-IN: 8105662fa730fd98f6e4bd120ea9d6
-AD:
-CT: e4d611358eaf17796a6c98977f69e5
-TAG: 872c4620
-
-# Section 8.3.22.
-KEY: 63964771734fbd76e3b40519d1d94a48
-NONCE: 010007080b1234b52912345677
-IN: d50a0048656c6c6f
-AD: 0073e7e4d8b9440faf8415df4c56c0e1
-CT: 3871b904d4315263
-TAG: 16ca48a0
-
-KEY: 0953fa93e7caac9638f58820220a398e
-NONCE: 000307080b1234000012345677
-IN: b529663871b904d431526316ca48a0
-AD:
-CT: ed31f3fdcf88a411135fea55df730b
-TAG: 6b28e255
-
-# Section 8.3.23.
-KEY: 63964771734fbd76e3b40519d1d94a48
-NONCE: 010007080c1234973612345677
-IN: d50a0048656c6c6f
-AD: f4a002c7fb1e4ca0a469a021de0db875
-CT: 2456db5e3100eef6
-TAG: 5daa7a38
-
-KEY: 0953fa93e7caac9638f58820220a398e
-NONCE: 000307080c1234000012345677
-IN: 9736662456db5e3100eef65daa7a38
-AD:
-CT: 7a9d696d3dd16a75489696f0b70c71
-TAG: 1b881385
-
-# Section 8.3.24.
-KEY: 0953fa93e7caac9638f58820220a398e
-NONCE: 000307080d1234000012345677
-IN: 9736e6a03401de1547118463123e5f6a17b9
-AD:
-CT: 94e998b4081f5a7308ce3edbb3b06cdecd02
-TAG: 8e307f1c
-
-KEY: 0953fa93e7caac9638f58820220a398e
-NONCE: 000307080e1234000012345677
-IN: 9736e6a034219dbca387
-AD:
-CT: dc2f4dd6fb4d32870129
-TAG: 1be4aafe
diff --git a/src/crypto/cipher/test/aes_128_ccm_matter_tests.txt b/src/crypto/cipher/test/aes_128_ccm_matter_tests.txt
deleted file mode 100644
index 7cff4fb..0000000
--- a/src/crypto/cipher/test/aes_128_ccm_matter_tests.txt
+++ /dev/null
@@ -1,92 +0,0 @@
-# These test vectors were derived from those found in
-# the Bluetooth Mesh Profile Specification v1.0. That document doesn't use
-# 16-byte tags, so the tags have been updated here. Note that the first four or
-# eight bytes of the tag is not equal to the tag from those vectors because CCM
-# authenticates the expected tag length.
-
-KEY: 0953fa93e7caac9638f58820220a398e
-NONCE: 00800000011201000012345678
-IN: fffd034b50057e400000010000
-AD:
-CT: b5e5bfdacbaf6cb7fb6bff871f
-TAG: b0d6dd827d35bf372fa6425dcd17d356
-
-# Section 8.3.2
-KEY: 0953fa93e7caac9638f58820220a398e
-NONCE: 00800148202345000012345678
-IN: 120104320308ba072f
-AD:
-CT: 79d7dbc0c9b4d43eeb
-TAG: 281508e50d58dbbd27c39597800f4733
-
-# Section 8.3.3.
-KEY: 0953fa93e7caac9638f58820220a398e
-NONCE: 00802b38322fe3000012345678
-IN: 120104fa0205a6000a
-AD:
-CT: 53273086b8c5ee00bd
-TAG: d52b87a8ce6290a772d472b8c62bdc13
-
-# Section 8.3.4.
-KEY: be635105434859f484fc798e043ce40e
-NONCE: 00800000021201000012345678
-IN: 23450100
-AD:
-CT: b0e5d0ad
-TAG: 6078e0ddbb7cd43faea57c7051e5b4ae
-
-# Section 8.3.5.
-KEY: be635105434859f484fc798e043ce40e
-NONCE: 00800148342345000012345678
-IN: 120102001234567800
-AD:
-CT: 5c39da1792b1fee9ec
-TAG: a9233958aced64f2343b9d610e876440
-
-# Section 8.3.7.
-KEY: 0953fa93e7caac9638f58820220a398e
-NONCE: 008b0148352345000012345678
-IN: 000300a6ac00000002
-AD:
-CT: 0d0d730f94d7f3509d
-TAG: dda1694adb791652fb6ae04682f19b29
-
-# Section 8.3.9.
-KEY: 0953fa93e7caac9638f58820220a398e
-NONCE: 008b0148362345000012345678
-IN: 000300a6ac00000003
-AD:
-CT: d85d806bbed248614f
-TAG: ef7f4d55e47d21522ebe3d5bc735a5c5
-
-# Section 8.3.10.
-KEY: be635105434859f484fc798e043ce40e
-NONCE: 00800000031201000012345678
-IN: 23450101
-AD:
-CT: 7777ed35
-TAG: 35d84e18784c4bf3cb1b4c191dc555cc
-
-# Section 8.3.12.
-KEY: be635105434859f484fc798e043ce40e
-NONCE: 00800000041201000012345678
-IN: 23450101
-AD:
-CT: ae214660
-TAG: d146b28beafe7f984f9430502d07aafe
-
-# Section 8.3.14.
-KEY: be635105434859f484fc798e043ce40e
-NONCE: 00800000051201000012345678
-IN: 23450100
-AD:
-CT: 7d3ae62a
-TAG: 52ee03ab84e1a33365e8a61275665f71
-
-# Section 8.3.24.
-KEY: 63964771734fbd76e3b40519d1d94a48
-NONCE: 010007080d1234973612345677
-IN: ea0a00576f726c64
-AD: f4a002c7fb1e4ca0a469a021de0db875
-CT: de1547118463123e
-TAG: 14604c1ddb4f5987064b1736f3923962
diff --git a/src/crypto/cipher/test/aes_128_ctr_hmac_sha256.txt b/src/crypto/cipher/test/aes_128_ctr_hmac_sha256.txt
deleted file mode 100644
index d4803a0..0000000
--- a/src/crypto/cipher/test/aes_128_ctr_hmac_sha256.txt
+++ /dev/null
@@ -1,336 +0,0 @@
-KEY: 067b841a2540cb467b75f2188f5da4b5aeb7e0e44582a2b668b5b1ff39e21c4e65745470fb1be1aa909c62fabcf0e6ac
-NONCE: 10e0ecb00da5345127407150
-IN: 
-AD: 
-CT: 
-TAG: a82a891565e466957ad5a499d45b579d31acaf582f54d518f8f9c128936dac4c
-
-KEY: c9d9ef2c808c3f8b22f659c12147104b08cec2390a84f0c4b887ca4c247c8c9dd45e72f48b30b67a8545750387232344
-NONCE: 58bddf96158a3a588bf3ec05
-IN: 
-AD: 5d
-CT: 
-TAG: 3580c1601d1c9a5b1595d3dee35b0cd9e1b115d8b0abee557b2c207b8d0df5ee
-
-KEY: f755dc6786e21f39b595389a51d36673e1ffb94ffc066c03873eb31839be6fa319fd31c8bea29f03ff28831861e60b6e
-NONCE: bd6c80797f1f4c563b06fd3b
-IN: 
-AD: 78d88005136e312639572343a2d0daf7483d8235291ee3ac002469456b075243dc03380c387030d546c2b1
-CT: 
-TAG: dede80d810fc449a769c79a5ecd2c0d68e9e0fae567781e623ab2098c88d8a86
-
-KEY: 43a0a28fef8b89b8fb0f76de01d802935ad561e27ca9c9fa629347be676a6af758501b6a652f369045da5fef751b56bb
-NONCE: 0f6472f1e589c16ca5ad45b2
-IN: 
-AD: 78e4eafccfc87631f0314c442ba4c07bca36f996a5b3408f9e445d6009a87ded16b33a4af9537a4619cab70d
-CT: 
-TAG: 11fa62dd8374aabe728ebf7e9aa1c02cf8f2dbc29f9aaf1940313f0b7c3e0301
-
-KEY: acf8e5f1bd64e6289370650b5b3fd773320025c8b229fd335d9461768cd0a17b4bcc946919932efdc9fc84a7f50768bf
-NONCE: 1aecfc90d28bcdcc5a8e3578
-IN: 
-AD: 6daedbdc69133b56f6a8f098f9f70cdb7e129e51115df385a6d86204a53412cd999cf2e69f45e168efed4742b6
-CT: 
-TAG: fbe0511ba0ec5709def9966a9b05facf171cddd81ee2cd56e7afc867af465f31
-
-KEY: 2773c92e6cddc9a5e5dcaf3893080fd2153f009d807df0b175c76615645f2087539e299d8411b27badb749a9845c5e29
-NONCE: 6d04ed129299651aec0465f8
-IN: 
-AD: 44219577e361a7a4681172d120a2d653a53ec74bc487ccde4954835943bca413d55c65dc665310148654d8c1e2e6bc2f06ec344473120ad1f95739b993a57f9ec0b3299cc088f385894fff876fc2ce8ce6b77ca253f177ba615101e84e17ad0e60704cff195dcd50eb48c77de409797e0b1c8c4c5b9215a4a0399954a008267b
-CT: 
-TAG: 6ab61ac4493e58e48d071d994a000f1c1f498d22f83c8d2af56b03c155afc57e
-
-KEY: 23189bf23bc4b734410d1c7ae321c42e144a25347a8029bb925e3d8ac1b92f4eb97227c1dece86ae9dea7d127eb33f9b
-NONCE: 30681944cd5d78f46d36ed8a
-IN: 59
-AD: 
-CT: 92
-TAG: 986aa8438da3cf4a98f478f90d24908c6a4e848f299873e649b256f5499d89d9
-
-KEY: 463d1148325c5f57af670877068a78203571b8b19f40e9f0373156b7448ab315df86c77d7c85ba6e54b9bc329399f687
-NONCE: cc9d015a4b5a888b36b14d05
-IN: 28
-AD: 6a
-CT: 05
-TAG: f66e8dc794b142944fa46d5c04a3e3fe00291668374846d763f2beeffd4ca4a0
-
-KEY: 937eaab44e7c7d2cd5bbb053c12e6255e0aaa42cbe7d83025b7a2887eff8f098d019c80af849b0ed7da54a5ba5b39200
-NONCE: 2b160d24df579836e1572ea2
-IN: 9a
-AD: 35841a33ba3a6ed3d89a1f76d06c61613d09834847e5a41f8616748e30c14335e5baa43d49fceaf85aeb22
-CT: 80
-TAG: 5e5799c147be0329dbcabf7ecdba6ac595ebc2d06b9d757426fbb31e8b39f62a
-
-KEY: 68a746f382fcc11c02af7b352b9d710c137a9f59bc5886dc374ca88cdc01b86fe5678fde16cfa846846539f67a429276
-NONCE: b94346c033ac1a3d709c4f09
-IN: ad
-AD: ad61c9168debf9974e19759088944e888346aff99f3e2e4522549c8ae332a0f41922972fb7c1d5ff24e7ae4b
-CT: 46
-TAG: 62ae92ff64710a9f260da2562e246356e9d749c3584fb9f40d9572307ccbbd31
-
-KEY: 6622579d1d6350fd5dff432b69d172cc51f99bdaff50b0a1c0f4cda8d5904581ba8657ba61c6936407243d7fb64b00da
-NONCE: a880caa7157a13540d2b724f
-IN: 2a
-AD: 95a23eafcff892deecaf093109d30290d819851ad5c91061510e54baa2b039b114c815da20f0e3ba2ba4875bdd
-CT: ce
-TAG: 33f09666f9fd1d92f137d9f3f7092b47b2bd71a7e3139dcd19a803a6b17f2a3a
-
-KEY: 91ce9dd87c7d11d2c4da41863b6851c40fba786a612e0fbf0d1956a71286dfc61fa10bf7d148cecd72b6ceeb82b68d3f
-NONCE: a50dc3d8fd63d3076cc70ff6
-IN: da
-AD: 9ce8e1a777c159ec775abbd67d85e84f3550c3296e848dec18b61bbd713a98a033805bfe6e2f2a011dd7fd754708e524168142aeee579cae19c7eab78fa7c42fa335f0c725baf556160beef9e4afd1050a2c8813be6bd14cc6982116d0229d53e9b4de923abf6ba99bdffe1d5f21748ae74caddb077d9f7488b394436222beca
-CT: 2b
-TAG: 1541cd745bc0259dd72a212474f5c7b8c121dd0289d674e5ba8d56a220d1f1d0
-
-KEY: 1ad577d3b47e3fff8528e336a43a7ffef72f811e05b5c69ccfe777b10f29061e289178e394a1c87ba483c7f98ea5431d
-NONCE: 1fcaa4757a9e48ed2cb3be62
-IN: 46d30dac550103006c292a9ac05d31
-AD: 
-CT: 37616eba30c55595fa0ad5d50f91ca
-TAG: 5c3ac4010f75adf90f81e775b07ab939e7551a9b8e0486ba33766728ed498245
-
-KEY: 6df310dc1847b42c68e50b03d154b73d7f3823354b32759c5369bce1a1b4cd63ccdb911c2dc792acf84b8b8f3fdfb89d
-NONCE: 92e6759a31dd556ff9124d73
-IN: 6daba76658db642209e276ff7c8d46
-AD: 32
-CT: ce1814c03037078b6be3252460af48
-TAG: 46e61913f2a1ff6e77faade9a7cd37a82eff3ebec4276fbddff9266b9c9bd873
-
-KEY: f848c2300995f5c98dcd0db24574d7c61459ca64c084421c6ad156e80e398904417ee745245ddae91be20fb07e66bdb6
-NONCE: 3b177e11063445717f417d14
-IN: bbf225131c821a6a60817cc65bf699
-AD: 4c5ab4fdbe0018344629349feed5d8c3ae0c5b64f2b093576a2aaa1225e7a50eca01a9962c9b4f8fc5c12a
-CT: 1538957e78f3ab0fed77906153d715
-TAG: 2c7760d47407ad7b0d5b85fa4967eaa7b6c0bb6eb16619adde7a191abfdf3da3
-
-KEY: d406cac07630ce2c071732a0ec95f55123486d2677465768dc7db13f90902cf172f92e19f57f5cf7c68cd7bde7ee4b4b
-NONCE: 766aede0120b634a4be6fa12
-IN: 3804d40090a38d4c97a5fff631068c
-AD: 7707b7d0f266284e84c2ecdd5a18832650c3e27d66697616c9e9bb2f8a09a3295de0119582ca3614b9608548
-CT: 91e96462a5dfbe8b7af201158a36dc
-TAG: 56623e5813070a0e2f5184aed83b9863301ca02e3108f7afc478d48305e397f8
-
-KEY: 42bb22a317ed9f9df8119746e9a1257217e5b0144051ca56f39587021d969bc0acc02795f3bd201031e8c05af08ad079
-NONCE: 0a9f6bace71a1ab21f4917df
-IN: 013f7b8c75307158f4f300450e7a78
-AD: cd95a649ae215fe73442a6991e157232cbcabecff6042b87d41557e35b97606d606c3ded54f5d3db7aa2773f67
-CT: e588dbcecbdb7667dccf7fe34f8387
-TAG: b04461748109ed9068c7e9c0446528ef09b01613c3b3aa1ffeed6685ebb550f5
-
-KEY: e1cfcbaba3a04b5108ce2a87099a6aae936ee38acd92b7e6b7df0e3bcb9ad18fc579b5d470ef3e04c23459f509852458
-NONCE: 112dd267174bcd81e6fbd924
-IN: 288a1e44b406aebec7b418674f81e7
-AD: 7809d8011c5a963df14fb8981e874119c60b7a9d897d13a05651759db5835deffdd991fbf98b9aa71c79e48bd701b228ba248b6bed874b02da7fcf28a04c38b81c0ff628846015258af30dbf28ea4f3283f664f888fca545f5fc57dccc4ad1dd476c52fba341182ecf783706c5c458bf0ee5ec83454afba78eb8b5ca17af88ec
-CT: 80f4e1012d76f6180ca00fd32c8fec
-TAG: 6de00bf2fd3c88ab34ca9390f7e559875e43e0f938303816a3a75a35729bc453
-
-KEY: 84172547d8608bd9e788a7bb60df2982963716e45f8e63f0c5033327d85c920c5e3776e314246b1694b739c39abfa29f
-NONCE: a3f1643bb504b7ce9e5b43c2
-IN: 7e76323eb13e64da9b240a57c95c855b
-AD: 
-CT: 966487c18f025d67b42a04c30d3ff4c3
-TAG: 8bb03d893f0ce8ea4a6a47245bc7f20c72acf8caa466edd01365d0f74c929463
-
-KEY: 02dee8f2e63b37fe3cbae9101fed0946e05e5090510bef3324a82e3f27456a45ab1b6cdeddb1fe515ad07aefeee6ccbc
-NONCE: 64723d21365d62926d5c2262
-IN: 4f1f132c50a01ad48882ce88655b33f7
-AD: d8
-CT: b102082e14cd9ecc0895f7a6f08ab522
-TAG: 2c09651c1a51cb8a375746236fe258a36e725936ccedbc4dfafee6c3084a4716
-
-KEY: 5db57cf6301bab815d38879b35c9db72fd40ac576d259ad5074d0828364050554e9fc08335b5f2bf066b09e50fbe6ba4
-NONCE: 36e5340d844de213c312177a
-IN: 41a6e910b14388740ea351eb1df980c9
-AD: 8316a6b9b155b2de5e724f7593ecdcee442eaef7b9ad204eda4744a5e648c2dd84f48ee81397e485953465
-CT: ee21d4d47042415ca27d2ecb11b13d79
-TAG: 5015da5a3339389d39d0fcafb56ef4005b342e69ba47930e84408d33aadf5f2a
-
-KEY: a493dd6de6fd6584599096442dd9345f6f2d8fc2d426c78eee2b992b4071aba4ce463f3ca293c84b2faf3e8644b6ec25
-NONCE: 4f9be6f788ee960adc650d86
-IN: 4de6e244251091cf13762d20685e9085
-AD: d15da312b7522c18384acdbf6348b5e105557f1790a6a203a65acd73397524681666743f3145048775ad84e3
-CT: bb1296457daa39d889c8f986938d6a39
-TAG: b93548cea90c34d03d6f5683ae2cc78814531b803d42cfe57623fd4bdc8f084c
-
-KEY: 8cc59ebe2c7375a70915c48d2978a1f720bc0aa2775ce9189ae7b3d5dda9a81e56cde0e0a29939599409b71f0b65f346
-NONCE: b0ab041f37ea1e594f1eddb3
-IN: cd0aeaf6806cb99e6bc1c8c5d830de8c
-AD: 8f4b5a9609df757826dbe7e51bb6a2c6f45f601263cf668836193513cf008ab6b36a7d5447039f1268821ec37e
-CT: 5d5375b9d9cff6d0c1dbd14221509a0d
-TAG: d8850bbc838e068b817c24d018f8f1e1cb8aac0a68392a700f48099f81b6c37c
-
-KEY: f3e9c507478d3f99dbf3e2421e45929b096ab3f3d4aa4ef9c338c5a1a2425c9936b7df602502d33cbafcf781350da77e
-NONCE: d4872a30c9d1fa9001a25afe
-IN: 25e05ea69a956b12a9be4ef03ae9d30c
-AD: 8b346c20e7c64b805d9c8d325829201753069c60b3f221f31474f55cb20315373ccd7c2a8f215e9efc407ae91b05d8b6d693a3780fdd65d7715cdded86c3d6204055812f3fce897f829d1df9ffaaf48885291701ac1765090c383162dd13d6bac88baa0cb2d748363bbb79843a1594ec6d8778854a63b7c9ffeb6d1fb17e90f1
-CT: 61325c7e0d29e9ad50b9c0fec02d7ef4
-TAG: 4b2d0caece46ce2496445883c03234e900189c22b54390b399d78ee4ebfbb7d4
-
-KEY: 3d9b651e65e9239c9e33aafb091b348161ab797901fd0468aedd014e4d5683c8f3f54f20ea6bb07bb25dd258df7bcd5e
-NONCE: 32bcf856a14437114e7814cc
-IN: 08a667c2923f87a7db6502478d32280bdc
-AD: 
-CT: 5e8e02cc91c732356bb9f1fc599426a379
-TAG: 5449e878d558beff4bc7dfbb5f0195444705cfb259773b4faec524fbaca37ea0
-
-KEY: 2124cedb5f3f2558f8b9a2304a29c0df6102333cb4aa10625aa82cd76ab645c73f3b7cbf7c96cacdcb9e0b738e40c042
-NONCE: 7ae419446a3a105beb2fbcc5
-IN: a305dc4a2e50cc8e7a65a4b10b73849636
-AD: 70
-CT: fcaea620f7e9ed1337214c4b432d9869d2
-TAG: bfc739c8504a4d9033ab1915f46c1bf65c5382fe9ed1c134026ba32c63ca131e
-
-KEY: b027feb1aced8fb3af27a9fd7f531c30991ec1abd9f230a3e5d6ee9fc6a77747013f8e14dcdbd07b0083d0ce23dfa711
-NONCE: a30a6520f933ff5265e6e305
-IN: a705f842d542cb6957fbce21854755c6dc
-AD: 447bdaf34dfab9cc3dd7777ebaf80077f391093bac9817bf02ad98db9d3f271282ecaf0ff19652f92076d1
-CT: 3ddcb07c121b498f1abb73bedb527d4df4
-TAG: 55957a0e884dea22d6ace10e5936cdac891f5b54225349ede5c44715f1064b5e
-
-KEY: ffefb7770a7cf125395703985823f3e926f3722ca0764518fd2b8996577bec03648c8d542af1c6e36b51174b0ba88316
-NONCE: 4c31394b4b24f6251a839891
-IN: f026a1d352c37b204c6c1138abee9a9a75
-AD: 1e7c0f71a3aacd87ea785521ea31f93b1efd0bdf97952e0b84ecd50c706806deffc19caea312b5a9988454d2
-CT: 23c8bae37db93ed9f55f2903e04b7c6a8e
-TAG: 89d0a7e7d921dea5bb54c28e79b612688e42506aa69b141de830c8d63bdefcee
-
-KEY: 453cf5e4f48ce5a961c94af0e1639c156965970f561ac17fe08d5b75975abe3db87412640972e463290800666be80441
-NONCE: b3e3f9708a86c7cdf139e496
-IN: 53f1b11de497cc6ecb411a777dc3d60197
-AD: afe29e074dcce850ac6640230e6b9f66a64587c5fbe8679144e065d3b1700c721833ba8f918e926c9142f5f362
-CT: 15d5f597be46a19566a72c5e843b77f70c
-TAG: a561c3375c096a116a721e9404e555a2deaf3f677a8611694281663274708f58
-
-KEY: 3d497f81d0652d475bcd85cf53bda13f79ef0afeaec09dd679a6e5ea58f87ba6576269f836096d5ac034594b17073331
-NONCE: 3fb1664830821e2b524890c8
-IN: bd75c313f5c8f6007a2185bc39d0af01bb
-AD: 50744ed959e2b8ba5b5f4807e2997ea0b96ebfcdeaa1c6b33853219844592e82ad67abf6ccbb272cfdba6a3e45c07fec4d4a0ebe4235f11d916771a764d9a129d39f6b84f0b5fb4cdf789ca2f5ea306b25d047a9b1a1e2e90905b6fba472e70b2fa25c96602cfa0031f31c68954d7487507081b8e70f8aa1342cb8b4a98ce9c2
-CT: abe3869ac43fd8b429ee8b8539c970bc86
-TAG: 33fcd301c2bf624bccb92a986c2dd5f2ecafc32649ff550eb5312fc81cbce46e
-
-KEY: 353c3e9f87b40fc0281869c68d9d9bee5c95771dd79998c059bc5ceda71f139fe447cfdf340e9eac57f232b9d230e45d
-NONCE: cc7a4b46b02f4e7f96fd34e3
-IN: 44bcb61332930f606276268ddbf3287bcaedb5b25704489cbee63ec839d7a69533dbfb6e95fe5b4694eb485beb1437f0777774868ecf45c8a5b3edafa1d62a
-AD: 
-CT: d038d67b8b690519fafa7467c9fb94135f9bf0bcd8247cd2c30da62ddf37a6d9a3a9bdcf8ec081fb4469c0fc2798e2e30afede7cda384438fd01e5d672dcb8
-TAG: db2c685a59cdf304c1fb57b66966a5ca1cc3536fe21eb1113c25868428640c7d
-
-KEY: 3b3786e38e110ec0c8b05fbdb3d9b6d117d1ebcdc0e7d942249fea6baafa31fe5caac227979fc833b104641e8e9ed01e
-NONCE: 53bf31912a3ededc01c91f84
-IN: 6de5890028382aafb186042864c5cca1a77ff80ba4f7f0942dcffa1579711093fb652c8d475dfca81a976be8ca77eb9c7a6b49dca1425610c945bf404ba65b
-AD: a9
-CT: 886939354fa117139f5e077baa186825ee7e2955c3a74f88af3a86b260ee9f9959a90409e7d602e36cea31e606aeaa8b9229e28f7fa58ace6fd217e5cce1e7
-TAG: 91a769003ec900dbb40ea9c9b959882d822421b510ba85ca826bc4af3b5c42e0
-
-KEY: 5a75c97f3583983bbc5eee4a882b766a6708d798a46f71e63b7509af69afd7cf86f9b42df04b626940914007078a8b9b
-NONCE: 426e8bcbcffb6b425706dae0
-IN: c24fa29a66197cad518c5a1a76abd9446a8f24c2dd81e953bfc5c00544c119d67986781a1c754224af234b0ec5e44e78610a4420eb78c283e9a56637c35c24
-AD: 6376835513967e4ccaff9a0c56b4d27a2bd0d013cd54abf95fe9a162d036af285ebc9567a16ed5abfa69aa
-CT: bc4daeef3ccdf9abdaa75591781685eee3fd7825bfe63132817a7e0f93817f22bfca30ed775a773f5bb290aac3a381a01085e861cab7b9fe4c5143138e17a5
-TAG: 79c779bfcb974ad9a8ac88dce5027df5691a3a1163a5d5893b4cdb1663b17aa1
-
-KEY: d1b301c029fe3b81e4b97e08e84dbc03b138f422161c0e74ccbda3172c034b99610f09a9e611f0e9a3ca40af4fcb3c56
-NONCE: 4032c79eb3ee4b63e44fa932
-IN: 71bcf5a5198787b85a66221c22e7bdb9d038dd3e10000555ec9271e54bfefc460ef4e71729ff7ae52859015b49f45df89ddf183fe1e19de3acb032dbaa4d57
-AD: f1cd18ff1e5ad2b65de41e083b5175966625ebebb3031e1027761e407dae4e8e193ffe7dea52ff61147f1b4e
-CT: 7c521a703b7d1cbd086bdc316d4f2ff0852c462eeaa1d7a586c561354be9ed412d9d9bd1f78cc85468750f1af09b7b17dc1ee84c926760d63504cd3a1dfa3a
-TAG: 831f3552890d997f0a8f2d832b6e92e26f6e865424699f0364a82d86ab7734d0
-
-KEY: fdd24bf37b36666a4f641115581ab4bd6b896dd3017006031b3675beed33f21a314363e3a07bbbf4359d9ac02eec847f
-NONCE: 7767cff1a096a9f7d8a9b32c
-IN: e62b7695dd41baf49d1b356e64c6d5504784380b75724b86f5f3185d1a530664aea0e5f9aeef347e1ea4754acaa7f3c233638db234c0e93db02e0bf988e7ab
-AD: 2d650f3daed2564b0df86fa23ed0343634663adfae2c422f80f9d5674bbb63e824f01ad3994834f889133bbc0e
-CT: a51f50a6ce77a22ec472bc18c37d08fb28e77efe55065b600e3edbd9ac97f0fd0eec93cd312ec7ef886cb04e1849526f0a38b14d862bcd578b99bf9a007c2e
-TAG: 89d83264364c9c84ba705e5549abcd496abed3900f65e3daa012275fed18a7da
-
-KEY: 0f88e2d00d2c4bd682f1591ea5f4c1a1090180e1195809cb363b27c863360a85b27814e6a724effa44f298430d6c9628
-NONCE: 6e2e62ecb2aa47c7e5921d25
-IN: 91efc710a57adb57017725cfa26d17d3e2993c5ee66942ca42e770a83763e9df8a455bd408dc1e2661cf301f1dd669cd6d5b4d92a886be0f54527779bae8f9
-AD: d060cbe84271e85f25a3dcb6dbf299551f0dcd5783e3df80468636e491c0100f3ec8316f24240482a88bc430a398b0ecaee5c48a274ffb2d835e200bc39ec0aa86a1c90c9e2dcb4217595d48826a81de90eb949846a33fc26bf8886ca0554e1b8f12cbeee36e65e33cbbf610c2d24264619fa93c44c88e0e3d9d368fdece461b
-CT: 10d99b98ed67d85a44fa57e706a8b028c61ef17f35f6713613d158cad90e826f90ef036a2190ba123f9b68b352ca94fbebf8ea947e569ad45f00e6a36975f8
-TAG: e345bebcc4a8ac01528bc5f317e5c378236b292c2baab6ae8654245da35d90d6
-
-KEY: 1ccec52c77239bdf6ca50e5b702943b23015d08cb1d9bac592b3dec4c96be904110713e52e114a8bc294df26530a758a
-NONCE: 38554b7c40027afe9721e14a
-IN: dac91fcdb3768df8d5ae9ddba1fe5917c084a5d9e6b14eee9a609cab2da34ec9f95cf2d10fff77108477e694c76f362e29b9a9287d8b190a748ed0a929967ff8
-AD: 
-CT: e6bcb38b3bfd0b428a14bb3aca01a4a9e54b0853f10bd7750f5bb58d0e7dd18006f8929d7d862e5d6601ef63be8442334b4d51a99219cfedaa31f7ab19028459
-TAG: c4f05d9415840c2325dabbcd12dbeda31e47637437514c606dedfb8ce622edd0
-
-KEY: c82ad4c6f248bc51d3a51b958ecc2460a3c64d669f6c485c2309d26abb3fa84644a0d8c28da8091f90184b53cd556413
-NONCE: 35a29938fb7a31225b08d0e4
-IN: bb0045cec5587e50b148b140b6969612425243ed1412e812aa9f4b471ed34ced6dfa9e0acf3e31455893e4ee7e66b4661c6e1f80b7d6f1159c11387ce579b80f
-AD: 12
-CT: 5f1854fc2fb11fd721755445a1efa5a28607a725ad71cda9a3464860a6a0efe3f58727c0e0cd315f867611232abd72034dfc2b9deace8cf6cb507b1cd4032b59
-TAG: e40429ca19a88da73a7654d7ed8e0621ac2e504b0245615e262ac70bd05a3f47
-
-KEY: b01bec74fe97e5af7db2a0b1432f8b4c069447d2b56dc2668371387f753b03465412213999d2394a4b79873db06c590a
-NONCE: fec7de97d54dec8d36c9f253
-IN: 88ab078d03ffacd128edbceea7ace2e6465f4076097445a5db7f0e61ed817b6e24f22874489049bee0c58d0aa2b42b4db0bbef6ec88d032da9c82ebef57c424d
-AD: cf0ceb3e80a76d1a75f6e070f5d3fee1cd1e2699434f96e7cb3adce12d4a3148dd433b08c68b9d66962f24
-CT: 8aa3c7478b0cd86fa30870957fb5307345f89346a869d508da9d3a4fe36fb3d6a9b0c3c1bc2d44c8ea31ec028012098d6032085af0b54603dc2fa65ff091fdd6
-TAG: acb670172ec3754064b366566bdccf5056eae132e2041f1a285c5883e7eff4f3
-
-KEY: 699a94f6e6eb457b186af58c25118fcea81c8f0ad265e7c16bd6cdca15c9db64bb9a537580ca0474a4b4d54d47412d88
-NONCE: ac3fb6525f4357d831529407
-IN: a7300aa94f3d357cdb272f0a739979e08aad9551dd3bfcd0b5aca6a0972a71b502639e79e1b9e0d22db2f3220b982800d9cebbac3d10d9bf86ea25d3d417fc57
-AD: 19c3d34bb9d57d0f63f14bdd3da06a43a5afe6a8c505f038cb403515876a2765c2d61aa7e4c84e11c999b81d
-CT: 8b472f1069ace78172611369b03073f751e5206dcd2ce3b45c431095f303e70c59bfad3af8006e66e4a68f8fa2ffa534bd76bdef089d07dd38988cbf723393c6
-TAG: 8e7c3c2c41b1117928ca1cd0cd48c25c319c18e009804c007d1aab0967c0d0d4
-
-KEY: f3a7b8c2a39531d5fb3c97bc9224168aa835973f48243d6f046d00937ed428e5d672e22af26e734f0c24f989fe62621a
-NONCE: 65c61af60769672f0eeda005
-IN: 59667fceb2594e002c844a47d2b3935d2c99570b1639f0887fb082499e1d36f9699ff9ef53be3b4236136aa9e441abdc63dfe536e6fc9fa8f332baa1dad577ad
-AD: f79036742501f1ac19dbb2984e09cf5000bc4bc0424082376c307b8f1e5bf74dd29c802139d7ea93d55d336464
-CT: 9375a81f016c2dc59a8e99dc33fc0db7ef99ab2f9ade4b0ba000a614ff2bd13bfbee2d4a2338109c98c1147edca6023cea43570adc503da98379326ace89d796
-TAG: f563869420699dfa0aa84751526bd75af1473bd88311001e49230b09b8ef2797
-
-KEY: 27611a8f11cb57d08648ec816b5f3c45882dae394200cdfc803d1a52bb03f225206574ea63b63423da6972bf5a994332
-NONCE: a7f617fe7a52dd76ee443dff
-IN: d6ccb950515a4a2de7c3cf5a73b568f32fe30567bb22b3b46feb7ef07205d3215a3d689b96d4b9dbaac5a5bd6ecac6ba50314b19b37179fff2557c869950e162
-AD: 777282a98b2f262ed9456fed3610a2028bcc4433eb8f028597d3bfa220bdb0c04882de03a276d0191cd1a125270ce1630c1b94e2ec0021ce5c494d2e0bdb8745e6e94a387cbb31a0898965174bcff8bba105f94dbf080059b49dee71c3194fefe679ef6c00065154ea809293b088c0c3f2ed7824aac72319a4c4ad85ea990844
-CT: 41eacc31aa3c3a282ae7638d48fc7541d2f129e4cb3455df7e60259be9a814c8e1642ea826ac1ec7ed1fcc216a6624e79845521e7a8b16702566f27f7a7f3317
-TAG: b959992feb7005410f9ea6963525e3d9244f038731ffab8da8c4ebc72489f17a
-
-KEY: 0d9322713cd132c339c38ec7a75862860de304c70486b89b0f587095c66bfd1abe56f0b34f9ca0dac577fd4262616600
-NONCE: 3298d02dd4eb85a98cb935e3
-IN: 5dfedb1d168fe262d35f78d797560b2634f71d40f438c21cdcb8e73cf9884c11570554f55a6abd23d0e7775a9ab385ae6c9bbd67f08d1aec57347a8fad5a4b8c7b042b03c25facbffc76f0b1ce2e6c07d427eaebe71255d661ac8e8bfe8867e2d947d496ce2318a601d0beed02426311ca678d036deb3b4c65b1f89bd644a410
-AD: 
-CT: ff09fe27f12a87d5208bf246378ee0740e848262442b8b9c7670c8a73fe6732192cde43c1a1246743ed49e15ec63c87dc06eb3e0c92c1f286108b2c7e0754dcf1b9c3fc87efe3683289daabf2db71d8742061f93098788c3c6f26328b86e358507a03af296d2c29009562cad3763399e0e2b89ed440f756c16214c8ab7ddfb84
-TAG: 5076c80fc76c67d6e4f9b9d470cc184db62ea7da49cae44cb3ce9e46c2f2ca9e
-
-KEY: 2695671fe86f1658d8b01ec856fb4c9d09a0c51a1b994fc87a3f72bec12052537b7429f11f7eb4aef0b128302ec8f336
-NONCE: 9739e577595418c47b9c10b7
-IN: c723c39be334a0761db795076e81e3dd85e37a57258c7e0e10fe0f48dc31bd5e683430aa70531b7c8e3a904e49bec838e760d07afa9f86b2cf78ae90f612c4560632acb7ea2d89fb1fd5396d0337111c429cdba99c6a52e863e8603aac24a83302ebf86ae69a212cb938e12085cbf73a28f75e4422995a5ec8705b12d4aa8b6d
-AD: 31
-CT: 1569b20732ee6395e605217e1cb419ce57496ba6f6e889bdfa3c93575e969eb7a0410c7930b7ea146e88577376d84f0e824b62890eb84bfe768a1513a12c2958ad1835bc1eabe602cf40f7812c7dd7da955567242cd7512090fca685fdd7306bd98a908b09464961114abbdcd610c153637400a1f81825cfdf06505947fe54ee
-TAG: d07e14a62a32ef1933abc2127cc5bfc1e43bbca663e460409c6faa3a4ccf99f3
-
-KEY: 1785ef6e7016733dd1952b3268639f231e7afa973c0a3db8780b81084c67a1783200149a1ed849ca8b5c14c7b1798b4b
-NONCE: cdf48b73c3c8d8625e52fe11
-IN: 14002f17e056d7f5524537cee6c2061e2741c01a6f9a82e2cb1747887875860d51bebf8d9b63950a051f6b228ad7567227f8a45b9fa7c4ab47eab410125303defa7e3141bd9bc5bf4ed56550801ff3bfc2dfaaf499c192b1e18879b2f59e1230778132818df8f6ad8a3dce9a1d11c98075b8b4e560edd9b5ea180f0424ab3706
-AD: a35e86e22e9a3df65e4c08e5175b4216fa9895a1be6252de911cf98349841494617eefaa007759dad7f337
-CT: 99eae989435578cb57715a7457da31b807b8078a59c2332a0a866eee9da5188baed3f517b6808095f0067e9b4b91cc1424a464f0a09fc946adbe4135a17b0e8e545d2046f81cdfdb233aa3520797319c0884ccbade8235c32d195e7b802017f88ddd86fb630de19eb97f4bf91029c001fc8f1cd2189a8ee6c120e9f1682a8703
-TAG: 1848f0b163e7b0d270e2a0ced288ea6525697170aae15038f3dcbb4ea49ef843
-
-KEY: ba9aed2bfa90eaed9b27a697bb44c715c0209cae6b2c4ddffc684bcf07ab51b0e096dbcfa26c18fc24b63408317da567
-NONCE: 4b850d6bfa64520f1aa1e79e
-IN: 5bcc2ea4d729c84340c5ceb827f239578971c595e915f0bd9d49ed51d723f8d0e8362e69fd11466230bda0dad57ad724307edcc621ebde1e57fa91fee206d81d2bb6ead94b4a804f74b6cae979f66bdfa4ad93d107ccf114c59cd3d261aa6e2fc0dfbd0df5f7c18e80d0699cc1712abbefab5029e35549d2919d0f937d444051
-AD: f80c759062e9ed0ee597406aedbcda9a14261d66a9546f1c939d20cb1d0d0974fe7a9b33d8c93287a6a8d60a
-CT: dae4fc873d302c51e55910e67482bb80ac68e9bc6ef77cb3e57a31d85fe75f9071d0b64026ba16d0b68fa9c0b7e958cf7682bcd329c4174ea0e3f3f9d2e65d82aae1350a53ea7cdcf9ab848b85cd731751f0e2917628e5066f5b1ddebc7dbda5d2d37e46a7a7ee62bb49c4431af730f9cd3da4c1d0e5f8593d8c99803f781bee
-TAG: 58b42e9117fc8cc2ba5cff74b0d92e8b381a444fa837018b15e9514fc4319fb4
-
-KEY: 37235623acb0d650f905f106dc3bfe6fd83192e53056de8795ed8d20c6e58e5efd84584007ecb17de9e76b392e12fcd7
-NONCE: dc441f1c743a92c4b975c6b6
-IN: 960ceb8d80774bd88b7c5f17042ad2e4baac71b4021c548458cffcd9a049291cb0df93076c115b54f9af878745acebc6e8f04666d053b1ed980728043c4fe7f67b2bcb0341d8a4973ed126342f9add14279f8402cbbffcecfc847379dca8a68ba4f2f26141acfca7f3ef558dbaf04629f0f46e43246b19d875be452f14e7bf56
-AD: 32579218062560f15ff966932838460f99099782e79f1f8c41cd9f6eb59b4c2c3d2dae9cd199fe66d74c7a9940
-CT: 49ad8e24a31e90ab1f8dc37dc51dff0f93f1420e79eb108f90f800274a5aa573f64e274cd52f1dbfdee363e4f86e1457bfb8f87ce57aefd34c3a5a3a93db4ebde3f73a3b4c202c993903ab378ae71042ad238e94f400c7ac1891a9890b19d445eb1db60773a3ea165f7c4b2bb2071faaf588daebac7ce09ebfc88f4d9232d9ca
-TAG: 82f908b837a5768598982f860ecea16aee84427371c4de1f1314749b70ffc173
-
-KEY: e7fc36c9fe87a38f9bb4ca67723267e80e16bf39740eb1090234a473d68aed9c96fe2f96e539795eb042276aec5d7505
-NONCE: 83d768746d40dcd695e49ff4
-IN: e61f0e02a70249b62ec9a8fdbaf6622c9c6316599daff421f1b19815707b67587d196b7e1452c7d7609f108ea946675ac5d97ed215b92a451aa6a11717ab7819f84848151007f37e2cdc8aa99969c3d5652aeeb65fc21b621865f47f44eb2c528ee1142d11f513761a6bb2d169126503db5b263a410cadd2773ff931a032a885
-AD: 59114e9f21b380ae6068609ac36688e6aa7c2533cbfe07013ad1b6663bfa42e39f20e62b45c0faa256c1d33caa9f59b1e30d8502bb7148d051451b3d0265cb9fd0d82e4f4e0489ac606956762d8e7b70abd7eca413ddb708f119c342b3d0d5df673769d8df281656d909b68b6f6438edd60339fd84ff69918b6036ad12a0a588
-CT: 4f12807736c9ab32a2be2e00c9a0236394a8bcfcec6037e7582af462a73bf10aa73bd90e2bc24b97f7001ccf653574aea294bc7b30b77540f475e0e846ab78ffcfa1fef28058e540fea43d9017d4efa05c837611b2eacf0034f26cb7903eff7874973c6da7843892bfc676170a75f839e297dc7f04c74b40f4bda20a45b2a352
-TAG: 9b05aab44ba4d1451f14e087be626232ed11c4ed04081f0d4d47ab593fc619b1
-
diff --git a/src/crypto/cipher/test/aes_128_eax_test.txt b/src/crypto/cipher/test/aes_128_eax_test.txt
deleted file mode 100644
index 84fc4ae..0000000
--- a/src/crypto/cipher/test/aes_128_eax_test.txt
+++ /dev/null
@@ -1,233 +0,0 @@
-# Test vectors from
-# https://github.com/C2SP/wycheproof/blob/cd27d6419bedd83cbd24611ec54b6d4bfdb0cdca/testvectors/aes_eax_test.json
-
-AD: 6bfb914fd07eae6b
-CT:
-NONCE: 62ec67f9c3a4a407fcb2a8c49031a8b3
-KEY: 233952dee4d5ed5f9b9c6d6ff80ff478
-IN:
-TAG: e037830e8389f27b025a2d6527e79d01
-
-AD: fa3bfd4806eb53fa
-CT: 19dd
-NONCE: becaf043b0a23d843194ba972c66debd
-KEY: 91945d3f4dcbee0bf45ef52255f095a4
-IN: f7fb
-TAG: 5c4c9331049d0bdab0277408f67967e5
-
-AD: 234a3463c1264ac6
-CT: d851d5bae0
-NONCE: 70c3db4f0d26368400a10ed05d2bff5e
-KEY: 01f74ad64077f2e704c0f60ada3dd523
-IN: 1a47cb4933
-TAG: 3a59f238a23e39199dc9266626c40f80
-
-AD: 33cce2eabff5a79d
-CT: 632a9d131a
-NONCE: 8408dfff3c1a2b1292dc199e46b7d617
-KEY: d07cf6cbb7f313bdde66b727afd3c5e8
-IN: 481c9e39b1
-TAG: d4c168a4225d8e1ff755939974a7bede
-
-AD: aeb96eaebe2970e9
-CT: 071dfe16c675
-NONCE: fdb6b06676eedc5c61d74276e1f8e816
-KEY: 35b6d0580005bbc12b0587124557d2c2
-IN: 40d0c07da5e4
-TAG: cb0677e536f73afe6a14b74ee49844dd
-
-AD: d4482d1ca78dce0f
-CT: 835bb4f15d743e350e728414
-NONCE: 6eac5c93072d8e8513f750935e46da1b
-KEY: bd8e6e11475e60b268784c38c62feb22
-IN: 4de3b35c3fc039245bd1fb7d
-TAG: abb8644fd6ccb86947c5e10590210a4f
-
-AD: 65d2017990d62528
-CT: 02083e3979da014812f59f11d52630da30
-NONCE: 1a8c98dcd73d38393b2bf1569deefc19
-KEY: 7c77d6e813bed5ac98baa417477a2e7d
-IN: 8b0a79306c9ce7ed99dae4f87f8dd61636
-TAG: 137327d10649b0aa6e1c181db617d7f2
-
-AD: 54b9f04e6a09189a
-CT: 2ec47b2c4954a489afc7ba4897edcdae8cc3
-NONCE: dde59b97d722156d4d9aff2bc7559826
-KEY: 5fff20cafab119ca2fc73549e20f5b0d
-IN: 1bda122bce8a8dbaf1877d962b8592dd2d56
-TAG: 3b60450599bd02c96382902aef7f832a
-
-AD: 899a175897561d7e
-CT: 0de18fd0fdd91e7af19f1d8ee8733938b1e8
-NONCE: b781fcf2f75fa5a8de97a9ca48e522ec
-KEY: a4a4782bcffd3ec5e7ef6d8c34a56123
-IN: 6cf36720872b8513f6eab1a8a44438d5ef11
-TAG: e7f6d2231618102fdb7fe55ff1991700
-
-AD: 126735fcc320d25a
-CT: cb8920f87a6c75cff39627b56e3ed197c552d295a7
-NONCE: 22e7add93cfc6393c57ec0b3c17d6b44
-KEY: 8395fcf1e95bebd697bd010bc766aac3
-IN: ca40d7446e545ffaed3bd12a740a659ffbbb3ceab7
-TAG: cfc46afc253b4652b1af3795b124ab6e
-
-AD:
-CT: 3c441f32ce07822364d7a2990e50bb13d7b02a26969e4a937e5e9073b0d9c968
-NONCE: 3c8cc2970a008f75cc5beae2847258c2
-KEY: 000102030405060708090a0b0c0d0e0f
-IN: 0000000000000000000000000000000011111111111111111111111111111111
-TAG: db90bdb3da3d00afd0fc6a83551da95e
-
-AD:
-CT: d19ac59849026a91aa1b9aec29b11a202a4d739fd86c28e3ae3d588ea21d70c6
-NONCE: aef03d00598494e9fb03cd7d8b590866
-KEY: 000102030405060708090a0b0c0d0e0f
-IN: 0000000000000000000000000000000011111111111111111111111111111111
-TAG: c30f6cd9202074ed6e2a2a360eac8c47
-
-AD:
-CT: 2108558ac4b2c2d5cc66cea51d6210e046177a67631cd2dd8f09469733acb517
-NONCE: 55d12511c696a80d0514d1ffba49cada
-KEY: 000102030405060708090a0b0c0d0e0f
-IN: 0000000000000000000000000000000011111111111111111111111111111111
-TAG: fc355e87a267be3ae3e44c0bf3f99b2b
-
-AD:
-CT: 4d2c1524ca4baa4eefcce6b91b227ee83abaff8105dcafa2ab191f5df2575035
-NONCE: 79422ddd91c4eee2deaef1f968305304
-KEY: 000102030405060708090a0b0c0d0e0f
-IN: 0000000000000000000000000000000011111111111111111111111111111111
-TAG: e2c865ce2d7abdac024c6f991a848390
-
-AD:
-CT: 8eb01e62185d782eb9287a341a6862ac5257d6f9adc99ee0a24d9c22b3e9b38a
-NONCE: 0af5aa7a7676e28306306bcd9bf2003a
-KEY: 000102030405060708090a0b0c0d0e0f
-IN: 0000000000000000000000000000000011111111111111111111111111111111
-TAG: 39c339bc8a74c75e2c65c6119544d61e
-
-AD:
-CT: 94c5d2aca6dbbce8c24513a25e095c0e54a942860d327a222a815cc713b163b4
-NONCE: af5a03ae7edd73471bdcdfac5e194a60
-KEY: 000102030405060708090a0b0c0d0e0f
-IN: 0000000000000000000000000000000011111111111111111111111111111111
-TAG: f50b30304e45c9d411e8df4508a98612
-
-AD:
-CT: 3bb6173e3772d4b62eef37f9ef0781f360b6c74be3bf6b371067bc1b090d9d6622a1fbec6ac471b3349cd4277a101d40890fbf27dfdcd0b4e3781f9806daabb6
-NONCE: b37087680f0edd5a52228b8c7aaea664
-KEY: 000102030405060708090a0b0c0d0e0f
-IN: 00000000000000000000000000000000111111111111111111111111111111112222222222222222222222222222222233333333333333333333333333333333
-TAG: a0498745e59999ddc32d5b140241124e
-
-AD:
-CT: e9b0bb8857818ce3201c3690d21daa7f264fb8ee93cc7a4674ea2fc32bf182fb2a7e8ad51507ad4f31cefc2356fe7936a7f6e19f95e88fdbf17620916d3a6f3d01fc17d358672f777fd4099246e436e1
-NONCE: 4f802da62a384555a19bc2b382eb25af
-KEY: 000102030405060708090a0b0c0d0e0f
-IN: 0000000000000000000000000000000011111111111111111111111111111111222222222222222222222222222222223333333333333333333333333333333344444444444444444444444444444444
-TAG: 67910be744b8315ae0eb6124590c5d8b
-
-AD:
-CT:
-NONCE: fa294b129972f7fc5bbd5b96bba837c9
-KEY: b67b1a6efdd40d37080fbe8f8047aeb9
-IN:
-TAG: b14b64fb589899699570cc9160e39896
-
-AD:
-CT: 1d
-NONCE: 9477849d6ccdfca112d92e53fae4a7ca
-KEY: 209e6dbf2ad26a105445fc0207cd9e9a
-IN: 01
-TAG: 52a5f600fe5338026a7cb09c11640082
-
-AD:
-CT: d7b8a6b43d2e9f98c2b44ce5e3cfdb
-NONCE: 5171524568e81d97e8c4de4ba56c10a0
-KEY: a549442e35154032d07c8666006aa6a2
-IN: 1182e93596cac5608946400bc73f3a
-TAG: 1bdd52fc987daf0ee19234c905ea645f
-
-AD:
-CT: 73e5c6f0e703a52d02f7f7faeb1b77fd4fd0cb421eaf
-NONCE: 0e6ec879b02c6f516976e35898428da7
-KEY: 958bcdb66a3952b53701582a68a0e474
-IN: 140415823ecc8932a058384b738ea6ea6d4dfe3bbeee
-TAG: 6c154a85968edd74776575a4450bd897
-
-AD: df10d0d212242450
-CT: 936b69b6c955adfd15539b9be4989cb6
-NONCE: 2e35901ae7d491eecc8838fedd631405
-KEY: 965b757ba5018a8d66edc78e0ceee86b
-IN: 36e57a763958b02cea9d6a676ebce81f
-TAG: ee15a1454e88faad8e48a8df2983b425
-
-AD: 7c571d2fbb5f62523c0eb338bef9a9
-CT: 67caac35443a3138d2cb811f0ce04dd2
-NONCE: 7f2985296315507aa4c0a93d5c12bd77
-KEY: 88d02033781c7b4164711a05420f256e
-IN: d98adc03d9d582732eb07df23d7b9f74
-TAG: b7968e0b5640e3b236569653208b9deb
-
-AD: 16843c091d43b0a191d0c73d15601be9
-CT: 200ac451fbeb0f6151d61583a43b7343
-NONCE: bf47afdfd492137a24236bc36797a88e
-KEY: 515840cf67d2e40eb65e54a24c72cbf2
-IN: c834588cb6daf9f06dd23519f4be9f56
-TAG: 2ad43e4caa51983a9d4d24481bf4c839
-
-AD: 904d86f133cec15a0c3caf14d7e029c82a07705a23f0d080
-CT: 27c6e9a653c5253ca1c5673f97b9b33e
-NONCE: d02bf0763a9fefbf70c33aee1e9da1d6
-KEY: 2e4492d444e5b6f4cec8c2d3615ac858
-IN: 9e62d6511b0bda7dd7740b614d97bae0
-TAG: 2d581271e1fa9e3686136caa8f4d6c8e
-
-AD:
-CT:
-NONCE: 438a547a94ea88dce46c6c85
-KEY: bedcfb5a011ebc84600fcb296c15af0d
-IN:
-TAG: 9607977cd7556b1dfedf0c73a35a5197
-
-AD:
-CT: 98
-NONCE: b30c084727ad1c592ac21d12
-KEY: 384ea416ac3c2f51a76e7d8226346d4e
-IN: 35
-TAG: f5d7930952e275beecb998d804c241f0
-
-AD:
-CT: 7fd2878318ab0f2b
-NONCE: b5e006ded553110e6dc56529
-KEY: cae31cd9f55526eb038241fc44cac1e5
-IN: d10989f2c52e94ad
-TAG: ab184ffde523565529a9be111b0c2d6d
-
-AD:
-CT: e928622d1e6e798d8665ae732c4c1e5f
-NONCE: 0e1666f2dc652f7708fb8f0d
-KEY: ffdf4228361ea1f8165852136b3480f7
-IN: 25b12e28ac0ef6ead0226a3b2288c800
-TAG: 33ab476757ffa42c0f6c276391a46eac
-
-AD:
-CT: efd299a43b25ce8cc31b80e5489ef9ce7356ececa91bc7bd
-NONCE: fbbc04fd6e025b7193eb57f6
-KEY: a8ee11b26d7ceb7f17eaa1e4b83a2cf6
-IN: c08f085e6a9e0ef3636280c11ecfadf0c1e72919ffc17eaf
-TAG: 3c33fc0bcd256b0a8a34ecc8b01e52a6
-
-AD:
-CT: 356bca9cddd39efd393278e43b4e80266071608036e81d6e924d4e4800fb27
-NONCE: 42b51388f6f9047a2a994575
-KEY: 1655bf662f7ee685615701fd3779d628
-IN: 857b2f6cd608c9cea0246c740caa4ca19c5f1c7d71cb9273f0d8c8bb65b70a
-TAG: 71f02ba7c6cf3a579e56245025420071
-
-AD:
-CT: 9d911b934a68ce7db322410028bd31bd81bcbdadf26f15676be472bc3821fb68e4728db76930bc0958aeed6faf3e333da7af3d48c480b424ff3d6600cc56a507c8ad
-NONCE: 064b3cfbe04d94d4d5c19b30
-KEY: 42e38abef2dd7573248c5aefb3ecca54
-IN: 2c763b9ec84903bcbb8aec15e678a3a955e4870edbf62d9d3c81c4f9ed6154877875779ca33cce8f73a55ca7af1d8d817fc6baac00ef962c5a0da339ce81427a3d59
-TAG: d679eb9e5d744b62d91dcf6fb6284f41
\ No newline at end of file
diff --git a/src/crypto/cipher/test/aes_128_gcm_randnonce_tests.txt b/src/crypto/cipher/test/aes_128_gcm_randnonce_tests.txt
deleted file mode 100644
index e28fdb6..0000000
--- a/src/crypto/cipher/test/aes_128_gcm_randnonce_tests.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-# These tests are versions of the tests from the corresponding AES-GCM test
-# file, but with the nonce appended to the tag.
-
-KEY: d480429666d48b400633921c5407d1d1
-NONCE:
-IN:
-AD:
-CT:
-TAG: 7d7daf44850921a34e636b01adeb104f3388c676dc754acfa66e172a
-
-KEY: 3881e7be1bb3bbcaff20bdb78e5d1b67
-NONCE:
-IN: 0a2714aa7d
-AD: c60c64bbf7
-CT: 5626f96ecb
-TAG: ff4c4f1d92b0abb1d0820833d9eb83c7dcf5b7ae2d7552e2297fcfa9
-
-KEY: ea4f6f3c2fed2b9dd9708c2e721ae00f
-NONCE:
-IN: 8d6c08446cb10d9a2075
-AD: 5c65d4f261d2c54ffe6a
-CT: 0f51f7a83c5b5aa796b9
-TAG: 70259cddfe8f9a15a5c5eb485af578fbf975809ddb5172382745634f
-
-KEY: 31d93fd51c2d6450cf35d9edd71413f4
-NONCE:
-IN: e78eba6c58f93cc2374932fc21e54f695f2daeda3bd1e0121a77d178e3bf5c0e824a99042e8f2522df829d014e4d35a756780e8c07f53ca8fb78db6fb76754ad461665051c4572b2514804d0a9cbae1a1a013b796565eee13a7832ab8834b8406b1185332552d38754dde2344ff4f6e4823390964ba2dc43de136f2235b1d919e0f4ad60813d30f0ac1dad35abe3bee9479337c7b430841d2c722f12aeaf931cedd8a82053f697fff8d07f0af6013da7da58a5dfcf45561943e7ccdfd8d11fbe96a68a5a27982e47346500c0284caf8e6b63c6621e80503a7365d6693dc9a249093dc45221cfd88562e25910034c2c123e44e3b09d8a8a15547285d2596b98c7a0ee9d10b2cdb032d08a6caee1212420b6854181a583c15e046aa202dd
-AD: a4fdd42aad5475ffc1b122170024486406033c8640233cd9b23c286fdd40c5b69eee39cfbf965f7a10c73663f9804e6821c4f62980f8362a580bab446325b009a004b60b1dbd12566b55b42e58d8037d86c1050cd6ecaaac2fb0ef616a15bc5bcd8252fd459165795c500bbb2fb1476e5cfef9549db733be65bde391c810d099e3745a2cc7a94debe1f4ff6653b338123ef7d2f9a602bc9a4bbe757a63f932a802014f2f06c6688faf14332a355b1025f33687124399f55b6a5adb4864727ec6c5334c41d78d1463400925f6c29c0f611f35c9640045a740dad5b4f0dcb632e7f9a3478b526aa9f97cd9f8d3ad094b7922890e7b6d9c67fcc4f747d04ddcd115fba0a8f0433c6fb1bf6011a9cd153f866c76b26d427a25aebc60d10540
-CT: 8d668fb50efda82552aeb5d075ff3977c37929d73f6639289e7c6da8c89c664df80b2387e788d12398d62d3c0ed2f9f918010d41021c464d54f016c4e10e85e29ba3a45793df2ebd6cdf30045363434387bb0d20439f4986e6eb7ae9fd85fe776f7b8035025624c2413ca8491cc6e79fe901b9c40ff3a0e37a7c7e88b56de4fee65861865162821e046846d253982e4ecd17bd26214b0923a4297d4ed9423395d856940829ca5ee74488c3b4d8aa3c5ceade17d8a3f2e45d3ba91360ac1c76d6a29f8243bf49c1d75aa41ba239fa6f3b123e198ba799e3b70c674607c5371894800954eda0264b3b82606433f71371dabc5f1fb3d703232533662920a241f613c38d16b0bad24f4aa3b336af89cdcd2f371e1bed7aaa47c56d17100a01
-TAG: 594ee5c93636cfb5fde940e3d561440a28f6f0c288c9f92e80252e1e
diff --git a/src/crypto/cipher/test/aes_128_gcm_siv_tests.txt b/src/crypto/cipher/test/aes_128_gcm_siv_tests.txt
deleted file mode 100644
index 38655fd..0000000
--- a/src/crypto/cipher/test/aes_128_gcm_siv_tests.txt
+++ /dev/null
@@ -1,630 +0,0 @@
-# This is the example from
-# https://www.rfc-editor.org/rfc/rfc8452.html#section-8
-
-KEY: ee8e1ed9ff2540ae8f2ba9f50bc2f27c
-NONCE: 752abad3e0afb5f434dc4310
-IN: "Hello world"
-AD: "example"
-CT: 5d349ead175ef6b1def6fd
-TAG: 4fbcdeb7e4793f4a1d7e4faa70100af1
-
-# Test vectors from
-# https://www.rfc-editor.org/rfc/rfc8452.html#appendix-C
-
-KEY: 01000000000000000000000000000000
-NONCE: 030000000000000000000000
-IN: 
-AD: 
-CT: 
-TAG: dc20e2d83f25705bb49e439eca56de25
-
-KEY: 01000000000000000000000000000000
-NONCE: 030000000000000000000000
-IN: 0100000000000000
-AD: 
-CT: b5d839330ac7b786
-TAG: 578782fff6013b815b287c22493a364c
-
-KEY: 01000000000000000000000000000000
-NONCE: 030000000000000000000000
-IN: 010000000000000000000000
-AD: 
-CT: 7323ea61d05932260047d942
-TAG: a4978db357391a0bc4fdec8b0d106639
-
-KEY: 01000000000000000000000000000000
-NONCE: 030000000000000000000000
-IN: 01000000000000000000000000000000
-AD: 
-CT: 743f7c8077ab25f8624e2e948579cf77
-TAG: 303aaf90f6fe21199c6068577437a0c4
-
-KEY: 01000000000000000000000000000000
-NONCE: 030000000000000000000000
-IN: 0100000000000000000000000000000002000000000000000000000000000000
-AD: 
-CT: 84e07e62ba83a6585417245d7ec413a9fe427d6315c09b57ce45f2e3936a9445
-TAG: 1a8e45dcd4578c667cd86847bf6155ff
-
-KEY: 01000000000000000000000000000000
-NONCE: 030000000000000000000000
-IN: 010000000000000000000000000000000200000000000000000000000000000003000000000000000000000000000000
-AD: 
-CT: 3fd24ce1f5a67b75bf2351f181a475c7b800a5b4d3dcf70106b1eea82fa1d64df42bf7226122fa92e17a40eeaac1201b
-TAG: 5e6e311dbf395d35b0fe39c2714388f8
-
-KEY: 01000000000000000000000000000000
-NONCE: 030000000000000000000000
-IN: 01000000000000000000000000000000020000000000000000000000000000000300000000000000000000000000000004000000000000000000000000000000
-AD: 
-CT: 2433668f1058190f6d43e360f4f35cd8e475127cfca7028ea8ab5c20f7ab2af02516a2bdcbc08d521be37ff28c152bba36697f25b4cd169c6590d1dd39566d3f
-TAG: 8a263dd317aa88d56bdf3936dba75bb8
-
-KEY: 01000000000000000000000000000000
-NONCE: 030000000000000000000000
-IN: 0200000000000000
-AD: 01
-CT: 1e6daba35669f427
-TAG: 3b0a1a2560969cdf790d99759abd1508
-
-KEY: 01000000000000000000000000000000
-NONCE: 030000000000000000000000
-IN: 020000000000000000000000
-AD: 01
-CT: 296c7889fd99f41917f44620
-TAG: 08299c5102745aaa3a0c469fad9e075a
-
-KEY: 01000000000000000000000000000000
-NONCE: 030000000000000000000000
-IN: 02000000000000000000000000000000
-AD: 01
-CT: e2b0c5da79a901c1745f700525cb335b
-TAG: 8f8936ec039e4e4bb97ebd8c4457441f
-
-KEY: 01000000000000000000000000000000
-NONCE: 030000000000000000000000
-IN: 0200000000000000000000000000000003000000000000000000000000000000
-AD: 01
-CT: 620048ef3c1e73e57e02bb8562c416a319e73e4caac8e96a1ecb2933145a1d71
-TAG: e6af6a7f87287da059a71684ed3498e1
-
-KEY: 01000000000000000000000000000000
-NONCE: 030000000000000000000000
-IN: 020000000000000000000000000000000300000000000000000000000000000004000000000000000000000000000000
-AD: 01
-CT: 50c8303ea93925d64090d07bd109dfd9515a5a33431019c17d93465999a8b0053201d723120a8562b838cdff25bf9d1e
-TAG: 6a8cc3865f76897c2e4b245cf31c51f2
-
-KEY: 01000000000000000000000000000000
-NONCE: 030000000000000000000000
-IN: 02000000000000000000000000000000030000000000000000000000000000000400000000000000000000000000000005000000000000000000000000000000
-AD: 01
-CT: 2f5c64059db55ee0fb847ed513003746aca4e61c711b5de2e7a77ffd02da42feec601910d3467bb8b36ebbaebce5fba30d36c95f48a3e7980f0e7ac299332a80
-TAG: cdc46ae475563de037001ef84ae21744
-
-KEY: 01000000000000000000000000000000
-NONCE: 030000000000000000000000
-IN: 02000000
-AD: 010000000000000000000000
-CT: a8fe3e87
-TAG: 07eb1f84fb28f8cb73de8e99e2f48a14
-
-KEY: 01000000000000000000000000000000
-NONCE: 030000000000000000000000
-IN: 0300000000000000000000000000000004000000
-AD: 010000000000000000000000000000000200
-CT: 6bb0fecf5ded9b77f902c7d5da236a4391dd0297
-TAG: 24afc9805e976f451e6d87f6fe106514
-
-KEY: 01000000000000000000000000000000
-NONCE: 030000000000000000000000
-IN: 030000000000000000000000000000000400
-AD: 0100000000000000000000000000000002000000
-CT: 44d0aaf6fb2f1f34add5e8064e83e12a2ada
-TAG: bff9b2ef00fb47920cc72a0c0f13b9fd
-
-KEY: e66021d5eb8e4f4066d4adb9c33560e4
-NONCE: f46e44bb3da0015c94f70887
-IN: 
-AD: 
-CT: 
-TAG: a4194b79071b01a87d65f706e3949578
-
-KEY: 36864200e0eaf5284d884a0e77d31646
-NONCE: bae8e37fc83441b16034566b
-IN: 7a806c
-AD: 46bb91c3c5
-CT: af60eb
-TAG: 711bd85bc1e4d3e0a462e074eea428a8
-
-KEY: aedb64a6c590bc84d1a5e269e4b47801
-NONCE: afc0577e34699b9e671fdd4f
-IN: bdc66f146545
-AD: fc880c94a95198874296
-CT: bb93a3e34d3c
-TAG: d6a9c45545cfc11f03ad743dba20f966
-
-KEY: d5cc1fd161320b6920ce07787f86743b
-NONCE: 275d1ab32f6d1f0434d8848c
-IN: 1177441f195495860f
-AD: 046787f3ea22c127aaf195d1894728
-CT: 4f37281f7ad12949d0
-TAG: 1d02fd0cd174c84fc5dae2f60f52fd2b
-
-KEY: b3fed1473c528b8426a582995929a149
-NONCE: 9e9ad8780c8d63d0ab4149c0
-IN: 9f572c614b4745914474e7c7
-AD: c9882e5386fd9f92ec489c8fde2be2cf97e74e93
-CT: f54673c5ddf710c745641c8b
-TAG: c1dc2f871fb7561da1286e655e24b7b0
-
-KEY: 2d4ed87da44102952ef94b02b805249b
-NONCE: ac80e6f61455bfac8308a2d4
-IN: 0d8c8451178082355c9e940fea2f58
-AD: 2950a70d5a1db2316fd568378da107b52b0da55210cc1c1b0a
-CT: c9ff545e07b88a015f05b274540aa1
-TAG: 83b3449b9f39552de99dc214a1190b0b
-
-KEY: bde3b2f204d1e9f8b06bc47f9745b3d1
-NONCE: ae06556fb6aa7890bebc18fe
-IN: 6b3db4da3d57aa94842b9803a96e07fb6de7
-AD: 1860f762ebfbd08284e421702de0de18baa9c9596291b08466f37de21c7f
-CT: 6298b296e24e8cc35dce0bed484b7f30d580
-TAG: 3e377094f04709f64d7b985310a4db84
-
-KEY: f901cfe8a69615a93fdf7a98cad48179
-NONCE: 6245709fb18853f68d833640
-IN: e42a3c02c25b64869e146d7b233987bddfc240871d
-AD: 7576f7028ec6eb5ea7e298342a94d4b202b370ef9768ec6561c4fe6b7e7296fa859c21
-CT: 391cc328d484a4f46406181bcd62efd9b3ee197d05
-TAG: 2d15506c84a9edd65e13e9d24a2a6e70
-
-# Random vectors generated by the reference code.
-
-KEY: e66021d5eb8e4f4066d4adb9c33560e4
-NONCE: f46e44bb3da0015c94f70887
-IN: 
-AD: 
-CT: 
-TAG: a4194b79071b01a87d65f706e3949578
-
-KEY: 36864200e0eaf5284d884a0e77d31646
-NONCE: bae8e37fc83441b16034566b
-IN: 7a806c46bb91c3c5aedb64a6c590bc84d1
-AD: a5e269e4b47801afc0
-CT: 8092e6d6d729f5ee7e808d77f3b7a89647
-TAG: dec23ae31e3e97bb364fa18ad85cae0b
-
-KEY: 577e34699b9e671fdd4fbdc66f146545
-NONCE: fc880c94a95198874296d5cc
-IN: 1fd161320b6920ce07787f86743b275d1ab32f6d1f0434d8848c1177441f19549586
-AD: 0f046787f3ea22c127aaf195d1894728b3fe
-CT: 7520668ef1b845aabf245e66ca687ca7c5b4f00de71afea392cda124893746ddd4e6
-TAG: db5ad3b398513fe5c8d868e68becd5a8
-
-KEY: d1473c528b8426a582995929a1499e9a
-NONCE: d8780c8d63d0ab4149c09f57
-IN: 2c614b4745914474e7c7c9882e5386fd9f92ec489c8fde2be2cf97e74e932d4ed87da44102952ef94b02b805249bac80e6f614
-AD: 55bfac8308a2d40d8c8451178082355c9e940fea2f582950a70d5a
-CT: bdbec524ca37355074899f01b7247b1abc24565b997e000f231f0664be655d8cb75f18112cfaa722e1b2e261710036ff919014
-TAG: 45b9ece29df0dd93941f9454404c8d87
-
-KEY: 1db2316fd568378da107b52b0da55210
-NONCE: cc1c1b0abde3b2f204d1e9f8
-IN: b06bc47f9745b3d1ae06556fb6aa7890bebc18fe6b3db4da3d57aa94842b9803a96e07fb6de71860f762ebfbd08284e421702de0de18baa9c9596291b08466f37de21c7f
-AD: f901cfe8a69615a93fdf7a98cad481796245709fb18853f68d833640e42a3c02c25b6486
-CT: d75a5a40ae0ac4343f1a52ee16108332b3563616c207c2b22be277a219e497b7e5bbd5bdecaed87a5216e3e49149ac50a7959957264c222577a07c73fc81f0e579a0fa93
-TAG: b70c26c56e34c7740824f9dfcb8ae6e4
-
-KEY: 9e146d7b233987bddfc240871d7576f7
-NONCE: 028ec6eb5ea7e298342a94d4
-IN: b202b370ef9768ec6561c4fe6b7e7296fa859c2159058b1f0fe91433a5bdc20e214eab7fecef4454a10ef0657df21ac73c535de192eaed3822a2fbbe2ca9dfc88255e14a661b8aa82cc54236093bbc23688089e555
-AD: 40db1872504e1cced532ce4159b035277d4dfbb7db62968b13cd4eec734320ccc9d9bbbb19cb81b2af4ecbc3e7
-CT: 23dea4fb871ab1df6cfb674d2e7efbc969033a11d694c6580aa3e780e4d1db5f1145924b974ce98ea041ecca53c36207fa644b0ae789965084d1ef845cae33aff734113b3eb4d9f1863b780b0f97fb5e3c5ea991cf
-TAG: 81da1dfc98517d4cee3ee885a266e814
-
-KEY: 2834321f7aa0f70b7282b4f33df23f16
-NONCE: 7541ac15c8417abaf17a282a
-IN: c7a57252ff224ae7911a905b8c699b20e40c1e9569a6b2aa0232d4b10bb6f20406135861c19795b95f9597f9b72c20931c41164f1b469b0901f2b5da3a956a6e278c940e82593eb58f56f6d3681fb00dedf7f612c4cb3193b73ab35f9a5a9cc8d13aa27ff1de
-AD: a3b2a7d832ed8ab959d82ee795df8e1ef530cc6fd9a1f10543b44c49383921d74fe0c71d50da4adb9e9c7e5491a488ceb5c384ebafad
-CT: 06d3e558b2f7f8e225d76a41a11122aa29eef02c226616f5264c9c1b821748a8115dd4868dfeacc5d167ceedc824f1f7136e7d7fae783bad83dec468c98747524fc2fcd7b86cbfd1c07078fd1b4b9caaae970c729ee3f2ecfebf048c5aba174fc4eab117bacf
-TAG: 5ece142ce1074a09ab8ce810222a471d
-
-KEY: f0f484fae982019a8ea22efd1358adf7
-NONCE: ad4f5fa0d2acd2f1ee095cdf
-IN: c13310241243fa53b8c2610d1924b1d55cb6d9cb6a5b98a72127255967b8ff23623c5453e61cecf9e624e5c803250c382481d3c10febfa54d03894ba8f9ed72637fcf5631f7b7312cc74e6ff63ecb240349a575f2cd817f2afbaaf21815bf08ac1e8f87520244b4a3fc492c7120296607ef64d0adb4c74
-AD: b73839e13455fd91ddf7f81d460034b9c41eaf0cc6040a84e17e6108372f1ca50656793554ea1d05181310711d0e60d4d556b2bedb24d7b622c01fe8025119
-CT: 90046c5ca4a6db850c5cddb14227b5902257e7ed8bc55f85ca24f51558f95037a0567d485b7606d2ec1802de069926e4f69e5ade9453080f84c045438d890290ed69b5e140788d07ed3d38b067900c222ad55b298e240590cb816d90a43ec52203f11ff9496b3dc32d7ac316ac8465496e41b4be5200dd
-TAG: 76ae0503f7b43b1d2db24817f2b61ee7
-
-KEY: ae0c8a20b679dc40c9908f88fecfafd6
-NONCE: 88b0ebec6a2ac13421012874
-IN: c80685c481b41323a1724ea96c1df644a595e8cc73955e6f661e0fa30737d78e7cec11629b8f1fa4bbd8e8e655f50019859514dbc4cbcf944f95084e45337d9d9d8972bd8da92b4eb5a75c0b284305601de859f8d1fac6d6b3fdd42210fdcf696119e436006a5a863859d5b70806197fdb9f0da3e4c31b0c7545809808bf7683757cd11b9d0f8621
-AD: 664df31eb95b5e17567d680b1a26980772e8ad3e9b2e2de537414368c4f97adff1408d36c1dfee65b78375c7361c91452e7d463338474a400ef9efcaa648e93f
-CT: f729ca77733cca181ba8801e001924e20a1d164cc4440a6217a1178dd6b1210837367cf84aa41f92f4123d6740910586f819389d5c750ab15768aed1b163bde5b1fe8862d1621b11485b47182d32bd304ddbf275524c4ece4cfb1361db53dd63e21ac62bb54a77bb5063c869b5f5de1f1b4356845aac79ee6f66d21ff271e02e8bbbae1372b4b8ff
-TAG: 52856b3369ecbb7201b1b0f75872e5e2
-
-KEY: 38f8784a1598bca461211195d7844de5
-NONCE: 6b91cccc96d89e6471bca6b7
-IN: 374aa5ec4b2f5fba66c17a435970411f2af3d6e33c0d094f74fcb77beb6cbbac1f3a8a19f69ca087f94a5b80d5e3692e0d10ec34aa67269c824b382d6238bcfaaed586177b852f816c31e9966744188f02647d881990d98c3eabd477557a739262bb3f682f64d2208faf98097586053a32cbf37e78413a2d89613a81966e8d654cac0aa34107947a036f403bda53e74bc524e7bc2d2c51dc42
-AD: 6b38c308cc574839129e5e6251f41dec9cff7ccf256c38e4994e15ca976d3185ae17030ad3751e56367f86886acc32e27fe04d0b89cc89b0206f281aa2d80f9be19928dabf07417e76
-CT: 350bc8baf35cad823df06eadbb0e30e1e4b5bb8171d14c330e8c488f1076d94b8cb7baa3268a5bf164e23563180b9793ed06bb80079288cd348eeaa8eb33cf31ccf89dec998408baae4c3a7b3d3bd14aa76e99d645da0fba0c29a7ea4baeed741de3a5df5ff4044d9b057c4f3ef1825dd0a47aa0b5e92cfe0321c07333479dc86bed7b7b91e6ef368401392d973404e2914b7d2cb49448c55e
-TAG: c974e989ae2b86e92c5da9b0c9b068e0
-
-KEY: 59b17f09c56d170ed1ef10d2fadf01e0
-NONCE: c78473d06a1685ef0bb112e4
-IN: ec7e6ce0cbc601fc8a2dd64045c8fada4a28c0c6f0ec98542e365279d00ffdf5e2eae3b663c4b79342f2f265db30a86d6e1b325318d7f7a622b36e746875b71165defd5ca1afc0a92db6ef4fb9e20b81018a5293899f1e0d06b18a2e65f7616638f79a0db3f2cfdcc0eac2ee1e2e454958e2e6d214a20ad13156f97d0f2cf4276b09f5945c11f6b20b7bede26d6c2f0e5cf2786eea66e18d6ece02156f9233bdfc57c75b1a8a8b1f4ab8
-AD: 5be5a4a089f0ac762060a336aa502f5a1df1e0a647fb9d5d932dc0654e0725122f6a567681a7d1cb7625ed0404d540d8b3145c911280d2a0ff9d1c53e27677be0436faeb39009fe5751c0b37c7a5f1137a26
-CT: 6b07754b096556462756de94e5941610f1bfd93e6222899516e00eb1830f557d6f629bc61abe0c247ab6aa0f4f816f79544ceb034b5d9e86ab8679ad67f6dbef521f6180a07b0bbbcf174cd9234848f18b8ebba7d6ae3d607e027cb220c7582eb6d496a980ae3883fab88a1dd9e5312842450fcf68640546b49c24a3ffc0c8c4f539e8f9a34a3bbff44b1bb4cdb339d8879fa4e0c2145954e34fbede7483d25a0494c1b9e5b1f70aee7e
-TAG: 064c9d25f8795d8151b33f9d32d3ac6d
-
-KEY: 995577faa109071bee1c87d5e6772ca5
-NONCE: 5fdec02348a625b49c3c881a
-IN: ab162f20ba0b834e8159d9bf20ee0c5d14da0221961c4fc7d9b44c7822f32298d30775cf974172ebfdb36cfb2881ccb15e5f69ed27880b920f4a092815357e03d982f75590af08b447f0f8466b031ed2409e9f5eb479affd9e18017a369486914c63a7494168d91df157f5e56fbc4ab6ee5a8f3af1fbe1bf9324338a1f4acad45fc7137676797c89620b15feb8512544771f280f322cbaac9c4d7cfb4c326824825ba5b5f5190fcde0d399ef1f52b82abb5a8b1e5f2eea2c79702d
-AD: ec4cfbee3d1f5cc11e085d2254f8b37f8030bd285d6aa1cc53868d18ecfdd963153485dce5a3e3e8cb0a3cf8074571f7a2e9e841229466463f506a2bc90f2d6413128efee043e01eccb930fbc002563510e499457161083ed7997e
-CT: 0610980d938c2f2619bb8b4408156fb53f595d857feae649a6700af296d0411cbb80a6c0b7e2447cc54c3bd3bcfae38b7bb10fa5b91e25686d4482b14a2b62d386175f9f247e48fc3b2215b2da1c065bb00f9f59e8afafc9ef205f5245d27085021f41b9e40c00abaea48286fd914e558f822659207e965855eabf52723148d84b0a2692c48d76f30f3cb530b1beb58ffc4824517cb6772e957bd56394c1d8b70c9fa2b70a670f3fe36d8802b2043905e469b558575c75012901dc
-TAG: cb51baaa4672b8ae9745ecee08784d3b
-
-KEY: 58ebf03ce7ed2f8d5487936311922884
-NONCE: bfd31cf828f3d0ce78f3c698
-IN: 1932268108a369048cdc0a75c062c0ed02e27bbd11754e621ff67c511ed98c6fadc3e95e7100644ebe1aa147a7e99f25ce5c2edb8ab6446749441027a211b8d04a6247299dfea9d75eab257a625aeb51f74e0b47b302fb5c0475ab23e99f4d93ecf07694497ff6b27c9848805af93a5615bc71486b26fc9da67cf60c8d3a396bc0164985fab2c64bbaa4dd0fdc22c9d9e433e8c70dcdeeebf230c7a3cb3e5d0d48573a64b068daf90f56b15579767ecdd420c0858fabe23abc0b313b97a9c1ceddcb59d5322e47a85cc58e75
-AD: 3f00d6f0d032d4c5110c8f22e98895279a30a86da0ef71cea6ef2738fe3e747ee54d2e96e3afb8916281f6369ab1a397ca0a18c6c0e9a0c4edeaa4190ce6422bd116ac254a12235eb66fb5cc7ef55b721d3d2db4c67c38bbbb0bcac9234ea7d733f200e6
-CT: b741fd48fa7634435db2cb05392004d0b588bc7e9ddf79526706e575415c8b3d48a606c5f155130deb77ec7aff93719396797bf6628531d9d061727bcea2b348060b64122cd1a94f999ad1f681847e57c05da0deabd2fe010212dc60ec980ed0ba78ee9160b3776ae9174c6f8b7231d6754a4143c8af129411063315c6517134ca26d5a94a2e8c6e8b7ad9b8e78b694d5251deb34dabc455dd9f2a2b3fb6f67222de61e917a645d366462d6d94cd265f919f237f06f1986fac17bfaf3a97c24b99af884d0fca5d3307caf9bd
-TAG: 35777ae50d32c572cb0cd778cbaf55e1
-
-KEY: b86fc55f4abb9b65ee1897c262533ccc
-NONCE: d118b0f493c849a7aa7f35d2
-IN: 43f9438f1858da62bdd03fd5a8c7b01d8097d7ce319a41f80104968a46599e9a3289a29a16b245877898f345f92fa70d3e613c38e6e4ebbf0bcb64c1c41f8b83ec8e9f159d4b830d9a1b79f2ad90db067856eb8621e52ab3060e8d72dfe782b62364c163fa00b49aa6fbe4210fb7208c642b7a6735b1a8b2f1dbc4b3d4952985ef207a3eb0a07b1341700762e9f9d1c3438fc6633da2fbade15844cb1813d258aa5bfa4ac129d693792a89622a0c686f05d87019a266f91387d96bf2baae0262782b9c23162f5271cfa3144265deefe2c569e82911e842e5c9ae8fb79b
-AD: ecf42c3afe389acfdc9a34bec7b45705ba68e205b83b33f50b7852fbb7f4ae5dfdfdfb3cfee8a03c96a036388aa8f7809bd47eaa073f92905d0d5f199d466cc0ebd9bceb207f4209bf9925c6109973194742dc8d813f3cb212bbd8d92d7eef645fb0f8245811876dee5f241763
-CT: 87454e6cefc24ba38f01bb791333dd0006cfce165a4247833b182efcdb484b0818aa80f70f29d0ec093455344b8f169262f17be2d1635293bdcca90e21f2c210146f90398f44b35e3f2203c7b5bfecdbd973b568d8ed8444d43cba08d44984a295f62c174ca9ca69c173bb7c43f103ff53a886284af46fde5cbe07b391f9c0b82eec218faecb43dc75372478f2ee1bb267602672a4ff5989ec7251034dd2cfb49677fc82c8b209820be1ed2c429a0491beedbe8c1fc78bd62590ba71fd5da363d6da000e8b7e5bae223c0cf8397d3b5ce7141e8b301ea5a737ae480dc9
-TAG: ad696ab700dd5b71d79f4f6f69034185
-
-KEY: edaf7d79c1b83d973f9ba3b29a9b9408
-NONCE: 418f73743ff0546f0d929001
-IN: 0cf3a665c443b85255759ec6248021e4b6eb825c398b5af7b5257efb7afc481abc20d90249bed5b30d44f725c78ad0ce2821f86838874dceb6b6207ad6fa34579126de720ce34bdfd2058d92b8bbbb3f1bec607de3f0a028d8f6e13d0d4d2d3861e1a26d79cb68d3fef68127e8458eb599915022da751e271cd047cc712fae5b0459ae7815a24f4edf806889fc462c83181111f4de5bbb7e66a701460f508eaf73798c3ca9c08cc1a046472f4b18c69b7ed249a96f9bfa05a276499a5f499c586027c64ad6a68dcb52a50aa6d1b1d4d202e6f184f01daa08fbd643523f4f73ae6b8d764a7f567087a5fec5ad1ee3
-AD: e4be5b677b87109e69eae9a635ac2ea185ba08ebce3ba4be06d53b2da081c5030f5a746fea7bbdda340e10eccd47238340b9244b9442c0efae7644cff53c7abd8445163e891cf30bc8e26eea01f0c461b4796c2106e1ffdfdd1bac29f7d3c72c8ca7f625008d8d333d2a2092c08ef83c8002ed90e2ad
-CT: 9372586624f9a52a91e7ce12f380ca13840f11fad8d9edf10c869042c29514515673b3dfcfe956e8d3550baae1815bb4cd41ed27c7485c723354e557d18119b27431d7527f0d84c6e76baf9afa35a215624c339ad888f27c338240e603b232cd247e77eb1475adcb87d0443265ac0de45b16c67fdab07a0c0dd203d97ac2e19248492c561912e9087cd5fb73445695b43b8dd8c7515f9c958dc64068e31d3cb615038f5eea84a74b5d0c3415b6b1309ea8092614f2bd944a6c3a9e002a95e524efa497c9d3cbdaa764f8cf8aa9fcc7f7d68a623930bebb74e5c234322651edda21e20eb12c16a76839f31f3b30d6
-TAG: 33a31cae0292d0185aa10ba1c2288cda
-
-KEY: 01dadfe4cc0681384b489f38d25e83c2
-NONCE: c563485fb361f81d44aea205
-IN: e5bb4c1912d00d8f99f8d7a931e55ae72f749147fbd97699ec730bfb01b8261f1f94696278fc703263cc789b283460af9d74647a8c039ad2184674e78f6a355a26eefc6fcd4cd32d96d245d583836312652fd9e6694ac5644eeb4c2bd667b52e5af14bcb108c8e277728d6d6116e8ed1981993771b8bb783bb351982f9f8c2a0e7c20a5a863c6d71b7145b73d7e6d84d47780d66847244d0b8ef559f2297f39e26501d8a2aae8c36189580292da842c4d0d06a21d21ab175e34589e3b814d8a00ac1d8a3b2eca2a91b21e36c55fc6dad8c0a1b2cc7bcb2108b2e21fafeaa26a2d4881b183b899210b474bdc43a8f0b8464075d86a2ba1e9cd195a8ecadd315
-AD: 870d5740c4e22eab0783de87d541fa834647c3fc6543c60d5df31c19c6ca38707649fa8dcfc3c0ccc16b1bb60283d7ae2778a8f83ba07b905e23cb06d5656f614f1efcb346f34e190bcc636cdca229b64af9ae4b1f05b58f1ffd1a077a51bbf9ede69ac3954de7daf569cc8de12282cac09b9a49dfb92dcc409b8c63f2ae4a
-CT: 119f74936eaffdc3e5e7e072ce81e0e1ca91054cbfca127b8c4a94ada042a2452b39cdd02ab897da765cc0f8d84089a8cc5af662c1c96aefafeead785ad042b506fc72556182566263e90009a86503595dca0924d87ea6ac61d4e931025420436a8716d0ce379c5e3437b26a12531c0a1abb3a693f3202f5770f1dd7ec1eada8c2d6c747a7161d19ffbb897710a17e7740fc232fcc244f456e962ebe71f7ded8ca73e07dd44f00fbd023b8a72f9005f9bd4d0d44135294258ec14665309e9edcc82d98227474a9202552d31f1d2e7374d49929c2885696e5e3edc1983432f1dbad351f9cae3cd56855878d9a076c6d3a27f2718e32658f2392215915c020db
-TAG: 5689d9a73d52266977bfe5c1bb1bca09
-
-KEY: 34091633f4aaf225aa02ba9c57b910a7
-NONCE: 6535f0cba67fbab0e6fa0bc8
-IN: 76217fc9a546a97dabc9be41209bdb582d8d8a62865df7398d4f7e9ac681bcd102e31bfd40cfb8e9352b1e8ff7a7b81cfe2a62849e8b77dcfb645d2046404a83442133e245bd1df35d69dba9ee097dbc867cde7b431565c72fec31719318dd27c3e47dc5f8729ea794668d8724a1d4115adcee0725e4c1e3ce16ed9e31bd5a409cd074c0277e21a0b431d3b30ddd361ecd176a8d86927c2f6693105d7d3c47d9be8bd90d0b2fb20587623b2e838624b590a5c9f0e6d519b35eb5332b16bd2c2f9534e376ba68316efdb963d63e2c87cb0716973297d986bbd885a7306e2bdca0855447b57817285801341c10baf67bb5f71b75a11856d2551eb47e60025a0021
-AD: b9948afd8818888585a6957eb59680a55a5c42458f2d0e0f39bcbada0ba0b6e72340193500e22d243e32be0e7d7bc5c632ef3dc7e79ad5acc895cbba3111d8d1faa69bfe2ce634fc0d7b12242dd8bb105c6ce54cc9718921378c906ff5e61f48fa259b25bd10fee96856a206a928b450a0098089d5cb7378c2935c4537172076
-CT: 3260de6acddb17f93ff06dc7a8955f5d363bcee255bfd40fe5e92e13c7a1c682c6385736284c5cd858ce6ed251b92f5eb10f83970525f56a1ba0b8edba790ddb015307cce877c53a831aaf56f375fb20e58199f6ddb91efdf9983f263c9a746fa2d66bd4790531f85e7ad9a07cbcc00e9c122ddba77b1cc2b37b734a0ffbc29188685227ff42bf33c2e912eb592de1a45381cf6c5c9a36af93af26168c376e8902299e810e07a8ba2e23670c5221110ad4296a581151185553fe366bb4057e61b7a788f12cdfa635d9d6b8ca47a5596a765d58bb7f877242c2e0145d47c300175d7af62a29846830922308b6b69cce8413810184b27a8184bca2d8ef16316f13
-TAG: 7dc47ef9283971e1745fa3ff698c6a04
-
-KEY: d829975798d4f24ad243e4aad474fd5e
-NONCE: 59e25a6dd133944918709e33
-IN: f84b4daf4bc6d3ba1e0b9e364dcad5834024066ab5c8e672a999bbf23a83956623943e0011e3a2883d23a767b280ad84e2d7fe5811099395edd269077162310481ff304128271d4ce5c84ea738fde318cb2528bc5cd448c67837cb7dedb632d47e8f90e351b0a8942da2f78e2065cdf827a85f510e22156bfd971ab3f123e9774bf3ff7c224af19bc79e812839eeb3f1c14f89e5666c16c44a5483efbe449237508ab2436939098640931fe3b928cb3a9378b6b9fc2a54c6bf59f34b16f06d5ef132ae2a7161034f26a6e07badc61ea51a94a20e4692a0a0525726f3de9bd1d6151fa6a0ea3acef3634847cfbc98d2e0bb9ae89e4f91a78c56558ac92b4f33fb1d96b1ade26cf4b2fec779bfbf6709e531
-AD: ce0e6219f75c4c31873d4915b1af3a51c2ef5e89218ac4060dd12be216654eff2991e8d7bce6f6a437966f80c59c527679b8983e75c617c917fa9b63bc60748f5ca179645afdfe6a126a73d3fbcd41a9df6d734e8783aff3a5134ecacbb289f93febbd8eb493693264026f8678e9fdb779038ac13199459caf9c4e86f4cf8306af6dc04d9dbb678d3c
-CT: 98bfa05d1dc27d721378bcc25af4899c9c88fcd54d56662282f9b820e540444dbdc57bdc63b60680262aaeb8387e149fc2a759c0246f771dd9a13209c4eaae9f8c7e43439535afd85c9b12fbfc10f8f9f417079857b9e061cd24b7099726528f4ef529d14097239bafdce4d9b51860ad091c8a7d1faf39d44523973cd1df0377339485a89036d62cad090ffb9d05c7c7d79b01a22b7ee5e485e76ca9be9f037a94366968003b73915b027b161ab90fbc6ab78f6ef261ec5789d668fa2b28b1b1937da1d2337507997fd0d80387495d6953b08ac0a3fcd24f1fbea3df9218a9f0f1112d7bd4bb03ffb9dc790306db5e03d67201ab904df0e4ae283ab3d62bf48a6d79a5faac2ab33aa0599c0a6de5677ca0
-TAG: 767e68b063ed300e63df9933d6e10f2e
-
-KEY: e9e41d154c4c1bca018bbc4d744655af
-NONCE: 04ee2cd524db41170f0946df
-IN: 225d156dcdca3e52139561b61c26bfc56bc90c21cffa69468863afb66c3e1524303f8f42103e435fa2fe2c2956feffe5b06ed20bdba730d675166f13118a193b06d7985d54d46e4150468df1252d7cd144afc99ce99b93ce9526ea4dec2cde1d0d72fb82f55db65ec2035e387e7923d98490cacc793046afaa2e49bed34cd7e4eaa52e75bac5e86f9e9eb81028cbe8a515870edb9a151334e1f961949855565abc51af9a1bbac0222e9bd217d3e3a642b0f3df8e7c47c2c9d5a801cc8028c425b3becbe31df39d30637c38f981d268017da818010189c93d2d135024f239407623496c5435f04f9cae86e63ef46fcf9787c946b400249d8476f82dee274cc0cd3714973f1b6e0ebc443d681af25ee26a8ed475136ed8bfaeaa8315a4cd198961518c
-AD: 7bc7b15c68437005a4973a06818738adcaa250949af910aeb807096595b3af54bacbedd966f83f784f651f7a2044461a94f1a6925e6d2064e72319dae75d3883a50afb6be1395d429f24029dc9b8cc021f15e305e5418d844aa4a89ddd299bf2e8c698a8f6a6cf0165c37bcf2e5885d73bb81ca15a33ea75da5946678dfcd546d475149dd1a2dab0e11cc8b07c0b06105a49
-CT: e3a3521e3e99ec595a3d9d0839d8d0cb4c0929e44f693df016da34e0d8a1f3f6aae28fa0ac0f38d46ef06a683adb04df301ebcd6ef0abf9ae3cc220cfdbf36ce8c023714d203ba785e9abb05095c4bf7f07a13f9409a5759428e6c97cd4a8b2e1a471676807cf76131ae471fa4e8d15225e9996ce4c7630c4b0a5ebd85db4bcbd79bdcb641a626773560b591adae5bf582f3e92299a60d081aacac117235d6d8094e97b034d120c6759394ede2a8b67e47864e1f50669e8e926ab6fc5cc696e70bb016de92707d4800b25ad14f9c457baa1e21b4bfef0dfa6d849e0951c81583a711242ba2383efc85381ec7228b8e7950a375df405f820ab5dec8b37572897c6af443667e09d48a18c9bca0322efa409e04f57741305ea7d51ed9018cb5d0f00b5d
-TAG: 8aa9505e89a01281f033e9658ddb35c1
-
-KEY: 7b1fdb1a720b9510d7d8819b6d946dd8
-NONCE: 5c73be515c6ec00a10a69661
-IN: c59fcd7a005dd08f3cad722bf3560f356c624404f3be55a02b3301ed756f557a51593ba90d18a1c13e227c8d5180fefdde4957484dcb81d08ee3331a6fa74c9c549ae13b2dc2a80ca0435710eb9f0dc2c908d896957b87325180d397c37ea7cf65db45960c4d791bf8cf798bd7626b13bc5e6b45b45be1a8ff687572ece86d1f5361abaedc1a7f9d9ff8003bca97af7dcc42b4399f9da4a0e7e829c0e12f4d41607303f60d1df5949fca0dd9ef171678e013b88789ac1f51a8160687d842c273a2dda93c5fba1eb5bed7476ba96a12e70cabba43d509b311e9d000212c81c483b7e9e7bae1d9869a125558b2c7ef8f838bdfe97af413b460bd9dc5e372afcb105832ee4c406d74781d3e9f2aa581ba4fe458989a03679744edb73ba31c7d9d37920d4d57a766104afc9c96650e5a602ba885d2
-AD: 078f1c67d44d6e86eff0c96a146bad3420c7dd0c64d800ea5ab7ff472d0f61bdf2e5634e06cb4f3c022dff8c4b46f2a47fdca2d04572b67f24125c66a551a1f150a02f635e1e99895807efa8001f46388365c48e4afe49c04f6681510f7e4cdfa02deb3e60eed745cf6d7ca6b773e1537d057a043cf517e5388dbbc44ff4bd68d2a7243587f8929ef07df5d001a6099bebedf8f26f49323209496d
-CT: db79e91f4458befa47953312aeaf6aad01c3fb6e2cfa19b0ba21ce6698896e62e7ad2cef344cd324b3f0d317d9fe7ce713d4cf1743adcbfefb65e61ab6b323c5f16762ac527882f214539e034719047f9d3c0bc80480b7f76481e2fa26262b0bf426f1599d3d0947492769ccd65433fe70340d8f74fe31540b48c053eab97984f5f670651746b68617f603ef23117e9a8df0266851ef895b58b847e911508dcdc590f6188aabf37be430bbc72746ed7f5f47f45c90e2400d5be0e323824c5b86a2a0ea7c2156f482f7e0ff42923d6f7efc7f4f2cc77915bf85091216bb0f8c35f5274c0c8469ef03ee78b82cb6a5b510e16793f38fa2582ce249370ddf480e212f1cbcd77f89810b41effc9c87b0a80e5a22059b36e1dad294cd158f03d80ef3ed31b5f3b095cacbe5782986a69d5ff7621609
-TAG: 221274b4be8a4fcc765c2ac319b5186e
-
-KEY: 50109c383071e4a61ce18f495d98b6c4
-NONCE: bcffd0fc2496b7eb0ba612e2
-IN: a4cca8eee2a3daa0c21d854d49ca73cf5b24b38940dc2b44a2a6623e8404fc30c4e3aaf759425ebff85cb1c661744adf34c6c5d538f3210dcd0270a3d12784effc48734b53c1a228db291e2e5573b6ba2aed0a7296c1bbfdd1f4a86d6057d5534675a3f4897fe3a1200c54af7e09b97b0a2ab9f25d5ed375e7bac921f28f7b6983a41580362dcf0820a2dfe82989ccf0a998286623617453722bea0b6e8fba504b93cd043c7e6c7cccfbccea43f7e87502026f94cc7035c5e84cc14a5fef9bf2be53dc379053725a9a29c4e86252369bf6dfd3cf2801af7447fd0529e94beba961ed65dcfd492398123faa55346edfc3ecff720966b74fd0ff28f443ca67f88b8f5a4a73007f79ef782bef601a0827888c4c74f7777279c625de8a4b51db94f94f846474f8563001339afb3db339ab997cd1eb1eb7b03b228162a480e129c66ad47dbd18
-AD: b4c98f6d51fee205805a50c163beb176b754366e13c57c18433228a81089be18b534ee5f9567d529c802d34bbca36807bf845a9d14dd141c5de85607a4b4c5521e5aa717f78fe78612b770a4677cacd77a425e2496ae50ab2e559526c37ea723f2b8d14bd8314e4cc3727bfb835ea4062e87870b13d94d52c25f0c631668292f184fc048dfeed7a9d1a88cc5c4662030700cd8c257784009b4da9039909f73840b600eaf
-CT: e7a4a201f58f66ddc0b8dfdf95c859879144dfa896406f43cbdc6adc148e0ea8f9a82170c5ab54c77dd0fa6dc209b623f0f5cd4ae358af96ec27c78e7245855e94ed1a1182f9d26d45e0872da3fab9fa9ee3e58aa168925d7f779feb77608067ff45b7ec7f2ef7a48a06ee22747ab96e1b485ce144bb3cf97d1e3cd28823628a2f8e3785d9af28b76c53c3d4c741d1ec56f2bd10939f6c79578c308c5e509ba8b13c820f5912d4ae169da4e04f86ff9b1cb9faa432545f7999ca1014f77c08ae9033712dbbc0e99db6eb604e774d5df8f6b928a0bb59e4c662d778d195aa95194a0cdf7688b309abe223048937691440e5a78cfe0cb75d229634aa49ee54a81fc9a6478c8fa310d524bb15ee8f54f572dee30e44eeb9603c8593f8a7007a1b0dcf2e301becf300f20d2e868b104154651446316414b5b5e9432134c0eba97b4cefb90c32
-TAG: f304266924eef673246b3c14389a82a9
-
-KEY: 670cd4d988845b1d41cfeeb1ea740db1
-NONCE: 29c12f66a74e6234ebccf4df
-IN: 706ed30fc736cb5cc0db17ed108229e87d6b039da5c4f0568a4cbef9d513dfbc0af9313f02d5129cf616487934f741a0a60bf11fdc8d29ec81eb37577726f54f3e35bb10ef98b1d15bd5726fe501a9249e409eccae128df61762447962ba2a63f30b59ea25e18895d2fd11431606caf6b45b908b08cf2e150c031e20e6cc649699fed5785cfc6a0e22bd8bd8c6d25221e9c9a8d2869d236388fdcdcff990cc940ddefd06da0524a351ae6113b29db9822adf9cb548d92f23e3951ae8522ab113579232e58578e80bd2fe3e1d06414a27ce0ae2e40d87745a8991dd5bd2e8ecbcad8b903195c15ac2eaf9bfe0104bae32f772a7d7416c5671350524419a6df6ed5e1df32b961ea39b164eb7e1353b046100998ba6853674ebd5ba011691a270c046096143daa84752f872e1ae32ac07c4f0d2a048362d12b108943a7007bb6cc117135b165cbf42b92df2f191f06085518ebd1a9a2e
-AD: fffbc936ddfedc527b2c9cb69345e0c497cc4951aae5be2748209607a51a1380fd389a14ede9cd4cbacbf822597b1c500cb0549f08a35bb0b1a00c5e25c175318dc771b03501bbe45fc52b2ceb4c04b8213fdce3882e0967ba268cf786ea0acdfca0a7f3f2f4f9ed5f499ff70230158adeb5a741da266573742c527bcc8de42747df891f58632f92a110a981a29052bd17979be21e53067de3baf4c34bfbaf56ef5b3171efa1ae60a1a51f51e0
-CT: cc573518606d6416256cb233c66352086706f7f321fb5d69dc75dc6e11b9f7d053bd722b8d74f6edb023e283ac048570dc23dc34e1d344619dc648199b6bd3627590c7acfc738f10d896c0e3fbc3d3b9ef75c20c616d1dc96a6c3661b4f245ace3083590b1d97b936ede9994b08bf19189f573919eceeff80c25ba1584a1a8744efc1b2efcc264afa045dad460d4a97553d33aadbf6dde24790853a342349446741d65d3551ed343e9dce6b6cf6131c9bb3524597d0ce95e6971c01581fa140caf86ee4b53d17befeeeda4f5ce5b255a429c27a169aa075153bd4f1924df1750332aecbd365d8f65a2fd17f6abe9a054b3a2abf02a5b2031282715386c166dcce653bf3f3fb67aa119459bd5ef3bad4ea97aef40335884175d7fb9bbb3bb7f3114cd68c8136e8d02aa204d282403a34a89305725e2e022a9db9857112350e965d51b7b3de7339cfd3f202d18a07155b5bbd11fd64b
-TAG: e3c4a624a012f660f21be3776f20b440
-
-KEY: fc5b726bbc23a67015c35a1be5dd125a
-NONCE: f812b7661106827f31a1e4c7
-IN: e0bc265efe59c9d6620387755a0bc17a11527fe136b765895e6386b9939c548bbe6d3b35eb92a90c05d0931e5dabad4d42ebee5af45be0106aa68888375a2619f7418a14570d1dedb76e8ab52a0a87eda2570d2c1d903ed9ecfdc62c23c47cb7e234dc617af0843a9f375a58f930337a88379b2b0553c4db974ad74eb46d637ea4e7c7aaafce16971682b772e1d85bb4a7272bc56be9bbb55625a5085e601a5dd60701bb07f69c755a57808d022ca0a407bc3d35c848d6fbfa6bf816d470d9a82d43511c13fd0f496e59646e65c84d7652589c542ae2e73c5b7aee83b9ee8381af1ea1f930444676d8e3335b271cb354e9cd3b17e7f1511787fb618aae930c14cd302bdf3a55b2bb12a61e7b930dc39aeef36447bbb2f4d9f5fb55797627fe1d0b94c04c6817de6cf1e7d6e2660c6f49c0ab4b31cd5b367b912933d3d1f0a6b8b9556fc6f8e9ab310482ee241fc221634b5094481ea232931d696c889d3d37e1c53cf74a3d5b
-AD: dc41779816b352803f282410580b0c03e861f4f7fc98f8a4cd9a4fec0c0b27d92023c081c7927e7599cdf59031444e74fc15dfc12d3c144762b8e448b7ef6772612a2e7bc34a048bc33dc56e99949d569df7e296b66cbb37c66dfd2ad8e7aadc350f8350cd68e8c4e2461290e30f9449dbaf4fdc89221cd75493d33f903d365ec418b327e3dd6fc381a8e06c48868823a42bcd082ab16b2c666b71038273427ba1ceaa57905c655f0ec4d25401c07c679ff5367a9755
-CT: d64bf4eddf29f08aff3db1225ccc9df5fa92315d70bec762a001a21f564483c43d9fc25e26ef1cd8426f215f4fba46a4fdf5ea96e6ebafddfbbe15ec5a7f8aa6058f8f3b5c48339fae17738b374bda2ae9f0b95d721342d968ccaf1ded6cc9e0d25e4074b722c876565c73a80f9ac25c8ab7c9967b79e5f924697b65ac4f6cd8f1dd6adb5a3c943c5b43d0563ce8656dbe39dacf220e600b82af2b5ef9de009b51fe6ac5707d3b0a15e87ac4c27501e88e9fa4fb84d10cc489b2738fcc751ee5aef230d4b9e4529cd3c580e2c248ce92184fdcccf8d94a5da4ac34acb13156dbc3e676bd26c68e1065990a73adefaa4a58db57dfab709af8539f449d3c49e7172c6ae686e494a92386ab28caf37ebd026d0e670ea85a010a6fe8312fe5a71fe6f0c7c52dc80b2dc39489ccc39c10a7d3d64ad66ccd44638c8c9d83e1b88930d8da56e978090dffb1e04a08303fccf1dbdb1bb160e0f80d4493eccebd984f898ce877454f84b0
-TAG: d69dab4de29ca8e91f2e74888f80b841
-
-KEY: e63611c19ca5deb1db80f97a3f5149a8
-NONCE: ad2cd6491caceee3e19782e6
-IN: 6354b76422dd47ba1e715dbd271a07fcdf69b5240e58186b82b1ac443000cca1b0c79dede1cf998643565650e998bf4760dafa08afde120368ff9fdcc2311f78d803c8324e385ade4ccd2eb2ef51aa1884a496ec024221566c8c882992fbb830d4923a5c5d7b99c7e6e7a8aae5926d143e19bed7faeaf7c77bfe7c9f05fdddf75df3df2425bb94a63f54bfb1320bd32e7fc2774be67a22f2410ff3c295cbc3fe566b8c9710807722198f03f56f0abb02ca55de5174d7f9ffa61c0bffb88730886c028451062d6220586bdbf5ff91ad6b1033f2c9d6cf3c3c7bb58a070e8bb1c3a39e3d04952961849cf55e64033ec929f30b9ead497d14b6c89ff6a4c008dab0104e7e20df6d6f11474ab680e5bec789623b2b693950a5d17dbc5b49cf80ab033b1910a9afc4231254f88ca13f37f1214753f32547ee0decad4bb93fe229b6c8a14564081d8ce5d47cd45022bb74475a709d84dc5fb0fd2e46ebc9940ccebcce3b674a6934d4dd57ce0fba9a1407beb06af6d1f6d70275
-AD: fa9f177cd36c990d4b22ff63aca475feb17de03d3a52b4119f9b277649f6f53f223e29e03493c938688be81151e268928380b407039fb38494cf235ddc823e8cb12f42b50b2feb52be05a38893d154b37cd1cf2f635413d7819354e29e195bd01517992b51efcc91e10932dd6f8a859c5bfd77f2e3efda25caf034a91053da8936e1975fcbecf2ee9784bfae7f903df4ad32e088a869aade322c7d14fc4143c50c59112c8178d00a0424f4003748d28956c9d3a6c57a8e0405d6509147b50e
-CT: c22ffa587dd3b6425b81890f8eff36af3c64549c5a5f3e1deb44a7f14c6a179b1f76dd01d546a4273fd6d47b6f9e3ac5e9b641982d1002fda49af071d1dcd88ae5d0ad778d846d3db243ee067f17a91bfd808ddca26bfb67ad28303be8f582de507fb89bfc79c10513327c883bb4c6b97729c1d4aa32ce50703636b2fda0f592174f2ea36b26691e6355ad20bd116619dc728895bbc0cd281f58aff68d39e16087d3cc02ef04dcc93e9bf7695cb15a8f2db51df2e22a2f04be96021b4008f50c94cef256995207ef1dd9c0137d4cf63aba4a0d28aa5ff7240bf20895f8e9585c8c16437edb41e51f6ce5a4f965f0abae8bdb7c7abba2ba82eb5ba1dffe56411e51aa87617c62f7f6af3189647340865f92a16987ab784b1d6549099b1a02b369198ae9f8339e9e197f41e2798076b5b5fa61aa7fd7620bbcb8828b2332829d554f21b83d018b59f785e3a2db359b36fea9a8f085cfb668b3a7d80ad38b85e24472e72916bfa2887036d480f6ca48acfcc7c0f471a9501e
-TAG: bd674531985fa355e1ef3b3dbf8f70b3
-
-KEY: bd7d9a251a127a4dd736d0f74e68755c
-NONCE: 4226110c276cb7870cf1c7b8
-IN: 6617944662737762aa77bb255d24ef951b69adc74314c72f37f32dc091ccfff067a89b834b1cf0b58cc22f7dd6970104dffa1f60b2ba837ca6ff834d07c71ac4eb40416f0f50303dbf6d0b4b0b9d9afa8da46c6753008f093a188cefe67f051c8bb3b6121841e2ba25b8b801db329b8da7d0bfffc29a3810d2d165e854a9eb34b6fcfc7c05bcdecf8f20b12c69f5641441156dd85b910557d1355e9d07030278b494691433bd5de2858d8bbe2e3071ff450f113ca78f385cf77e6dc0a6c3888e3144be91404deed2afe438240270e9493811343c62c2ef0e785921f1ccb2d2d029c5f0365f46bd55bfa8f89d1d4c30c5f6598fe3f9111df847b27a06f7641494e4eb7dba8a5296f90bcee8cf11c1f1fc16c52868e8f2db2dea75b91dbfa023d5555371e1461283e3f1695e028ea00bb35b6e81bff8f128af2d81df6fd2c7f6f42bbe9dab30a59ea4788a53cf9d6a2b1e9cdcc9f1883b37c91eb8bea7659fab41d47f6fb5e453777b589188805e883e9e15ae1de4e80860bffaef45a1e0a01f88b5d7d948e63eabbd
-AD: d2f357cff8c172e6652cd3b420533b8527a6ef26c8ed75d349dca2106050d80cb22835c15861a22d8c7cf8c2c2df9407eccb0c21dc7078de4b8b91e82d94a9916c9a284c7e49c8c7d001721a9031530474452588e09411c66023c9c81b7891ed271d371d60dc70f0c04ac93bc694e5b638f7ce901011e1a17059892a98d596666d102d9f7e0de426449906081651f88157063729176f4608f2d506c9637086f8a56821538a6241d8ba5e0f37ad3ebfd0b9f3b3bf0ce18c095c4533cfe33f6a98
-CT: 7db6315e1ce8ae23774c2e8826811bc31b2d17c869691248a5b49398465319576c56c2a64e22ab0108c92b52d9a6096f33841643099cf47aa1defed63b7855f3a4586dfb8691c982eaf102aa87888d09b6dade960bf166e48d58999dd08a0802e109186495833a8d8bc5d6d3159824d1b89d4084cb831b8526dfd1c620b4fb6000e45bfc1a101984f3cc51d54c793ab8f034066922905c532dd60c7d96f06989d10c82844f4b20e872538f27333e6d8656b46fd819936124617cddddac8a64d2a81a0cbf21fe91293c8ad6af63536d10c11a63297b620350a6f76e76afbbf2d8c63428d46c9ca123b5022e6d67fccba1011b57aceb10da0878bd873422438cd949df47533eebacee697f9856222344bc9c4876f8435e0b999676d141135a6f42ace8f99b16d86e427f1ea4d4ef524835385ee1cda9f4049c3f6f9226a69b08528bc3970166f6f9067ac30f9d24b7da6bbec4e58286b3b1c5a7711ea7965ecabd02375b38a603d49c12131019a9b2affb801c91d54896c8c29e09f62a5fc0b100b80ed54b70f568d7
-TAG: 9fb615a8c354e10560c3cd37ceb3c3d7
-
-KEY: 71bd6158a17dbba101f840c6638ca058
-NONCE: 9434c5b842d5dc501c774114
-IN: 2982cde70d98014e925eb46493b0bf91a569139be22c42cd33ba1f8c2bc884b2501a0f49d6309344874325345a98481287ccc6d29978d1e5be73740fdf2f3a3fdd0d7c0642be7a22e0c98f0886ed51bac87ceb0f2caa79cf702ffe880daea115b8af6546a7bc18469e07a3f8d8b8a825648684e2b4e9412cfa0f895cfa162ae0fbc11f8cc4a3252b2acf89e8ac67de0adb91e36dd510f9d8ed4eef92047d015b2ebaed1f3f0412d81fb5bc82f548dca18d5205995c22beae86894c88aa7b50cc82029abff7c8a56d0a6a594fb502ac9f11cf10f8ba9967497e0b70551a6440e15285d53befaaeea2dd2e743cc056bbee79e47350bfb49178454aee0c78372db372d99ddb910dfa8db6556b61d64e8ec833fe4737b13269583459a39bba6a1202fc709595fc0161f537bd825b3245bfc238a6c7d3b2295d1857129df86db0891e022199c793b319ae965cff94b078e467343796992992d388aa210d50599a3b2bbea36250ace162989e3c21249115a402c544aa82c0bf7b2cdf2d0ee20653b1e07cb42f9d1d0575ea7220ec01bb31deed93fafd126cc8d0d268
-AD: 16561102778d04ba7d68de3d942d313a63f1ee6c3a37397348f01bc83fb878bb1035748038047cca0c07710b9d76e129f9b881037786907560e4ae9592c02967df22af893b3ad409a3b9587454afe0375846cc8ad94963c7dc61849ee4ec1406dc7915ee5477bb73a43035d67e822e45d3169db88b269824228149abd333af8e41d2be455bfa449bc2ef48f0fbcaeade0f6b62d99e318a2ca44506670fb1397c47d1931136cffc72ea33a0e1e97745e938ce654b9b961fd4680117388dabdbfa134c9dec8206797e72
-CT: 6da55c8a9c5a29eaf8dd627d7048f0e6cf1d52063bd0a7f8d073e66fc406f37fb397f789e4bea1da21a94ef944a2a0fb9a35a7acee3d3687d8d713090a1f2dc3d118ca10c85f5542f9f6f40a4a79bd8816efc75cddd4a7adc9ba91483ca70daea0c65e975be46f690a2182602b29d7c04991d2fb61f154f8bedc194ffec5983b12c4f4d9abc0a415a517f4b8923a2ccf1d5213952133b82621dfd4a8379cca916f6ed9e58dc94baaa1c1c7d8491c3341e0751d90d131f20722bf2c44d097dfcb6eb49385dfb8c86dc47a7dce3ffc3eb89f32b4f106bf48c0d69aab448ba315145dd7ebadeff3798bfd004369595f48c9e7be596fc181bac4573d994f6d7a778f353e3aff64c3bd5169e8525edb96f1e97a5617345fbac9f58c0885d52ba25a019a4e01deb3ac14c4739c0bc73f28d4a05bc5b0be11477395f706d45ca0f7fd92697e6a8c5eae587dc9cadf62c4e8c283041211c3e51a23b84bf00d3bd4be490cbe9277268fff3f652ac9eea2734fcb016639f3b673b0eddb2691b10713fd5bd606deda19d9429ab17539dfac05b5ef87c018564cea21fcce7a
-TAG: 9f64a1a1ec8b09b1e64b258744ac5f7e
-
-KEY: bb5e6c7b672e7c5d720c2035dfe8d42e
-NONCE: daa56f54bd2dab11ce5ebc2f
-IN: 95ef01bf080ee82e8ebda43598dca58db3acabd7b3cfbf5183d07bbdae49004f5154d6bafbe1114baaf4c624688178234a6176756718e79bde83422752e7a9ee87648b182f8ebdd96213b640b76118b577064f871d627d2a7218ad19d45499ed3d4d9bddefdc282e66d1d708daaa558ced4edf38ee6f3a9add0f2126e94a707261234932d0e3674fa085a7e2688b854bbb9bedb328940b5d35fd0eb85f5a56f1406d7a8eb7316a17eafdd7b87ee85d812a740041c8ff6057a462ea51bd07df0a0b0374f5b4ff65ba48587cb83d20010e67f36106e99a5b733b8627d541ddc084ad0374432ac165b4e81c8601e7c180850e54d8db89c092d356dd617439f36d65422a45d116914390320eb1ed0736e47afd5131b7422234a36c5efc5fd578fd6674176a7ac0f73b63a3f5188aa9a7773a27f50e103c2faf3e0488acd1265055999bab1150ebf49bf03728bce3ceb49307e2af7bd5f9ac307a8d249f55514325a6ab58fd2daa5194b07fab933db72806ff4159075e140d89fc3e5d6b684be014b5f0ea1c857a97196f184755c637c4f3b8bdeac41fe1bb892b86047e88facc04e2d88532b6f584f4ab378a
-AD: 3dc7d6102a17877db95465015e3122681258437f11d14b83f1159a52486b4c3bc6037ed33de9e856d3c89fc5838aee587c606cc0dbed9a58faad042d51042e086545fd9639b18650bd531065684076cd188f11508d48e2a7ee585e8c8e9061970a2d381374e0bb5ccfc8972a01d9587872ff0c925315d10ccd8b9cc6b1450c5400cee4e2edf25ad952f31da22c7f241f97d966bf491ff2b8f889dc798a24e184c64290656711a826290917db99e2c2bc679c92d309a1856867d9428ca2fe5ed2a3d0476810cca53b18526de0e88508a67c67
-CT: d5c7b4282f37776c03c6efe2af410b10caef49943001460800fdb6408f3c7a9f7f32d8db36dcdd0694170975536447d84c56f84c966c28decdd607237bc7ddb15176ca20be0993f309d2749db68666b2efbeb4c68cb3982a68f67114c0dab61eb9d4cf4c23f1847fc36bd561b0469ace73c80b0347af5e88f051ec6cb19ff8335dc56cd3bc6cc81893c9234457c0d8189cf1234a6c8a262926402eef262c4c5149fb68053480ab2b1512a91d50c48dabe637aa410d6a164dbe4f8c1e1c0efce8687dc858386c92ed7fd8b8692d67ddf453558d28998ca1b57a6c178f12f4b64479b3367e8dfe53f809fa7baaf8d1efbe3c9e2d83b0377cffd8d8dc172a1eb260762c873af724248011d9e0cef6971ec12e81d70aec923664ff7f7cda9d60b3464ab14488b243930845e38e93a8683787641b85476816dc73d17a593b68935e4cf71d81ed7dcc9202db65e235dd69c1f2ad4fde4d566970923a24bdee799258a3198ff2e126870252584a1949439b7e32318af204ba164f9f3488a669800703f988fe56ea6b0b2cf662c43e103e2e63b377a85fd8024d3b40ff47f30fd3dd6a0e07e751d07d5b0e4afea2
-TAG: ab140e2a4dfe81a064944610e0cda2cb
-
-KEY: 97b507a2e09cbf5c31f7be6dffc78d88
-NONCE: 3f607f0ec3ddbaaae6b087e8
-IN: 731cebc792dc840ba136374a9b654b5d61735d2d85a70646be9c470918201b9c8f756e971cfc12e0a93acf386809f769ed64a19f47f266f3504d47725672b2aafa611456987fd1db71d16a4d1289ad442f0877da4f192d814f9302a1207a8e8e48ed90f6b5434b35d47dac6a0446156781ca1fa41f7bb772d1eee48919b4e8371cf49fbf452187245a16b51daf82e35b77e80869eb84ee9ecd90312dd3e6e6023ebec1a21b4279bdf21402969101cd1dfefd0a730d3341571bdcfd36abc675744f96bc7445f77f90f261b1ae207f93d17828d39eafae394ecc2e65bca79562a706c279bcc6d038edb9d7a344ab1a5021f9a597b223d7a1a99e1268dceab20c23e0208b9a898e99d83b2e788c1b7faaff2aa6145f8918f53cba3168db274d65f2e419fc233927599f7ad96890bc1cd4f983276b126f7d10b894a67237c7b67e8d633d62b39d788cc43b2f8a05d87e656ba86feaa3a729b0be2abec99bb40d177900f20b559c4e0ae2034409bc9b86c54644cab932e997fe0554e7eaef7b247aa00f9e1ec07aa9af3a86470075324d02c32425309bbcf5462aa20caa950ec9653939b043c2e94f0ede1b91df0068fdc903431008fe16670d77b08988
-AD: 0c962e558fa573b2052d3106dafe00e3acca3df673fa559f950bdf9972e20b9612b5c4c96d50997261be7f2fa978b793d5b61e74b82541c8c02305431a6b7495f948622075b5d18992d976737e1f6f38aadf90bfb46f7bb9a7871620218564360729844329f4cd2f0c77bbbf17661529f88c80d1e000eafdbb937411cbd4295ae697baaa6c9a31206c5711bcf31f2dcb50cddb4619d48388a57475df684f4a00d432560540ea4d4d337ce0284467851e86447b1f04246fb2167625a0b3cc16873841d23551653aa1678ba76689664e16c7354c87d5fb7d40287894
-CT: ff28b33337262980b3adc761b8713f01770dabbc1f458516c721c6a19317ed1f1d6520fa7b2859cc577fd92fa3525273f4a87c99575940e941914ed586e7aa5637c4fd2d98e7d198b52924619dd68a214389cd486fbf006ed9c72e6066d92d2278abf1fbf4b4ea1f3d945bb1653eb3c217d7201d5aa40d34c8488532d9818b06e4c0e97c4cca7c9e2ef19ab5a397db27d4465f41585ab60342a3102837cf43c95db008f0689ae7a7970c2ce9fd685e2811393931a4d169701068b6575b47e88bbfba48281ad4b297fc3b265c0590be6b0208f6a27594b0454e55893c68203233b60d08e25fa66d63e76a869a4b84d153c81f1faf46f9a3130f7ba4718a75366af23e4377d60901b960a4926b850f4d4052d6ef1a5c54ffb388acbabecf069a5841a76cf15ced838239a8392149ab2d904b482bc661b3cbf4c74b711778cd61bc38499120b87f0f45f8a5aad51c84595b991d7fe37582b1ff963063770cd0ec9d98d78ef323c8bc939cf3b6035a5e1f5d54cf9af44d49f9cb01b7d1e91c2e0da110a33e372b07402605ae81bb4ef5505ef51b3dc23ef5e48f3f16711d2d72bea5ac90e85a37c97ba2d1a4f5117a616b3865d97a65a08265ea0c8fbf
-TAG: fd76a9ef5ce12640f3e782a40c6d0fa4
-
-KEY: f46e56f5394bacb222b30fcb3f5d5547
-NONCE: 6fc37c122d6865751212d4f5
-IN: 7651092066aa20eb70114f269b08e4ece1b804fa3f2c5e4b94981d41b3503fd127fb21c1ba24cb871dc6f19c2a674561900f73e292f618e1b3a285ec79bc7784e3481cfe36e1117fc620aabeb088585aef6632a7228a5f901c62f248b9ae12c7a6e7e5052d9739bfe303758989af254b78d5a42c74b13def0516611a1c0323e18070147f67cf0613cb22d83dc29c176b6823166c35202c46e85484640221fea9441b1e9f4ddfa4c0a2f4b2599c6fc73856e3c18a5905f85dc919883f3fe9dbbffc50e89e8b71b9a36c74290718e0b89aef1ec21fae49d280d3776d3ef79368634716cafc8f2eefb3f449c438c14deebb705a42e85274cecd11932c9a84f0dee48e8a2175b57820c1042adcfc42ac9a39341af5ff6edab2d25eba8f0219d3737bd4e7ebcfb3883877130c85e5be6a7b87cdaf4d37075eb2f0bd0d1a61567a362e8f66302e56668590b49b5c76eef962d1c310f8bbfdf8f57f3f82b9b2f72ef49cf487a4e8618476db71c6e0813e908126f9958ed5453067c6797eadb432d07de49dc2e50a266eaf6174cd1b18ab707a53dd47b564518b7bda452bc451a25ad2aaed6f2e7a3509f704954bff2b50f5cabd420148967ff830b0c4804ad5081b42f842276c6addae1c3199da8877
-AD: 8d920a6c79114e667faf28fce2f7924c4288399e5b4968c711f03d721e885fea0668574ae965e9996aab6b30b6eac785cdebc45a305b806ea90663927b8dbe8116292ddcc56938c0b1b1639e8068db1e4cfd101af5478dd63fe0209125ce92e3f7f7fa43dffecc07ae1621f32af975dcbe3f34f1dc75c75fcbc4c23ee8b8900c2719f4a9f50e57b1f9a9d9172fc746112f12b17b85b0371d0472d3c193c37e837d8201fe7d3ce588ab7e27e8457c34d399edfe3af2142a2baae6c6ec74863f6415ce30b17c17599860bf9a59be41a6011104b9cd0b8241ca52d1f7910cd3a3ae8693e47f
-CT: 4877203ae9162588de263a70fd978343e6e2c7efc107064c1a314e210e01633eab9cc234a86f0815e515eb2148fe67023dc7c67616a575c0c1adff2ca1bd7867ca351963728cbcb6a41b5928e83b6ad97e458773e543138f87698c86e6a84725cc6330e3550d40dd3103d0aca5139b2e7f7f7060e34c383280a9276aa44d915460cb664d132056955b2df063a03fe4f844122bc02455ff1558377d8c15419e34417e3c0d5d69b69943027fe32384cd53e121f885293f17cb3f2637261f3c9bf6321406f3f4e59dcd37972e3073573aa5d9f78e021d07b7036405f193c65a2f8d47f9a2193623d403706364f514b1beda6930925c1afa9f294ae625673e41647a94830dbfc45a4d9029d5e028e8997d9f251aa7da65b48e1abe8bca5453482aa6d1dc1168bf4a6ab5644d623ba15dbf10b0f46536b35e30fcc5086184d0eda2af5016f370c9931f1634331458c51b575553686b511f073a2650a1ae9cd2a64d8ccb14194a659bd533e91cac42690d661c5038d0182cd8e52bc751662508d2253460fcfcc4428ba7a55f1db80bc11af7576e6b9ac2a35929bed35ca82fe497a65c24d04c96e6d9fb3bd66fb54f01483b766b614a97e370ff406713d4b811e1327fa52692355e1d307fd2ac67a4
-TAG: e7208823f0abf2571f81c015eac317d9
-
-KEY: 4675ade296a8c507fba35f62c82d9230
-NONCE: 51fa718d52a0279ba9971490
-IN: 32b3a91b1dae9cddd5a89400de90ffad1e1a126c41459c512c261f089787fcc18c4583abd4c9e8b7844389db3d13e8bd5fdb68bd76c3878344241eca6916049795716b257636f1d25230db71bb10725fe4b9217d5643ea14754a69739cb62c7e99c5157bfb8c153cd754a2ed10bbd574c718b8dad2a556793e00d8d5a59bdd486e768f2e61ea822822532f8b4d77b3446eff2cdfb7d88d37b3e7ab0686679e02497abc04ef7a240d456bf999cff4268bfa6e366831559de7775ed6a6d4f02d489d4c305f25cd96f2239f2725961d5cd823d72dea41a1c1f1611fbab63d339a8dd47a3a31b7790a605d3bbddfdfb66ca6277a9a3e4036e8662d6560d05a7ee8a674e33d6433aed82fa26e5a1f5a2f47c28092ced2d182eabb9962aa8b10a567ec3705be6889e1415713b9ef08731393cee91370cb1d3bcbadf5710eb841d37992a7aa3573facad94e806d0019194b2cf9c41db281f6ea462e2ab7364b8660b956e145a13b77962c3191b2e46ab764392910cb7410d740aec3ff2ab8b643ae7e65d34f895189bb41902fbf2c5476301600932728008ce33380845f22b7db3a7b9accc8cf0793bf6ba37d405a6bcc8cc622f1cb205cd0b6e7fcbf3a6eb1d3bf2fb91e98593959077e8bb76adecdee2fcb008cfc335d5465e4e10e9cedaa39
-AD: db35fdd7b9533c5b8f2e5bdb427d8bf42c5b83cc11d2ac5ac96f6cf95090c5f439bc5d4828238a86c5d444ba0aad7b6c5917f673010f0717007a77064bc4d29dca0ae96b381cc89d04d5731a0f985a1e8071a0fff733889d0f2475ae9277b0ac5f7b68a0533f16f904ca15969cb24c24faf7a155ad51917187c5ec8cfc95352481f0e9002eee9467035b3d618b7f6cf9faae1de33af239e6ed4038706b735431195f355a27d1e7098ddd1f34fbb0bd3449b8c7a069b486984d09d50a90a099934eecec7372fc137b5274afe57bc0cd6f49b1e17638fdc8602d31fa975c4f0223349d40a86c36fcbf43124a4726
-CT: e1e44ceef4e08b85ca5fddf58c4d6eeb9785e0ed50be7856e74dc1cfcfcfe92f0e59a4fa62db0ca641b0be4da12a70fb443ffc46c8f5f28ce467cb484a7a302dde2d459da83d8ca6707fb0c6eda6312e37c095276f9e65b44fc9a0ed7546e0224d639a7ae396403b0db8be55276fbc380181cfb32c357e99a4ce0c33e464d1feab4a409651752a05f2dacaf85125005b92a195628bd314205b8d2aa1aba19d32c789d91e565944478e90cd1d4e10c475b79ee5e7f7aa22456773febc5d0684ee0a26ab27cd391fbfa1168ad28f46b114d31c7a3794cc216626eb41655990ecdd93f97a7594330a78426da7f2e8aa21871a1207f769dad7db7dd794382a0f50dd8dc76ec3245576b99a32314d3b6a4046a56fbe178fc4cdf8bf39c86a6ef320f4cc63e5abb6ac53f6b336fff96a22dbe2e836c3ea9f4b39ed58d01d45937c8b5af0df6a44bb78bdd59c1f1ac6643fc710e27a4fcfca031b6435ec2850289605e29db5911cd2b930a4fc28bce98b30cb2b6b9504ebd561e65efa52759e64b435b99ad26b7653c6bdd21c964d20c5761bc3eac9e2986cee13068c627721a90862fe387382af2895efde343e3c9f13a3ed019a144533af765424c7c80795cb30ec132e7aeb9a0c0c75f2b885a4024325a491eabbd30f81592377e040cb9034
-TAG: 5100a3a60ed7d5837ed8adaf78c625b3
-
-KEY: e198729362ba96f79d5e0d89fc404b38
-NONCE: 36737445756c6060d9e95d16
-IN: 38a030ee5fd954f5a9cc662014ce7420fcddd9f2ab800823246ad30ff0d0f7789fe11807703a731675ceaa31b5835ae039fc0d111f5725ce4df0b9a075a8bd1c1112f90bd64c668d1d9e794228aaec7c17dc664ac88668cd06ef9c425f2815891ee4b737b18b138001eb6c353bd5fb7ec26b2d26a12ad2fa707adafd884be4251bfcf5e5e8f3979e46d90a57107e7e4d04c658f6224d1a288bdafe8e34df1541c702f29a1db2af2279380d49109f17abc4161a6052f4ef0f6657c7322eee44f4cae949dbca447cbbceb9f10c5be6de1d8886766794a3eddd736ac7acd3bb87cf11e88f246fcec505f595902d1121f68557657f81340261684fde901c079dd73f7c9e1d4bdf90613e7790f334884b668ee04c29750d2baa21ba94f2407a512dbd8450ad4dfc0de22dcbb291045e0fe43fde0cf1396cd3bb959f2dcc1f7ea681d0e7cbcc73e7fffdea35f6dbde8ba0079ad97c8767bf76aa008864375aa0b02b89d8bf2ce7aecb2403648e6069e209f7283f1cc180c166786d02d984afdc4f8eb9479522362fce0633996c758d99049b25c89a79f7257627e2a9557363a290a0a3673407a298ac1cc034793cb7ff44833c569780bb8be9e937a3a758f1c570ec1c4865efe85940c08a09430a9fd36376e28e127f81789e8a605405de9c452cf8c7131cbe37597c9a73eb47abcd2aec
-AD: 1b2a8522f154e672ae25f8494ff35d2573b343213a2fbb07a417d8a60510e7eb1ac5ecf229429f330809c84b0c1ac8f7e28c7f7414db905be8f5fdb5a2f818ba8440b8c9c20f8951b8e9b75eccee79b096ab09f4ec99ec394c7295b30d29060790d3dfc17d1321b8288f3be38b17901a48470784d00c5b53f895fecd4053de78d074fffc16c302a4f2718327bd96445318ad247c99c0ad4d06405b6509ba8f6bf47755f0b297c4616790b25edbac2fddc89b8d509d6955cdf66d30f2bdccac6f856a3206c53c550a9970ec450097ae4cb6f5606e64c750042060c477203479aa4da10edd4d28ad3df96d613194646abde78eee871638
-CT: 500fd0ba2adea1fc2ced2dce635c5296edc590f961c26c6fe285f4ad84f6e85719ea6bbefff398991c03a423931ff493ea47f97a8aafcb1ec7a34101ee8a378dac29f027c312306f74b6f92a6eabc829c3117ff77b6859e67b37d05d48b2c12bd30251d32ef30ddaa17894373063e2a593ad5139fba87d38a045e2e4e0470dd4c5555ffe6fc70e564502be523737bcd392d0c41e70a594b29f949838f9bfdb6e87fba327c430b75164555d7a01d7bccc33f2736864a2200e4b2c4d7b7192cd22f7549a9dc3ddda269d78a4d98a344cec44508bd930a14edffafbd1f25cfab8a29b75d07d705c3291de774af867e2e595ca8fa2bfb9fb3cf2511552f1c872fcc8b0878c4eec0fd079c7b17bcac2931181897ad50c03880102109a42c34c70d64ae942c73693f85a6d1230a734fb35f70c02c93813700e21b2abc304631ea9d5392c67864eeb47948b7e377bb51e3a5070524aa0abcbe0a624038f6e1b3c062b7661e1471d6cc3dd18143d6237c0e32e80791d39becf94974bd765bcf6bc5a3d764584b025317f64a67d13234399e8e9d10dfee9a77ba887cce119e09c812661b487561acbc718bd200ef97f76a4664fffe64b367bc36f7d03930f020e0b1db0d8d36103da1dc8dc6e0df00b2276d25c8312222c13d8a070b108a1b3a83247d41940681c59e08243a12c623c2f2d2a
-TAG: 7c3eba9d36b26d27a7a0325d8c23923b
-
-KEY: 2167ee6f77730766fe8b4ca6c8f02708
-NONCE: 96bcf14cca5d7c2184dc6eef
-IN: 47bf9fffa3f4815f8fd7838c0fec7e9c08bca51970460bc013145f2d651bac1cbceda192014a5f27c991ed3e7127903fd49a5b3a4dea1194ccc10eb62f911586314ada3aab0f8a5d53c90560da3681bd9157892ffb1a381ed33afe203e3c09748487a0b71b8703f6e5f84d9195db08e4c4338343fb8e968d9f5a5b1606b6b20fe60cec3b54b49ef7bfc81bdbb2926ccc79697d916c3b622871dfe9344699c509f9b2775abc12c486e71a008cd525d8610f51948f75bf96bb94c59c98f2e9f35e8513e43898754f7338d7fffb87e538fe6512832e5c2b08cfe952985fac27b0e81a4edf9fe8b9f2eb79758a99fed7907343e6be072bc93fbfb5a539142a18af4e4710283deeeba4e0c1c1cdde7e886e7d04f817a5efbe89d12cabb34153856af1cc98c4df21cbc1da3e34f0ab74842a8757a189336487d3ec77f842b10e2efe3e1e232fc1dc89d16dec865cf6e9f422e7b9d7a4e421d79657eafec5451e04174b3372340d6fa8cbd23fc0215e9b6d70a9781ff3b8ae049bd31a363d3fd465f235ce463f720e4bca114d21d3dc407a66f28df01549d168544478404256715161cacaf06d955f525546d384a44ee0570d8c70319bd33aa07b5ce0a891c467957d5ca4d2523d9958a8b4b3e5d3b0dbd1f6a1df3acd38888d8383ca76d177685ea6d2d65bd717203ccf794d613b2f4d50894cb12754bc95fc19c449bfc10443c5c1
-AD: 6388d98f7a8343cc89faa48882e8a60f83e817f17f68eb338289e2deeacc6bb5ab6d25635b9e0d29fa87ab97e5f29ecc47641e5a4e0d5f11d04bb25c7dcf21e7a93de1880ad022c838b5c957616764bcd2a66f1098ae4926a93e1726384171cbd9503e03b72c77a2721003d3b391f2aadcb32bd62e492528ea3ef5e85761cec47b846d32988468391db2f23fbfeee39cd89a45e71e4d4b29c6fdd8abd1399faef491211e902b0a99b451c58211c56b1a63dc2e8a57e6efab94ca95818a78fdbdb533f286b83725980b9bbac766d3b3ebfde01532e7ab1414eb6d52ad3b1908cf58ba67449cff1d605708d5fe6b21c769f99874249d98ecbb3c62956ebf6f47
-CT: 73c6a7d5e4fe14e991680acff32d660639e46cd0ec231ad155750e53d6597bec3070f5e828e420cc2044d5bdaea5acfb48cba1e9dc52258fcc5e937861e9a970cbd04f10fec4bebd6d8cf81a8925e5ae48d8024f7c62e35aa370994760c827a534e0a309655b3085a2ed8619dd0dfe0560c7dd5e175fc5a5971cdd50aeffa073e206d81d1932f350d9b3f40d4eb6929bf7957d25b1b12d6eeade7aae4b7277b6a1896aa0983ad5a5e5cb5e8e86b1eff15ed0b48149872ee4439acfc6fd6381f3d9527f1d1a1452927beaa3e3ff188681408041aea39f28bea779ac28b83a4eaff7406b08df2e60d66121c853800e56b3659329503bc122e6c47c1e1dab53986b2058685409c4a81b057fb6655de0f84ca770ed5600db097efbadc14f07d80cb892ef3ab12ff72e9d60718dfab82625a79168ac262b4069c0ff14bc5ea3baaa4c0559ef23f2535ab273e3bee0b2d1b4049f20e708fac2430af82a1a5d148164c19a956a3db8e44c8fc7c51af9458c066719884f0a192464c668d37372d5ffa4e2a4eff429cd57eff1b374d501e06b9d3cbf8480642bbd141b208ead6fe46d436507099ce460000aa033528a8d813f3cda11c8c03b427228c5b24b1f0fd15f704d7958aebc580bd5d3034667853a67fa51eef18d102d65507047b12a939f8a2cac8bedc027db855f89ffdad34bc726f6c6641e3c8ac8041003f65cce96cac54d
-TAG: d93bb140c5ad0362ef819fe04daf051f
-
-KEY: 1b63e84a8114f73f918aba186239947b
-NONCE: bbe2973181d9b48e801e3a55
-IN: 97b01d166bd2ec933b48bb7376ef131fb792f2a26edd267a713570c1dcac5a223646f6b52b0774ce323efe526b12f1ae59ec70bf6ff62f857374299cf4ae182015cc0cc2545b68d483689c82f4356dd8a06cae383848cbe75f08c5deb198c7effb10973b21fcb72cd53f6baeea5e23b7bf4508825111ab94535ed5ab9b51266d6eee98faf47b6a3acfee64c4a6598baacf1831a0549105d47b72434f498d54ca59041f07d22f3d6b177fe53b5bd874548daff7acab799c3253435551d963110d49fe1d2212b7e17df5b98a0884d9b7153253ebb73c0fe44485d78821a07b5e69bd446eae170e8aa718709f258a2a2476886757fc36fda2cd5230288b9a47d4a94b96c8cce880d1d06466aa1b331c0b893504fb8d6047b82549bfe807401d795d784584d608e419a7be990bf099694c788f11c29cb9655057ff12b4ee4b579bf7a52a36e9be42f06fd3ea2a8774cf70c946407db105cc88bd95f5b1f347bb8b4467e08058153edc70fe78bc8fc06f462ba5b16c5a56ce8a357700b43ce1fc8210c17af00f0ac8a19f8a73fb47815113c960138b2238031a74b610a1c45e3769155f6cdb7749d801b8f90ab5cd658f8f28443de9bd2e92098ad7915a6c68342255cc5f1abd5bba34316a297246dd2bc0f3975bf0037c3d17ceb9d9c9262b0797a6b5a90c72d4af4e662935bc7de08739ed8340397b78f0f7dd4f96a2fe50579a1e
-AD: 7754de0ce06145d6b247742ab582584c3b9c868cb0311b02273fe15f7a87403140b7b3bb49342cf26a5e68226a2927457c0f6b06f429c6cf5746b91ce5220e3b20cfca713664f5ec98b972fc3bb098f52c973a917f3b68dffe955a4fc670fa9c2ce686ceda47e060b291fc5a39fafc9489d18c3c3c08e580e492e35f058682e75e06c4141c38fd94b23eaf1048557c668f26da84f08718d850d65f8ab7a4e94c66fca8bf5ca345e8a966dff970fefbbcb88f3cc6b791ac03cad7708492675a2b4c54198b3f5f8906f3bcf2a56ba04666698c820309745aac83b45fa89e794d56a16fb3d00c923632c1d68fce42296729aba6ca2fdb2155a8000baf146e461c9c
-CT: c1e60f8dbda68c60024730deae746fe9fdcbfb9a3c1f26301a87a3c6bea9f8807ae294b62cb48ebacb01943818bbec06f1c842a3d42aed5a75c8103e07180d76f7e17377afdc4ed56905522be60c9dc5eabd5bd8b9a720b661f631dc214ec1a387016f57085ee3472df5a0d0366210aabfdb1ce23ed9480f8f1eead8780e33af36f9a49b8050749507a8b34b0695606b2cb78788c3da4ef316ecbf9500c257e8acfd36bf600a7ec4f8d2c690db5af0809c5799dc7b7788199601573d8d1a91a7c08cd4bee88885d73998c554ce520fdfe4153af13bcaa485477bcb5f55fffa54a4c71c5e61e1c3551ff7fa39cacafffc5cb00608be2b2d803bdfe43bfc256a7c04f536f4a9c383e6b4a3a0695d7e386f6ca8c8a35a77fc9b1d14e202bab53bfe6bd1d1efe3a4715bd150369403b6696374b4498186fed144f5a6edb9e3a863cdb4de5a6a404a0fc3702192cacfb36538e832b4aebba8c3726224f781c51c1529722d905286a1e01a9bebc54001980acfb9922d91122c9b125d4f6376599f0280651fe9efefad310e97fb06670f4b42df4b3ab1a078df2bf9b880fb91b292984416b70809c09e001e30d285a027f9b370e0764715187b797cb4965e7639a9bbaf915456cc4cc45505853ddfc54a38dc46743adf92afe7f37b174f0108468d772fb2b7ea00e8276663f6c29d3d83f3bf47ed8b1cc86bbe8639a564d936a3b065c4
-TAG: 0a6307fd5192f65b8786f7bef96c17b4
-
-KEY: c1ead957027a7303f01622d129eeb876
-NONCE: 04daa5b792d6d2cc4ba08cab
-IN: 47c3a0209195dc19edd01f1a4b54fbeec73c422b1c06558f3d70a2f96651db1e0364b7aab14d496a81b169e244f0f0657254faea172e9409bee2934fc622a7b2079f8368f53313790e1c06144f7f140468266fd6269b4f442a06606bdc9097d4547665f7fa192f67f0a14ff3a9f04092386d705a0a7d3a566b7c2e2b6ec9b6e6caa258ed2bef1ea747c6c80c0b494a5fc66906f5bec5da4aa884d38a6dc74af82aa94083106f6b8e182b529f94f4c389d6730b313ee8e656637ac064fed06561ea32b4dd3a3a128f3458c6e9b500cf3e578011e6b1ece6ed3fbd896119511f89db1e1719ca22a30b779c26803b278dadb4446fe28b5f96d3c91d0280dfb3976508eda8e803de1205ef65b3f7e4a41005165c5f3267b60a679095c25deb7c229ae7631c9df61ed198a9e7d9f6267bf288ecb88ab82dc3f210867490cf9c248828c73db475a757979894c16382fa1a9e5a06c081fec99aba123f6ebda65e07378026986b97a75e0f3bb74cc26f4b813d73c4c7fbdbfd5fdc4903a51d3064783309e497d14db09564a75551adc83197a30e3584a258722dc95fc187964f3207579f5d0caaa98d9dbd547cf2b854c4e820ee2fb4c4a1c83ef814e6bc48ad7cef6efb11b7dfdd41de49f1ba2317849f153115457b6dd839b6b5c84e8bd11419c553d51cb00bfc28e7c82718db654b4f8cc7f37b4ba96d09513c60bebaa087fefe7934112ead9e90d8599e184692ce235fbf5327
-AD: dacc20b8d41590570fd882012b1207ef4f33e3526fa3c64c4cb725091dd621bd6f2ce69c29ca39aaf172f05400ddc7af2af0fdab161af935409e3d5b9a8fb915a4ff8b7c0d4baf8f0a103be99ee7d21eed37e258bf79e18a81cd42fef0dfa465e04cb70fd8165f16203e8ed49bc2c3e88476aec77b466debaa6d888cf8cf013e8672d781fc5a8bbcddadf023d7208ed5f6f0ee2e3418158b653431fef54f821f38a69202897126f9a24a5793cb38fe5e8b3f77034e080dd8e4acc7fd22a12ab64a47f98f588e756fe691ab4c7f4557dd9b77e28f997d687a068925d18fab49f3acc072b33fb4d8c7a60f9a639b4b1d785c062e5d386261ff9e7066ed81cebf6f483466c0747dc22126
-CT: 1f2614433c137c7579ff19ed5be8e7897eca62f05797266174d4edb5fa4a22c11466b17d97d961564dbf9d1c45d9b6568d330761b9bc04dfdd31da08d3ddd4e5efd3924f53128ed541a6aab87912af60615da6dfc925b67b1aa3f1d285e25514f502eb5e92c7521da3492043fb06172ca74796b811ca42b349e337615f898233944644d229d05f133e35f879471a04efc3321094716c10b6f81ac7d0604096f287655362439e47641307ef49338a70bc87402b1c5ebd931300be51980ae8dec0345beefc59bd250bc53d39b7eed62f93087f3ba83b29ab094ab8d3143b63e905d209150c544e433d5ce41f00b65e0a976f5138db6ba5193245056734c7209ffb256a2f1ac9840f1bbe2e82c04120f591da86e253acf25b3876ab9e6f434489c43f606f264d1672cfd8a43282b41c34357497aa4f3a8c318f93694b4a04f1a0773ed064d4f426350dc7bdf4a59be0fd4154097c09841ec0df9c0e8f2dd31abd8513925d5d3da72624567a609975a815e9ba51df408bee244b4619f8ce981a6be726da484513cac67c2a4f597f6ac8ab0e96d86394cfcb5b6ccf2440a53a7181788a3de730c2e84e64a4131d0e02b8db2ec11f2af61218ce1255310756d98a0d594f09bd1440adea74720ff2745db30741e8f4f7bae0701443f55a078ee3c3bb63411fac0d7c7c0d0cb05ea56f40cf4137de20d9c5224fd4e6c4c6e8a5868116dc850ab713b001713d13e6ae5098c379b72e
-TAG: f1271cba346522f88ce93726cfde016f
-
-KEY: 2a7e7959ff156f3e69dcf4c3db8ccc25
-NONCE: 6d666d3700475874d600d6e7
-IN: f69a2d094c9c55669bb4b1f72583d23aeea9b858372c61516fb3f096736cccc3ecd74b98606a404a5a6195fe0899916c463092a749274e91831ef63b254a4c70b737bd8bc070b805ee42e5714b07dd4fa39da758de787340c0109e55ff4aaa19b05eb8e2b2ce171e4f9854d6aa56536b35359a7163557056ccca870012954737810bcc6ba226f6f38b774da0edd4c3e2d64ba4d6415d6528d7227a5a0ab222092c7035a8fabd3897bf9f59eca8692373b676b817d57f83aeb4f866c553b2ae1def7d7760cd152d18d43178b351ab4e23272bf157ec2832fd92b4d4e9085cf51da487779d82011745d0982ddc348613d55143bfecafa431a4b7cca9db82856c297682e62ecd1794a6ffe02a9e9b69814a6cebe50418e9bfc9e494b04afb9c0d6db479a8bf1c5d88be4c6b81246d8f4ecde7e3d4c6aa777277f705ef81962ff56d8174255519c00ccca0098e9370b675f736c86816dab838d7887b1d9bd638613a07b7122a9d55b4a7cedddda3b2337d3ec7bd20e499daa467c04a9d52ca1a02d119a62c6dade203a0bba45d3f9366e3f59a4abcaa62b6c08255d60798b9b0bd6205f2e24253dc75e8aedcc1bb3a525548479fa5363bc8176075ab004e7e73d0ac5f5e8717d3389f3287eea904f91fe63b5cd860091a42a101c1a1e6b13b31e2a7382f718dde735feba88ecb1ab41d042c4ce0106fc78b2397eeab842a8e0e5eb83b31d212501f265508ce73dddb94729433f2388d1925992f4cc6ce78d9be734466b6
-AD: 6d3a702bcf31e90cd2ff6a350a94689aad4381aa79708817b7e8110cb9a8fc8cfb42a277210526da057e93d32c609be4efb1fa4254c1cba3cb3c2bcb5dcd23d1acfe671c4fbc2b632dcb8ebaa952d7f6ee68e52a59d4933e27a54363c24f4cdb4c4f7ad2cb7c666f9afb811c06df7bfdc93f25edabc314a9a1118c2e0a7cfd219c10a28b5de83dfc3114dda3fd31a3256fc3c915714f1b7e83c6e66273b28944f7e9668de94b8e2536701ead59f9f7f7043070ffad0ff6fddea1d9f92a7af2ce3fb8d130203d0e9550d29785063562c59fe2a699172f32126f6176e9313376203cc1ed15812dce9e304582533a212b3eaf209ea16c8f83db448686c0fcdf5dcfd957fface636fc31ecf5be0072e19e93250e
-CT: bce5fbc1719b18299c54d224c2a0212cc904f9f58e7c0d8bbf1b09df0c2c08347cb36f2c8d145b5ebc4896a398b6aeeb2db0ba5aa3df6624a64bce91db2ce843a7549714a20404e869497e593990a1a6e62edaa9827288464bd7b37d2d2f8ecb6d67137f2113982d4ea3c23cb0f4609f04bfd73efddd2e4f05c4561fdd3615d82ccef83c940d39f4f7d548cac2ed181e4a60d1f280e25ef8b617796580069ab2fe8caa3ae4e3722eae649e390d9375b6f1b153e6c542a84eb70241e2272f2530940fa3e0df70528ba07747866fe51c3f844c050cc110cbba10d1f8d3321958e1e833c3f4543d4f8b3d20c8fbb7eb1fec4de7e99464c52d97e7bae8608419f1920c27ea0f479bcbbc61cd5cea10971ae2aac0a73daf4e90c47a023d620c2cb246d5e35908535bb5a0fcad54250a29fe53c1a0090794091fb5b3704c6ed52c8fef11271836250f39d8fd9ac5977cc91175e285192f07fd163d62216fd5530da9a048ea458c47efce109723029992b155809eb73a34b8bd24fa647b006a17e1e315b8a6fcb0e5af6871b4bc6f5d690b3edd10fdcc5391648a64d05f3355bc2a13cbb74d1892eafaad1611c23ff96e7e80f0df0819999977f9a2097617cfd13e8fbef089bedb532b331146d793d224d8f12bf8fa63b3b3d9fa8414d63a7618ce7a4f9c52d8c1b2ccd019e4510dbb3bf71f14c2e13452dc7cf859d18f54d6edad075c37a6ed2f05ce6dfa48421670b757d6a138813503a6ea964707560658861a5b95330e
-TAG: 85713c984bb8b5acea392525719dc9c1
-
-KEY: 5de639113d920e239a0d1581e179f9e9
-NONCE: 0b5bc077c27b08427f0ec327
-IN: 545c1a235b88be7e8451a5bf405d0dd66664a3bd284f74e4393f969380bb63010081457effe00a972bc6e4895ff82dd4a50e302261734da0efd66b0db1dee74601aa414cd9e2a4c149956bfd63fe0fd1f63f3dabbb6aaa2c651405e36286d00bd0a3c9bcdb8932c6e01300f453ec1ec28724b8934d26c1405f311b67fb8e97ee14624e2d6837bdd38a491a019592526095ca9169b4657d65486470ec12dbc793a42df7d7d9cae29135bbc499425775996633ea60ca5c6711e3aafdbef89ff1bc41d20550c219c82a8841ebbb8e152fdcc55dd689c7768a97720e23a7f9a80b173e679c0e2986e4dc00970fad5f8706a674bfc71901952b7b02189e95dc7207902abc673d09046fe2326168dd702a76328ca26fc1abffef071f58f968c165700845a997a2013b71c5d83cf6b6ed8d76a1b6d1417d22fe63691e88d3774ddf4ee205f352b765dce99ca0a996d33f95f853ba54f2f9ac3e6d1c068567695d06ee8f3c9865f034dc4b397a15cda23a872a075257c10ad8e2c6d3017ca9183ac2d8b80068a88ffa995045b96df11faeaceb7b41ad716122f08cdf72f9d4970e5315a8bdbe6e93316fb0dd8d1b805ea4861e99cf67a5c8cd3d24eeff142cae3c53eae387b4f51a45bbd808b7ca1c3b69042c33c8a4dfc93246e07dd93bd12c40dc532f3738084e47d38983f6b529e3f61ab8b17e0b588da524d0ca67092112be6868d5ae35102478ebd35213e7b545c859effd6a8240e0428bd480abeda17764af5b6ed4902977f21fd06e53061ed8b5bf49ea381cc5
-AD: 846f6eb4aa086447f4a7e5e8eef4997366a2f8f827238ed0cb5b691154f345b4586e1911469c0c81df93859ff0a39ffaf4930bd39aad2bdeed92d4580523e5244640b9e6d3609b022e4b4d0c631669e00571f8d602938eca0b3bf874c0706966e3d07902e392a6721b7dc57028b0bae7d93c40c803a03968b2142965ff03f92d6e729a0e079a9dde3bb30c9c10ce6a5627bb476cf1f879a51104f3ea6d0599bb288d2ba5e0103352372db8ad379cb629c82d212c1d1c6543a8070fb01f61f509c597e92a05f83ed49f2a1c1b3ecc64ad0a7d5884320f481dee5211716fc1c6ef96f34926cb5ea86eae04e934c6c0214eca8369928f2b0bc93c0865cc4e165f2eb1c381642560ade7956e5d69381537b796a11786e8f20d264f0dab
-CT: 04c79662edd08ad017cd48a6dc415f564a67d3d9eb48f1c7910074e6c3ae2d253a5acfa661377ec6ca3ba6693e77f2c97a9484bfbbc3bd261fdd25512a9c1e0d2058b0cd365fdab9c14f602945e142025009f87c13dd1dda03b0c49f76cbc3a93d928eee67627efcd146ab2fbc19d26955a646201800366fb17efa420b7c148399b262164c598cf1b011308989b7dcb699110338649603b58af4cdb5e7c2a306164d7e588fe115b4751ba0a83cf849c869b0155b3f934ebe5382e46db1d2d977769caa63dcbbee9f33568261c6c89856f75d597973d3b2a48508f2773d19252e04350b3c88a6696c3af860f9dc7cfc35e6e96279c92591c09dee7c23c02078e3a51af668ece6c870b7f0f65f6b0f38018be91876011b616fc5630d12ce936b6ab725b808108a472ffe55a5ddce340e5de8a279974c39c64a7f5986ec1e48116bec1b6d040e4e291f429c522ff61dfe74f2f4a075e0a6912bb6a6aa945db933eaa90d9165dfacf087a58245b54c2814086ad5f54795f1c9125988dcf15f906671bdf25da87d145dfb22c0683636c61c44ea9b3120d894e02b0d6f8d021ed8423b0c533a043f263ea3b1b06b5d5d7dba17bcccb1485cc5830e7e5b8520f9a1943a3560083e65806f9a633baa6aa7d5b99e5c5d69db446cb39716c415dde4ba0be14108ce32fbe50ec0605b0845e9469aca76dff75ae1f847dc5e14ce8b5455af8c2f6bbabf889efe1dd6ab408d983f51b143558c73fafd09132e22113b36426535b53ff2294acefa9258a58893d7b3a252f5a7d4
-TAG: 07153351dc975adbfb8b30d77c1be155
-
-KEY: f0f31be89acf8d7fcdb2a063de5a9812
-NONCE: a3d6aca502708d448a869bcb
-IN: bd3449eb7e893e3c96cd76039ca41036c8fa9e365709afa301c30b5430e004dd08900d75815936deaf9e7753d8efdbebe09c27426b55161bc0ab3fb00973d093ff6088ab6f309cdb1e40cd40d3f933e0023f0c210cc7ddeef2d29d82e0955019e482782462542e186467bdf9b866998a731583b0906ffb0174cb44499d2d5e3d1fa3577f7344c21362f77e94cfa981913d6592ad1f537c13067f8e7af921db28e93673ee38de0dfcd497d77162fcefc7868ee3f27c07b0d818eb553fdf7acae2db4eaf657853a26b0a760954331b8c91e763f568d65e658c6eb53a69ac6bc582c33f8146f6c8ad66d8a454be952425f3c0130e658bc1934db754d70774d73b40512e7a9782c4478e1f9bece80281dd6d8eed2cbca8d4bb08df65feaf79e9a35d075b18e69dd39ba1f47cbb694173432f5f0ef125a9b1902ca97820b6024ae5b49a880ee9e12ecf561ab5abdef81366019a8be495af1d664970178df68f38cd83b416d0076a522a9f3f795e2d2c19c75ada025cb1ef41513cf2c29df9a01e16379c101197da782066f9318d4fa0325bd584b04b1f9597070cc551693c964b2100191e1ed949c426fd2befebe5914cb567adf7518aa4574921516576bc33673e6ffe422c831e616bf6d03476af169d9c4208d7975460873e2792c209c089af7014768c0ae9fa8011c533fc890e366b04d1b79ee7d7aeec0fe89ddc7400d6fb8878ada40a76f65df17bf34919fb5ff7711ed698bbcd3ee4aa8dce8f879959011612a3661c5bee1a9d7db69fa33107543f111a1c416c92bb873bee9f01564b44922beb1c8158
-AD: 2c9c6974f2442b87c02cb723f5f3c05c78a22b7ba6c3387fea2d07ff58ad55c67aa9ada12563fb296812d087ef3b2d47ea1adb6a7dab646bfd1aa9288c85685c7b41c14eed3c5a34e0642b20888c8d51a65a1c332f1cb5779296051065211e5ec624930f1a2bfb6c10d479059063a2a4614999b0327d00f875162440c29627f817057f5151ba9c9364f0a6a9be85fe7fb911efdfd5cbfd741bfc63564f0d73eaa7bbf4fa16de77fd807bb27a9afd9e62c86e7033b8a969cb0ba9a2240de1a8e8a3463c2fae49c89b3cbc97e59eb30c2ae35834c36c22bc056a34cbd339ea469f3d8f032b5ae10eb00003025e55d42c12d9738ea74703308633f2772e8cd3421d8fc9d334c2845870a2c68c553f4dacdbada3af4ea8f20df3891aab8db9510c299db2bfcc
-CT: 57e32933293f67159efa04c375a4d7b8c8a050b0cc39031a3df3bd4bc82839ae1210da5f10b0723e111ce7d1699c78143671d7986f83fff90992ccfe9fa4367ef9c944cd571a3057a65cc1ae7fd7ccf2c722f11a9ae6756ef0a422ba7cb15a02e27aac6faf78fa2c2b08b228b1be5d3e62a5e995f9d3c5f1cbda1a6ed3f551581cf6693d678f2323e2ca7437715dad965024c8d5eabf68e7ee3ec090f56deadb47dff68e93fd8a38ec2b34d0e774f07793cb03d38921632e42b4a092175f6d602ec637aeb1f134067fb54594f33be2d9dbbae16ec25ea7b86a1a88346e0335d7bd2822a3d209a6561ea396c6128a86307da1c14d25b45e593504fbe38bae1a42689b2b53cf17bca92b4896c2fbdb4625d960bc03da9072910eae59aa17070a368a30e69d072cccc53fca2824fcd83ebf6d65e78c44dcf3333a00cf7eea5b3d311a674be8f46b696376f1fc5d70b727773582bd4a59111cdc41d69d58c52505e51e08e46d75372999f27628631c5d7497607adf4a1c27caf618a6dde1039dd33aa7834eb5164e67a208d473f558b97c3442ab23d22081ce024fe616e00e09a7d14386ec3e0089a0feedac7e6c841da57a13358712b75280f72afd0a28a3f5555e024b59d14ed108ea4fb77510c031fb438e6cdc7b4b6125a387e76081ab8568216a6776b7b52d311f48e882d62abc81453d65c0f5effc4abacec68dda303ecd225ed8afcd5638a9c4f5488d9f8963624934c1abb56ba0071bf11d64a52443aa0f3b607557ff340937a53fa50031775550925b2e8f40c744c36317797a952d70207cff0646
-TAG: 429a50441cf373d8d1cc4b37e15266df
-
-KEY: e4ffeb5ff128eb3c798dcdec4c665a4e
-NONCE: 7b30ac120aace497d03de3d7
-IN: 26638db82034a19df83e60cedacfdd511a937ed73adeb1565661a201197eaa7fe817bcd9b83a19052461f56c3480c0e0d3314c57aad4f02a9e10afb967f752fb144bb1ecce66ea05608ddc7c876ba95698b04e79a429d36739d31b52e47fb032b18e7686923700e735750628ac0effa74298bdf7b75c115c6ea30634a9636c7ec5a02aa467fd53292d8991fd2cd45078471ac3bd8dbe47ad901047522e82cadde3b4f9d0a1e2b8c6faec2da532a09c58acaf7207fa49c1de10f377bcadc903a3df381a10ebf7556465096a0506e7ea0e7f11e00411f226bf2897f85791d6e34641d8cd049d95d996bae9dee6b2417f558f102a04d758897c484e930cc97d13f540c00f950a1b384ae5139dfaad258e1315fe76b22a601f7a11d852a080c228065f423c380393ae13ba817f18afaf48f7df08ae376d62e770b0c98e49298bc1f6f1cd07b586128c42d2196d26bc6752fdb375a0edef255d139b35841f426f090f270d5153efe6dcbcc2f4d4fe19258284b98cf70483996003889958a7c993fce98ada15a8bf16137624a2e078fe16060b640155615ed55df21d9bd736df51970f11b06775760116ed1a624588052787f6e95c93cde1c4661c9efafa2d2f217e86dc941263c176bc9e15af02b922e23a1839cb4148f82e8d8888de16e17db10f659112ae0f28cee8c062f34f44304e32fd3713cfbc830699e6aab24aa1c829bd582d39c4262c625c45bcc81b5e07289eec77fdd1613a7e4955aa96ba05c45676e973b609aa6136f5e516e338d183db9523c3e2fa6d7f603bab7b77e7acaf5f144e9a301a221111ae8a3130b0a77f638dee2e05d4ebf3
-AD: 14fd627004e9a78d1334822040ceb4863196a75e5c5ee70861381d6cdf1363a893db2bdb201357c908284b91d690770205be495f788afec67f205edbcf47b78fdfb6e1ca53dfea501ef7fd48008ab05a58b65ef8e3b25cd3617dbe7482d0e846d04d00508192373abad114b6e5713f84de6928339d5c57e4abe88f0c0f0913324bdcc661fc85f391aaec28772df8faed4069573ab9ce2868039b7971b510e8b9239eeb066ddce13e2fc2579b159b08ca564de01fcc32abf19f388f0a8e810fb4de96e19d02010b75ca55d4d6db6c1a0d83d36a9d30a980f51e8263bbdf18cb768c5d912cb1ee8394763dbc7e9276830eecd1c92541ec53e9fcb5be036e8fc2da7c51e9b7978a7fb8e24182825d8a219167bb925dbf639edf4a25c42ab08a7ac8013696f7e10cf0efb57ce49107
-CT: 7ef2888ba3ecb4c9e0b96414504cd46365885b6fca375534e3dc43d4fe31b61acff2cf2d0b698061ecc1addc1519e00b1f3e59756cf70380e9d83352ebde4fd680fd995157fc12054376c690ee01a11875b3e833de136a8e16ae08e80101caac4e7a43042abd81cae91d2d0f98ec0b6fd7e6232fe351df92aa847cc11044a3e07f3f4d8b8b64f039fac77c95f9057cfefa11cc795fec334051a81dfb7e08cc09496934508423cb75f8b051b811179e37ee63346ff3ce1f1012117b0ad3c03fd113f7f932da558244d5809e6af429084e70b206f4dcddcdfd549246a548d51df1fa68274416b27cc2c12b3a6a86d9bb80184d41a3971c9dc0ed906aec4ec85e9eaf4e8dab1704f6ac3f7602b0aadd1ae4ad91755ef9a08e231535eeab932524b2c228d10b9cca1f88215ab56bf776183b9c14b2888dc7dca590f48ba6fc7e974352da98077d0d3f5de4159025270eae300fba5457611cfc4b52846ea1fdfb29ebe4c260ef2d0d61de644cf8c7390a66d15f806299ecfdac0d6ca83def3873f960bd5b41d05e9a718fa0329e2304dd210f20228d7da87f08bf477deabeb93304133eb38439f49e821ca66474ba065c8c6ceff51717b36297eb17bc739feb166455b79d83ef6b12506c5a877f9e7237ace4e451a17969de2ccefb65af407a1df71ac99856d485aebc6492441366fbabdd11c9ca559bade381672c8497cdc86175d2f186272c9b675cecb365f97dd547d14ebb2bd306d80d83b40e3d4a5ec37812b787b31b2464917aca278bc5c3ac7e78ba6ea0bf3744b70012ba4cb5f1b91703504ab5b0134d5c8071ce1f16218c51207448c894cc1b
-TAG: d338cecd6bdd210923d8ed507612ff85
-
-KEY: 58ac0726e0bca5d30bf4d0a231fd1242
-NONCE: 0b9b60c3a690e0ce0106c1bc
-IN: fc47121253347bde0b02845afe64a46c74a401fea9f81cfa02d47f3c6008be65031e26b07d05253d0fbabed865397284b44ce2c38b2117f90f7d3bc60a0d9b04c6ec4b5108da61ff7f6d30083a33528281bf2b543bbb2eec909bc8706c892844e0702f224cafa9f2070adba7e3942023645427abbef47ffdb9ebf43b24aa7367deb7d05241cc5ffc0d1e07554545ddf0f6bdfad4657222fa561f3f92c83fbdcd5b0b93921842d2545b386eaced2fe37d0e5601bdb969125b006b21a8283d8cb5264ca2d8765d2bfe24fc04f8feac32293d88bf6a3bd7764847c72b07a9c3caadb47b96eea17199713eb48d03a8b37897defce70b258328f0547392e7e82e2a1be53c8e40d58235f610ced56019a0696b77b16ed8bcacde1c142bc3afee168755db6b8d81754dea34e20f6a0e35ed9da60bca3957a054916e0072e3c5329ebbe2bf8f224efe6d501e0105614f72c8e37f2cb7cef644baaf7bf32975cba8e519034427b49bd589d076e3a79b2a9c90170d1e503256389ea444036523d36486bc2d3a94c73afff7bb2b48d0d74b7607c3db43186b9f85102a49d4c0e3cfff1dcf8b5c0cba5ab2f28e1dcbfc858f57f585d5e7d4ee92eec6ebe152e4b160db923cb8d9c154b631e3340b61272e0726cbd88298a4a6dd1d01fabf67d9c66c4681019e13a0e0280e91dbc3cf20e583b4a401dfc57cd3bed42d7e889182a0b75072fb08f1be187b3c7990f9f17bd29d61b8d2bc93f1a78e84fc8c38c4184afac57f3c6915dfefb3e194afa3919fddb1efc685931e49129e3afa230681fa6e7c1d6a69be66d0317d0497a937c827b1591931dd17e83207cdbd56f1ec1270b14d9a7b1e2bed3e10628630
-AD: 0bfdb282f9e2db0a43c18132b08093892211a8f7b210bcf36120851314cbd8a56f80f26dbfdcdf944fca9148c1d013844e897b034843fc0c8701120062102ae6a00aab0063a1651e0aa36aaf8acbc221ee7575748562288c08050a9a562ec43be7fb3e54dae418ae89476a1d5f81debb13eb6c5e0b4796abc8310e70a5e4a6619923dd6230a7b2a8dd36fbe3a29aff8a2ef35820ca68b07e00f63623db10a648014028d314e01cb537973d03420938dac988e7af001d571fdd7b1606a06430b5fa1770b2f30f53cb439a02771140e44356c3bdb7ebd5e7af10c344396bb3bacd58d32f07a26768afa741a2dae4e91cd8dec01505edf362f38b0fb06c40b8441746a8ec31d9aca6437d1b75b5afa120856e3d87d79ea5b71352edfb56a873d206e8fdc5d5f0bcf91c0ef1beb06718006bceb35f71dc0b
-CT: b03db471a65de5cf871ac198ddfedd14e66b6fcb6c42c782a4d3c156beb2024a1dd2cf5efbd87884b029f42c94067a42a165c1e00018f11cbd79f65da02c62fb443ea8a345c34b6411112844eff3572427e45e061913bd578624100e33908ab9737140ae0fea83069fd008af952c776459c6cbd4ab9b02156b3992c0691614567056865b9f39b526f28d11b7707f35ad09d1eb0d2f6adc7c66f8832d8783478166036d082af1a44025a733781cb389612e3c124c31c35ea2a7833bddd053625d96d2ac3fdc69dbb64b9b7fcbcff6c6fb891d974184734d3bb4081d7609d7206067157954b4c6ab68e4a450f01f5941e1702830a58667b947352f1931ef721739be452aa083ea17344cc0a3b5820a90b35bf45ea00fc06df7229080b82b79c3930067f6045c619624958f77096f304d9f31effe42ef405ee4745f1b6c101225062a5bb38665efc428313038a3db8863dcc72de12c8ae41eb1a7b8eb02bd5bfb1f1ccdb1db877ecff08606963d97958ee7cb85b99c5f2ac4f91a922e180d7f3a3b265168d02829b98b7a72c2a2910c0c8c654e354f2e19a53618e4e46501ba8c13e8ee0081901108a75d6b7f601385cf6dbe3f74b3634331aed8eb903119ee96877f90d491dd5d38abd5f002c3cdbd57b04a7ed13fa09c9e2058744e1fa24d3fd87a863a7dd73cca389e40b7aad29a95d6f7eb705827f7308aa4ec9b07b1c98c225f366cc33586bd08e20773bbe0878711b6210392900b8fc933a6a661b8d6fd1a8338d06ec364f9025f1a79ff94bf448b998908c22be5cd6c1aff929037af9b642ff228865137dbe2f3f3813923245c3edc8edd76eefa02d40e7850e502e92e9511571f85fb17
-TAG: 34213558263a230e66e80c4095fbab97
-
-KEY: 7b9f65509a00841930c4087093c0e049
-NONCE: 45003751c40e59eeb10f62ec
-IN: 33f7a6d16717804519e930bccfce78c316cb720e109a75b30e11415fc5b398b76cebcdd758535798465a8662486745b6ee098f9008d0cccbf8ce2066b12ceed80cfac806178068d2ccdc00ab32d73faac0cba72b5ae75150c13dd0c16d85332d934e56c8f96bfa942fec689e9847283a307ab775ae09cdcdf1c0635f749186868537dcf0123baa295e29601052297aa4b3fbf16b31620aeacc12d08345df8d879343c098372a04d32fcd2470f4bdb3aeeac7afcdd8f95695796c64cd41bb0052905c8b95edbd0bca3e9115f119d29e109198e91b9a024c8a4d67ee864b71eab16d4545862403bdd0720346c43e94793b1ad3f02946989c6e30c978e4c62660c4b1120bd49017203c86f5b9f02bea17a249d6396e390df1abcb508388c735565ae471a3d24293cc33aeb1cfb05025fd4f17b9382a391d73a2611784358a9a003c1ba16f493f020b1f1545555ca165c00e3bb4a2b855d99a91d4f95534424d3b8b32ba66fbf3de63694b18efb4e0aa62e438eb3a7f50b0551ccb19eba8b63e19bef0e6468ea84b2fa62d0deb181e8c3b00a55198eb69ab7eee2352989013fbadbb26d1c1f5033b26f1ea886a0d1af6c76a78cd09a8b1f247d6f81d7d4e521f6649de7fa5b32b45be2cd803a1adc6fa89eea3a9d876ed1df0534890c9b41627556103964aba36e277d1cbe56bc14458e75c365a58646b7e498325bbe815e645a19bb33d2765a36a61e74eefc32ee9fef4162eb77574638dea2cbb9753e50b85eef07284ff84996a5969af62090ea20c6af307c1b2e56486f50c13d5c4087ed471dc737c4e40b7bdbe9d74ecbd6c8dd0892449496d0cba16e97c864307a55f341121b5e35c47530a9c3059db7000688bb568f4a87be8eb8ff9
-AD: 7b4f599c829e412edfae60ec1dc53e15d608021b6afa827f48869b9c9ca017a394d10f814c3172b38ff27ffce750085c288e257b6a2d7ffbbcce9e7acfb12cfcb630c84448329483739be37ecc1ad122603a4f286a48474134550b12ed8dfff73419494a8d251a98fdcf7c329b0e31b0f9379faa6bba2e4adbd429b199b7cc31d2805250082a88f94d3a120a3b07d0229d4a49e45f2729885e55cbb9ae08c88b65576fcb8a96ef23b629422ddbe7497fc2d4baf812bd03a7d5c03e79cf522938337ebd1c9cf3a61d331aba6b436c21ef47b030447e839b94b23e6ab10ac09a1243081544081a09cf35f6c7da3149fe3c8e41f90da05d88e31b32744214ac3a8a0a9098b11a38abbf01da170d3115fd4243f2be6eb8295b921e687755d0baa3fdddc1fd9e8d78992f08c50ea9caef49989872bf00b7f86c78293896dbe25eff
-CT: 5ba4306c0fc5cbc0028d54a82d2ec3039f78ecefbf3ed98f5b4f83d1b562be3c5ae66756dcd2027a515360274837682ed07c5f1a0dedcfe3d1e63457f9d4020d2b3d57d63401284eac89ef0cd16bef79aa949a5b3c76dab5342e8042e2e0d411816d311aaabd8aa10bd6c18f72620f824156bc71add704e0ac4bc1d4761f9bd1e31f800d0487f3bec7a788b0cea75cc0bb4ebb927e824bbc718236b089c752de68b4fb5b4bc1ca67e166c23274de9992fd30e0752ca561a4c5f469dd123ad45870dc013a47247396afa45ca5b02fbda0fa1c2a89180214814c5bce704ac4dda5be49af225f3a745391d669d7877d1ce173058433b02b714b7f9b43095820b73069e8c3fe621c45e00e41152a413e15bc750fdc517568f021645b6ccc541a9d61237090cfa6e374942adaa1f18d073e627195164fe981853e324d2e97c35819a00cc4d668ab1b8dc86188ba2f5fa76b3ba2303bcad2ce06195d6e853f7e0d257e386764067f244020d9660ce04bea8d61c5a940f502bb68ab6a62fe2e7492c3aaf355d313f4e2e2ca148fa46673848e59d744567bbbf38ab0ec0c799712053d0bc25532ff00f02a3149e6bd9df268ef8e1fa31762efab8102f6fed5768b9abd9bbbac89b40000394158c4c5d2bfe5f3dcbcb5126afb0f753e2a60c8aecc67782fe64f2f35fcc45e6ca4b6751c40adea4998140048456944bb8e2345daa95e989ce48378f8c607182d76b25d12f731b5029c245e804ae19d170a27f35634c64a1bcdd48a6b573959521d388e023650f427cd1839c77e0d56b4511d1986dbafda63cf43b6fe929129602a5314d6216e662cd1659d8d7bc6c271589aa4e01ce45970efd85297f00eb2470567e69a67bdd20fa4ed8b497879fb
-TAG: 15966db2d710d52510c55082f0c3cdb9
-
-KEY: b4cba7822382ec3aa42a95221eda5980
-NONCE: c488bf7ad0031e1ed9870968
-IN: 19cd01ddbd03500b348a15fda2f9cb9a870df388e2e7f84386fa33fffd5287f1cb795fcce3a24fe371ce42f2f34dd8db9d1826b6a454082ecd0dc684bdf35d3d7e7a9606cb5336c67238509f0386275d58cc3ce7fc98fd20c77ecd1bdd463ee40e612cc5b9082f3c12b83f16c32072834a64552549289ca767acb23c61b4030227277e0df6ee9acebddb0c3bd538040398ae57767c850066b40ac0c1d7f5de22747051d237f898306beee05273a99b20165c2d7267f65b5451605ad4301a82bc80268b49e3084957d8ea8fab59a6b31f47f76405f5575df8a16a5811a976a84ec23479daf4d1d2c1ef428a9ed39faeb5a625ecd25e04d37736230cf144eeab686180cc71aa713d522c9f2007aae4eab486171ab3a9c338265193d093fecd6feb1cc1d91d10a5f2dca9243d12747b5fd3ed809c06f52872136814aed50d61ac932fdfcac2e9ceef817034647b2f4d61f5a0bde8ef9bef2789a49da799ad1b9bba440a29e3e15e4d97b99c0fa2abcf5cf0e05acc89da732eb79585cf1d6c11a6c65c2087f902ce230208b5f1ce6cde34711646b9db725858cecd3716906853acb06c30c7dcc3901eb407efe6c3a8e1e9f9aebfb1d7217cfc6571fdc4b86d17d66d6e392ebf03be924c0076b8d1f8bff15e192cc5e351351fdb6b26364d883581c3f8e769e9a5689d0ab2f308a1dc47d7032de91124b1ca3d42aa3a8d57ed92a97a2aedba2409b38023c55954d4d5d2630c4dcd5ac7277fabc3408f0265560d3de4114eeb0b10db4d5270725f4454dcb1c7fcc1e36013a155b03181e1a315aaa251e9ab00dfca8e9ef787799a23529fbe8f0f993dbc2338b9f300ed18a67bf92c600f22d8039a5b03db114ff04aef285642be0d552cca24b615bc1467ccf9818929c06e96599fe335e0
-AD: 6fff534915999ba3c3e7ee9f964ff4c3774c1c63ceddf8674c9c43cd4874f34e22c5912e6f8eac3e889779e7b4ecb2af711665489274c3201a68d8bfe7c61e6e8134aa08d71ac2a23289eea43d1dee5b4fc4caa3cfb666d59b09c554bd924b6522cfaed157519de12d9bfa37b55fe8158d763e3c79b7b10db45bdae4ba18af925bc8528fc19e9af54ac81588682299cf0997eb9710fcc3597564d8f0b71e3249089673b3771ca110a28c1aad49f32301e0921286fe0cfdaed8f64956a4e2c0b22011bbeef46ecc6bfc29ce023b361b2db0488a2cdab32bb94024e757abccebcfa0a672acd77f9ba622a665314c4b520746ba4fa07488e9dc662f755311535f1f98558dfb2be88a86119850c49d4a0bc92e70994ab5d7f410ad20d61fdc93a08e460ff9628a5b242038a1d2905137d4729fa77ac0f74bf1d32fa7b025cc16f800
-CT: 0fd6ce7a1a51060fd105fc1e5d7c8fcaf4550de865dc0f990217c9e32d354a951bee16f53be1f9768f48d7f76c9f2ece7fc56b9e8c27ede94b5a3250ef27874eeb2dd09d2e50810afb7b9a50985fe28b7aee74303b178a0b74c5422d4f46a59e55bf55d7eb0d16314668b13952998205eb422daedb9f99dc7e04e11e8e077289d1402a1d12608e096afc6283643ca77813730bcee2321cf769c5cdbe5c80836db9814843a0ec72d49ea89ddf5e48e27f1e172423412b78fd91da54b776a132df29fffc5c8b41615fc491c43ffa4596430e55806bacb7e88abde1e20ae43260a1258e7d89ba46fecd08b7330409a08449ade364fb84ad1dff4e71434a3369a1d20158d02949edb9716b021271f73517bd985949d2dd62474a36e57b2682218ffa2d5a982c668a52776343d06ec4bd122d5a1bd5ab5b691e4462d8c52226f834290258a83ecf0847246c92d4339ada867f107589bd8af55cb96461aae47a879f5d81c3931fd653d68cd5139be7ea9b98ad8feb9b453f617cf7b8a4c9def78335d009d4139e66e10f642030b5a66fb44d2c07c8c689383136d580b399f685137b3054e40fd7c90f37ea30d52e09832b66251cc9c31156729e9cc5fa37463d89bf3b61a8f8657f6501ddc3cf1505fad36d4d9075f7a366050de98eeeae0c407b31a5ade0b29b1a7a3cc251ec8a918cc8239c3208b377f2e9a7df8aba3e086c33390bbdb4498ee5d194e43a67206e797d22a7c64849d1eb3921a8323d8a0c7d242f3ad65e52b992007c996dc642b858fb7ea7b1d8d6cb10ed3e9af7595367c26d4b01d6c178a15179ed45d44d83d7709503c85985bc1e2cf6200f4d0ff02e57ae4c53c012633935871028e3c7bf0f5035140290f4cc02afce10718198dac233a6dd7ab4065f07242e173b
-TAG: 8ba94213b2a8696d7e203e6bfefc1c99
-
-KEY: 4233eba54fe7537d0127b1a062526d33
-NONCE: fed44fbd3475daf5c046123b
-IN: efcb6ee574ffb9620fec7644a10643908a2d3e283864e3011704c4b16dab7c5333545c60ec83b0f7c3e2dc8022ee5d1b8124f766bbd8fc95ae1a5bbbd2ba7eb5c41780627553b8ad99643d8abd43c56a32bc159ab97f1fa4622cba34b283317cabf0bc98931980f207efcfe6d4c4312cd9daff8d46b1f9eca45e0af42bb8b8ab25a9fe0caf1c61b40b1a8a3b35680abf456de109f42d87ef277ca178b4471936748f3232f9075b58c64c89614dde8a75dea86d3b9c2a6c4a71ccebf388becb7a2cbedd92b4ef95d2b72357b4d2ec099a3ff9fa9ebdfd1d9adff3329b0a4ab854f84e8c729538b0e65773a116a3e50685c96e52162e1b98367114d84e5476291fea3173ac3a846529d5af6ddd0d2272b54f534d4430179ce5bee98c3a9d3f6e9cd4d7cef5c79560674ed0b5418e21e9cf7ced787a9db3427d6153ed69d84ee4ca06c515d3822c6338868dbd97d0a21406275c003f493475d4350660a4f3afe49deacd9f299fc05aeab4029f57d05e21cff132cabf6de6ccb3082e0d8811dbe5188749a2ec8ad6b1c1efffc4031605c407e0c2ce57478b37a4834bff670b4dcfe8a32e6d09a0c80c7c99f7cc41378efdc0231901c7643bc8e0575040d1ac1bf4a79ba4c10bae1c0135ec4469bc8b6413a068ff97e88c4be959f8e426abf3cafa2bef9925aec0c1ee69eb60c7427dbf79656fb3846ae4ff059852e7686311b2778d06b5a7eab71ef92bd086ab0de7dc2a3d4c6070436991a68d81ef5b1c6eb024ccc6b2668c98e9b2ce452ab4751dbd57c2794798f5d9262e2df48788d92045b23a455a135c112e3baf06f2938a485f874a7d5a251770160dd9bf9c93c4e2a789edd07b8a7a4262adb303ff6ce9c551be29dc69f99dc75a4cdd53afbef565031529cbce2ebbc5f98b71315ea7dcdea17c88e7c8b3c20da68ee6ee
-AD: 4e0126b67d2a31e1755e532178b048b572f806ab4bfb398247b393dff9c653a452a5ff88cec05ba1ee8ebf23e91b61b1f9adaaf771f448a57f4572d460b8304f8a2d6ba8a8b89e55d13e474233cc8da704c244c6862adba31219d994f302ac7161604d324100241fe6762ac262a5f7b5a07c67cf3f647d2d60846ade2dd33f886ebb59c50d95a4a0ae103438a65bc192d03f351e3e56b6da169480def2db510c83b6ca91534683cf334134afb2491026f7aa45978aa38b38d6a8d193e9609d3d0b3526a14f7b131f9371f56818247ce4fc6e1b17ec6e99b67123e7e34faaa8a8c63c1fb9004604e5ddb32702f9be2246ed7496dd27fa90ba90d90575c0cc45c0b9fcc945f21bfefbfbc82c53dba1feac88db291f74b6512d45cd7a4c5c886a458947f0a30ee04a6866ff5472f6c921d1949b8ddfd623f744bbe5f47950dc0c7c213545f7ab63e88124
-CT: 4b9b468ed1b1b3ff8242f0d2f204e94b0312443ffce789fa9be7c56054c2392868d8826129462bba1b715d87d58eb5521a258af3e9e06d90e26702106242ad01ac6b64908f747306dc4ca142597d3021df591b60cfc2d260d9883f01078ce4db4b11eca4b7b4329962a6e5445857423776b22b802bd0eea8d7ce7d1d47d49a805d9f557b8d67926848668d8bd04cd2a9eaa0b118b9e680e23266785f3641630d2649d952501972d92f2c6e5e7ff9e8805ab3fea94e4d069487ab6767da42a6312c74a7191310cbf58995a94158987a0d3e6778f3f44f21c9e6c1b08029d368daaada4fbefbccca7f49e2f8c6d754286287ea93f69c72f3234acb2e4059aee4ff341730c9deccdda06fb67ab67b81cf5e5213b7c86b03c00ad8e447915284d5fe4e30ee2fe0fb2ac2e5a58c0623c80b40e6ebc2b96a2d5e045419fad0dbd611fc136ca032e71ba2523b5cc45f115389a9c9ef0a28d9b949b84ba637a32fcd3a8687c70c7d0bc4f27949b37d20ed349ad0bf1985e33f74b6974dff70ff72205085c766469b4c32bbd93365e207110b55d477347db18fd003c925b64aa4366212585e882fb5a5643d79cb6a9057e977b554948bf8129ae67ab02ca57d5052cfec2949e86f3c6fbf7fe0e1aeee3ccba5752bac7abce9a396fb6e5ea3af059ecb15937f34aba7fc8edb267ad1ee18c49e5e6f057ea5b0156093c6b042d2e7b2b29bfc9548f91515a6272aa8b2bebc5a0b0d9d610b6c911a69c38d15c2ab3b1d774d68c6d5515012a083dd0cc2fbb420456b8aa174be28502c2bf22c7af3a89686e2997f2015eeb7c33ba40b676b61c84702a3c5c51120dc290e58724d082281b496881a54839e6f0d622dfafec125b381da4823240cd960d63a6890c11fdb9f56a9fc8dc172c98a3764eedf804d1f5f56d4d9fad2d414bc4c58466f
-TAG: cd1e49972dc4c4e0ad3bcdcf16e692e8
-
-KEY: f79000afa6ad2a10b0dbfa4f34e47542
-NONCE: 0437dd10d487f42d2cc40041
-IN: af9ef3a4f52f80c9cb25970a4a4af8bc7dbd8fa566fa588d57bcb446b399336fe43ebac2a913d74d0a9f7d97044213390372d4272317fa41a62c50bc2b4d736a759c85124562323d86f1de14fbc3899472a0686a5dae4a3e429efb05681a1d7a36d397741270b2d97aefcc3d90309365a64a0e244d62a4fd3f288f706fb60557d9ba2bc8e29b4d68a299f13ee93d3c4ce0efb7fb26a3d2f828c1268a04d48e5ed520c5334ccad9df4799cb58ebe15284a41aec4c2b9157bd2851f968a279653b3c9a522df5e2752f75a3819d4610ceb4da666d19b347f09dde571ccf14b435569b9624d3f3207ba49b05f40bd818c7ffa733103f9210cb821ae8ce1fd5bb80a6d3d8dba865015b52ad9af765a8190713d13890440ef64474b61a840618759160c4c692b5bfae7cab08f941d633a22b92d8be39a614903ce0f96d05e83596b9ab4cbfae18e4e8bf4ed0cc481ac402f27fc81a0b62b7843ed4387f2e994799e0c9532a1187fa6706d3179cd8e3bbde209f85836a176e43caa2dae384f0331092292872474d24fcdbe72be3067f542e7b099d31a0b09e0f2c31bd16caad1fe1af0f25845084268431b930685f6a16fab6a401a80590895a3422b94d056038935b1182ca3e6f4ededc86813d651efb0fa80e40700a0ceb602f3a67784b60b8d5c8522e42519c83e6f788d8133044061095806506cbd0bf3a7fb94e1d59435d3a5cd9a5a24db98f20035f0feed9b12b6cb4cc3e18c97aa890d61acfa167338b1cf79868f2a14711fcc241290709e800babf3ba7a868a528d44be867cca23f4f80b1f914ebc6abd630b4254c1b8e01241fcd817171e2d9969d2ba7c3f410a9d5b157ae0069b97ba1c973d944f11208777cdab373131ab5ebaa1304e394770c1d277913c54e7cf00c13e877fa5e8e0572f237b646f783db2f30274ba46c51d72d751c3bd4ef9ea32b0a22b260ad
-AD: 3ffa73ff1c5c481d15ea2246b6da59e6271801edcbe277591b188386946abead76ac40d6f2f08a26129895e97ef25b59ac345f8d060d4d21819d78402279238541534d8734ca66427ecc2baa6741fd093a5895446979e30ca15eda06addb67bec10cf809081ce8a70af92b03f72536a8a11a1e9e3d257352cc284f41e2fc4a91d1bd1774512e09bdd150d1830be260ea418fd384be30f9da23fafdc2c0b5c632ea7fc7a6ea87d69139e9d104d634530a02c4ddae3a2e6854118369e5304202206c4d8fc963a61bb4f42ba6f937ce8281429db4103ef222c3a015f08fef15eb5b407b56165260dcdad08f1196e3d698ac5b7ddd403c28593329db77fad8ab7aacc450636a4f7f6714bbc6dbe10c421d151a7c135926c5388a56d2b66ffeae0508706ee55899aeceb3525367234e29c25dd5bb8b187ca4dd14f68ad317ee5ab3027b68b5b405880528bd35eda7f9c65eef9b37
-CT: 47d6bd87f0ed8dd258b32f01e5c72457dd1d17982f1671310cb329e18fef89f25826f7a6a9abb54d4d216ba214503aed4d7fe36daba69482e4ace4b7c7a91de5a93774732e0bfa001947d8c403165473d77b6b0d53bece68a76cf544583980084ea5ad532b599206b2d618be4e56cc22be645a727a93fd73c434239bc9c0b2d1621e3ba63e625327cdbfb8f7b13997c3d981c340182aa59a4e8cd204c5c86e8c531019f4900410c6870a1bce9c5e4f81bd8134c983f203f7644577da19117a7432c9a7713cf1bfd3bcb055b8601f4f44d33b1191ae1e32ae868bb37ff5efb1a7f67d94d993c0c50074346a6b41da521633be46e299916425fd46bbf4593b1c02df98f68debfcb43fff6a1d7ad6c4b48296207d74a9504670b50368f2f6a2d89f6fa98b39e13cd46fcfa746dc533c8327a0b07cc89b654ff8ceee471eb42f1f07b0abde3ab49478563501e076622c0248bf8e82576e968657fb0efa23a03c3e3013098e86e44a40d21fe0e640cae3da3a461038907f9610d6dce7a1242417bd43d26ba6aeb1e6e3d0e54c1b9839d019ed409eaf801ebb6fb25949a4961b35fbdcac81c9f87ba8e4f7103984ca6d8fbd3d3aa7b13a9ef1bcdfbe4f6d4e6cc48e5cddcb057027f98ffad2a90a7d4fae9427be8e77fb6c30ac38cae71a36b28fb47045fda28a027b1301fa5071a262c5d1e0a695d3244218a88c7182590698b690c42a3cae97ece7b7266aca88dd8fa8f56ef08c28d806e7398691c31f292caf1443508c494007f5de45a95643534f3f0fdd20790f0aff8d9bb432cce36bc857884a28d2dfca0667a2d7a0b0255fe68a2f9cbc28cacfa489fad9d3101a5a6bac3c39fab9a8223bf5de787fc3d9849626cc50466355df2da389c5ed8301e24d2fb6ce3e8081d32340739326b706466897cd40265cbc347121b6e12e04c218420ab7ee760e9eb6b43fb4e4c530
-TAG: a2d58dfc6f1a7aabcc28cdcda713735a
-
-KEY: 5dacb5173b30a28c99e00eb11181879c
-NONCE: bf1fb59bee4e3964b300ce57
-IN: b597b958c63a056758714d69c241da18b480acab2bddaf692f4a57abf2265a0fb09b3352eceb6b26a667668363a615b5d078a4962c48658e3c92e43ca83dd0f71ada43a48d52b793a48e17b66097d06f9e3804202e3a8e832409d45f8b33762edb9982e79948fcbf7213118121cdfe834931feb8d6d5e3a677e3c35d6bdd1a0a51c9c0141dab8dc0ca83c7606f7a31084b9a9a985da6b93e23b215fe4373e597574357435cf7aae309c11ddef6b0f24437df2149ec8e8861e3546f2a950f900d74a8d736a96ca82b35bdf9548d6eb6c6235ec2d98ff0f196fd389234bb44de0a2718302a3c7110ffbad0451f4dce3eb2a189f63d52683509003cd6e0574b94c3db904f9b3113eb44725a5aae93aaf299d05b8aa942bb635cf5e68107a3277b8a70534e90976275809428e77e5163c18edb02334d739095da33d32502fc5b12c6b14acd316404d7c70f81cd5a035472154e92e8a8831a22c5b34ff4b40e2648df0e6b411ec8bbdd985da9992e3df5d1ebf2b912a1b250fd08553322b7f894cfde69cc37bc794b7de6b5136afb01f8377e0b293b57a50eca913320a0eb324a6009d41dfee2a416e6b9be33b55a2e85d59a88dac4d587e95e7352f004637bb3a798dda6d3a7164597a73e13819dd2be988c698bc7eafe6d7d32dd416e2cb252e21a7eb26ac4baea46a5ceb7b19db842b20d5998c5bc4b78836d0c6dcbf3ac8e2399b82d097232c553b837774960fade6bec8d0f452ba20bf72916117045596f4b83422b026c6b187c16e560ecb2d5dba5b6b0d7709c7b8e8b4d199d19fa0bbff8319dca9b308a836d0c1eb0c6f2a14c13c820d3b7213104491e6df75a1e61621a5c7be94f388afb47d7c5c211621fbabedda16ea22c837903b1088e6cc8751dece86bd749ea66126c1139d98d489dbdb93e6d8ae9061ab6dffc716e27c3dec83e2bc2dce5192f3fcd3fc5f3b394885164f501afe5fd42bdf685c73f9c
-AD: 31abdf1d28419a911203ca879905ce7d0edf1c29f3874d02cf2b799163c9204149b96a19f7c0eecd64b6ba2bb686eb1d6f79e420d130fce85edc6bd6b07257427a9107bda792de711025d05962dca533c52a2a379ab8516010107bc7879bdb2447973f6d356cd3905e253023a863a3175f65e1988b3f8b92af2ee9b5717d87705649127dfc9c7388c9ddfff5e0dd7564fa76f9b3272000ab7722becf46c1c2d99a51db96dd32fc5fcadd683fb4f7d57eceaf332910e8d275c5f955f27e899eba77b87784968e889dfffd77367c3a4c2711a87e1aa5dce4025ec7aa3908b96cc5fe05de319ba6de6d57b170561b32d0fe4217b0739393fe730f4f62058fd3f950bc5ef151732e06fb92987302c684557befbfca5d15b72a22dc0a3a16bc128698a6fef64511d7945cb1ec973d66e81e2f6481316640afb0344d605cde7280e9e6107131d1b2fdcdb93c29673d0822b8fd1ae0f22fdd17b6f654a651
-CT: 173cedc6203b5de9f4950c055399328756c886ba5f8eb4d3dc4cfb5e7681aec1c9ae238d0dbff2af21fdcfc244d20fc310ab0f53894d0f9d7204de4c3fe8d366b3fe075d7c7bddc79a256d54125d493426f56c0f56b0688921a0f9c6128ea6ccb405e7551750780d03f1e4c5d9ed1daa253a35178e85f5214684ed17614dfa8cbbc17c3620b080531dcf8434b7b38d1d45b45759f2f0e1c694d39e9387479aed05dfdada1672b8fb01935ea13a057884341ea164f1e59f8069aa5578845ce60775e4a6166b99eae120212cfaa30de04ed140759dd071c15a3536421b0e0dde31e6cb7d8e7e71aef462db4564803d1f8301f0cd5befffc1c0afd74ee5957d76c0a6bf85e2e57711c0ecde9427cbae0c214a09b69fe55ec49857df822ceee98d3d2cc2194b48fff88d5c4209b8a5aaedaf5c289884f442db3e5a8e441a4da134c3453665e8309b61dfb007cd48fe7f2c1bc612853917a06370cfbf3cff5c6c4d745f134cd5952986ab100dc17436cef8daf917096adb9a0d49889b75cf0306d31b6d6902817e747918ff92f479bee78bf2070a0011aab7c0e734395430604e6c8c2a73c17c4bf10a1146ebde04b04bb12fc6a189faf983e6cab5553ffb92f34a89e8166ecd024d89115e6b77395eec93d62aa3daa2f5b6db3723d25ac747f0833ba89350b23c2f874181a6e64fd3ecf4c07396c8d90be0cc78139d20891eb729e5f22f99d07758fdc00e76e9b082cb456c1e5a7b7704153e16b564f0bddd142d47b51e63a3c540dff5f32eeb786c48b3256b9d655f3098e649af178dcca88413ba50f0f332001d4d686f566250fcec1eaa4b3615604c9f3e8fb1704018d609904af5d2558117f43ffa74171722974053fd468e02f047703224cad8f7eeca77f8aabf9adcdb2e3e6df4f805b2a900591977b7180a029c8b359fe41b31cdce8a748f6967872355688e932bc64a43a12222001bbb4d83fab619db8f933e
-TAG: 5609b0874958433df52176247da18dac
-
-KEY: 87b8cd45737c8446b21301be1d5d02ca
-NONCE: 6af5432cffee125756ae7bbe
-IN: 2993033150f6ef19022bc5bd11c9ff9ac8ca8b17c594151ecb5ddadf8465c73969c432f4c273596d9cf7c53187932d3be41a145fbd6485ceb80b196079d89e3b5528c61946ba503844ce538a1892e62457abf4b6f90efde91d1747fb5bca839149814f757d418b9787822c76ad2ec6e5c84a07b0d7eab9f918b71e075cceab5d6ae5dccf54d4a15db9e415e44963c8ba68101df5894fc1664844c7ec11c300ae11cccb4ecee60431e36a2c4516db234378579638b758f10d80ed372da218123449a66aeafbb41bb8ff6564cbbc9c9f734daa1a9e409fa89decdd619ec8d1fa5918d3ffa0c780c0521eb514b2f23a4e95704f6a22657e7203bd1cc15332340414d02f7265023e0c9906147240d0495739bd33f7dee280e2cf905a706dcc838bc2fcea7e4afd823ae2dd3e2a98ff55f3ccc2b0f789e4d5019b93f213722ffe27aa583f6b9f77cabc4ee5358324f765547daecb7e2d4b371e1f77debc01b18be41313387181537b360f1090bcd9647ac7694907ca521f84f7865c3c82388c6aa80627ca9e4de08a163391b228be2a642df333374ec7182604bb80770f4a839aad778dceda56764f5888a95e88afbea46cd9eb4f506882cda4407461b1ea2f31a88bc7529fa923ed9387ff03dfaec545dd796243b7578640e0b8025aea75ce1b9ba918ab04572ef65463699d32125f71966242fbab007730e7f490338c60ed9ddefa539cc88d39b254e300b56da3c832065a35d961f74982fc895021fbee01e03e9534e54686376d8f9061cd4d033491b081f15639cb2056047d79f0dd7447c899b2aefc7d6bd03e57a1d7cd996fa282ad7493201920130df3007d13782f197b26ae0cf7d62cbc642d10b4202e1887b43faa4b71694b05d19daab60cf37b6a9b50c7d32b04138efc84414e87f6caca8626c2f764a945a26fca57907486c0db54ba1d898e2bea16e6d8c1f25bae57962529532ce48be6c1cdf0451deb047a1d27faa680f972148e9a0bc6c897d4fd
-AD: c82bf439bae425cbebcf21c29c3cdfccd82245ccfae0524e2dc0b7164682891c85c9d6814c80fce1a63d588928b38dcc987d9df32f2a42ae4a1f9e8ac6bcf285bb08d164afef3ebfe6b299332f207409d271460847e9279d2f0b5c4638cdd989f868b4f0dab1f324e9b18c35e3bc5f798962b7d4f3b6bed6fc1c57055c489032a600951f8d06c14f5ce852d29be001592ff5c3678c0bd8251c883b333d5c670e52072fd68fd8d53e1a2f48dfd2880394541f4df82a9b6adf525c527550161e0d7dcd5d0bafaa4abdf1cc7ae189ada0a61890831eca952cd6e505d4df44650ed533591fc72a9cda1fdb1c4be99a31ac10d8f011ebbcbd8d83caf5d8c33a659d032d4e454ef069b2dd414fe19706681f83a479078f01d6330e2f57c2a3720e5caf67e44ffdbe461d967060e29f11d4661f23b27e90d521c1a9f4f03413ffe794cd9e39dc4c81f43d38778fac476585975b72e26dec8658f9cf6e4e028bc87c8d5d1fe47bd3
-CT: cfc53c8980c557908f7d3a2c15e7f65da940cd319594b7d8baed9ad7edba0a46987775b004b5fd0c10306677eefeb8105cf124d0c64a2dac05364138fa2c4e49dfccb963a89956f97bb0340a14573e559d9f937b51fda46206f7ec3361ce566ac2ccb418290e070ff2655cbe89e762466c1559fba756c62de1c963afa1ad18ea47a1cf3d021f46bae6c060b19aaebabc900229086dc26fae9fc9da70af5af3acb02b6d5a570e95ba0d2f789fa077fe06553670ddd0c4e8965a3f5532e93e7fb0ab7e0b9f90cc9b483f1fb79ffa67d0cf53596eac25679ab4f8ea75b93f3bd84d8b8270d6d5ae62a5fe8995e9b0384365ad813edbe7fd9743665338cde61f8d0bf82481b9da29f6682795e7178fc79e676c8e3ff641ae25c667f92c849a642abe974d97718f0aca305b57ce7974172477e90e16d804c450b332339c61c327d78abccdba272b85f4da54154f59ce8dd5bd89e38a515bbca07d1526eac34437c66496f05e8582ce654ced3ee07d4e770da1799aa9b6fd42402a47c6d5e0c61592f11e798cfa3bfc20dd601e86e05fe6ed45a475a1b54261f368877e1207029f50b6d54e19c132c5732ec34552c2c559c135ebbebc7be00233126d5e0dc5e20b7bb37f6b25df2ae5ff44ab390ddfa91435c6d8ec09c4916ce8dd3e10509094cb4fab2ee9f67c3eb351ef221f3e67b7ff3dd7292ce01eab7e298343de449a2d4a0a168860bedfa0754717bf6fa0f5e37930db0e70c66976d34c0afd3ed623df2a10b9c02b2e9220534688e640de5d53f3707c2c9ea3de7d339e5530504b3a821cd3097784f325ababae463e9e1b34ab0830d5411c9e04bd48a321be1f8b973fbbc6dc03dc7ca2c31b3d9a800ec9d425881468dd9d8ca7f67ba2ed500d1674118d42ccaa6bb18f0a2c4e5ead86234255d850f58f9ee7ef7f70e2eacba6a053ec2e78c27a45faeb4c90e28687ce0d7cd7f8146a6ce8ab3887408e85563889373b606cd5c968437bddb632d69e8e8fdb
-TAG: dce7df76d7d0c0be7f560dcb5a4a00cb
-
-KEY: ad3ff84d1442224006550f6006be543f
-NONCE: 7712c5edceaaeb3360ac7ae2
-IN: e3618e093a797223283e0b9c36a841308146c122e3df15a43417bec5dc4224a10ab962fb11c53e3331f0a9967c008541bfd7d1beeed4b80c2371d5ab62cd098fcbed6f96f01fe9cb9f9f7b039bb010551e504252d0752afacdec2f2984d4ceaff99dfef99d57b4d4b1fa969a4e70aa0d868993474f7d4bdea01b9178feea95ce30c0f6b78f22c70da57d26677549e9284bb4a6717596c2c3b1a513ee888915b910c93cf1d94aa4013e891e1da11c41254af3c76a1f63d67f74a07f3176744f7e558f03a3525b4a385fc64e6ae48e5d96779d64b5f557ff453fd44cbe46a2ad96fb2f79ee6720e08bc8e463abe2a9f662540b5105e1252917d7ff63011106cb7a47829c86d374aba8536d1bdac2250045e098987f185ac00faa0b81630d94a41ac935088bd5829e46ea17bd0e19001fbd25208fb312b86349a9c60540dc2b5091c3b0902eda0254b9e8a447d4983ce8e1f58832d2e9591c5b15a96f1fdbe23b608ca5ef909a656877d36f16ce276e38744ef11768030b479a4b2bec453dcdce933c78e3d4e7bd7e7a906eb74bf321fa75f307861ddc1be310289dedc87a8e325a3e4c6dceb1bdc6a02d1df4598f343ae8a06729502f5abe458be2325ff985b3cea0a166ab7530a560d1971c57c566197b5e004d9d38d831abec067235c0d2ead91b9319d6ed20e6bced57d71dd2dea6a2ec22efd29b146bd31617c9c08cbd26e9dd53e045d6f29a7dce57c61b3a5f6410dfea52c30baedd587cc15993be3ca8e125f61272150a02138c8c3b46922be9ae2d31ab7f25526b86cc0c73cdc400b5506dcd94bb783a97f39d37db162519549e642f9f087c3f41c8234fe01dc1cc8fb0ab3099fe2b8efc1017049d79b5b6ab9f57ba86d2ef73e2c694c180d2860766a4010d76407b15afe28a3866e48b6b688228d2f1fdbbfdfac9de426186e9f7121d1a98b11caa6193f9445939403cc960f2df0ce5d7d4a30afa6fe8b9ed0add15bc78ca371cf34d6feaf94bb7f6520b4379e7bfbf836acfa3e2adfcb7f880
-AD: c53c1a8b8fdfbf5272fc29b2be7d69ff0741df1ebba02e0525e29cf45063e5da740f6c33b1deffea0eb2323035a21b18fa010c6c3ca7cc0c8194627d828fd5a9898e2b55266d4377233badeaffa7c703fd710441e250d9a5d94d954911d66caa836e2413b190917c1802c3e587d514184498ff2e6e3df5405829262b36fa8971cf8595bd1cd87801ac4c99357da70e2e55ffc012a30cca44e4f5538ba92f17aed8c8a48f85c501df2f0639ac88a39cc024fdb6d29aac368728865db1a30ddb36d366927f04f00f8dd2229e1fe76db8e7ded1fd886a9342308ba99d80f86704c974da156d96c272b806aec6c0268378652c26bad18ab249e117f8643d234b965d45067f42b857f0888ec68aab64b3ebde8a55ee38464e5f35f8653c7f0ba7598ad26f9772b574d7e060377a4174922b1f8ce6b72a83f3a20d20625132ad7cb1429e26865ecce2a47e29740cef1a3d85bdb3e800d46692d6ef926395aefba588294ff410dd523db596a7c17bf7d4
-CT: f59b5a5d01cf45a8d91c8c53b3d8feb5440b6cb9537d9feb0da69c33827d1a5542e1d2db34f25c399714324b7d31476022778a82a10668a281bcf6e5ef368a2c525a7bc59f46fb9e747424741e8894f86fc157dd748370212f848d23b13dd658c1e2ac1bf99abdf93b53a35b5bcd89cc4406953376187af45ab811e99db9ac2a367f8a55b0fb4acac9a9bcbc1858061860230508de9a777bbfb0f74b2c69a79dc332a4f03d156596576792f43dac2099b1d4af11fa6088a086a25364f62c24969a515e74f29661cc4764842a47cbeda7ff9ef515c7510c16566536273d62109397626a3c2b601bf272e31462ada51a01a69e6fe174082966fc25b6b8b034add7d394717f08df992771696bd51c25c8feb47ce637e23e89feac9679dc753eae62c0ffe7b62d9855ec470904df6bf7b6fb246cd6ca77bf2848f1074f146652461307c5d51b46977ac39c42ac5857b64f9b347a45062500de41a19f2bb03fdb241b309a5b685f408aa4e38e60c667fd4bad4fc3ab9d8b4f2a8735b50d2fb7d7177d2ef9e5c783ccdbbc8e923832117d3ea8cabf40891e8c912d703f37649096ed0e41e0e53cdb19da6467bb1ace8064c7862b6c4829959f7a0780860a598f3c725f3f956259ffd20e9088dcc639a0c947d85a51f6c77e911355ba77fe43e49a1137fccf2d951d4083c7232d095f2e2d003bce91ef9cc9aaeeb046a35bf1b548c78719c553e6ebac55a77509a3f02d71a9fb84ee16a8fdc6b8b1c917f800e053e655860ab17c0254327cfc3dcc9267e2b78dc2082e54895faea0349d9df3eab4b0bd62f5d6114903d8851aa3cc9068f6b03d7924dd6c4fcc08237f05551d528c01f33720c53867cdd375fec867f71fb3b4688eb18ac3647baaa94d2a72391f47e819b4f41e98904322d1b57d4a485fe9c966d4e0967eb415feff49d1baa38ed2505dee1b76bf1fad013918bc282761f9431b1ea4b3ae826470ef72399c86643a308043a2206df7eb354671846962693183df96ba170898fbf304b0ed34b1fd
-TAG: 90f99dbe53f5a8531b2a0e8dca2b7492
-
-KEY: 39ef8200a13e35000b40e9b0b392c982
-NONCE: a4377557abca18c1f3bf774f
-IN: 4bf8ab0b9080dceb2323953aa0e621954d87737bba6f562dbb0de271d6f1b88d7c1a712f613b099d2bbe0784a8304467cb168ffde2625edd9f38be5660020ed3e95b49e0a0ca9dc2bd0de2e40fb275b4813289327de0926df3c73865e7689fbad0a6c79ea615fc84345529cf2ef68b37b7e9fa5d538f4dd848ba66adb4745079acabac63de8d2ce9a2b19cc718162e9fdce49de7fa4b820043ae234d8afd23a45ee3a5db124e0f9252111c367beebfab55b2c784581b63a1caf4ab24bf5af45b986f457ddafbe87791788e7c7536595d965d5fcf21e3b13873b00357dfd7851f9e0f198ff950d69979157089be26b22800c3dfc713a5147b0ca4905793a2817281fb112deac286c41ffeb2bfb3fe1ddc9aaf4fb41fd5faf1df2e6e809f54b09f99bb8b61b555efdf4d8cb559fbe57a905d30184c2de6e154d501bc91f6033eb97295d96c1085b510cd57631e40e9ea3225e175162629b4c44ede0ab5643af425a8f8614e621a581b559f0e7fb63f0c8ca09cc58c244ab2e0f750c6135fc26e433710351802c329edbe97877f912bdad914a051d859c588af925674f1f455a322671793887420bc79a11541589082ef12c975dfd0528294ccb086ecca86ca940ba05f937fb2eb91b4b925713e8ef7d10305bc937aa976c5eefb4142b0c18c1ecc6be979621c437c64e1bcfe6ae86d28a29fc894120da6ddba1e56181b6f54a9e9810a83c3b44b6fba10959139787a491f367658ede40e1289148f66d4677d0281ea3615ab399c7dd9e6e05b8a68fc8724089825fd5f6a38406b3eaf01b8dcb62afe181ed963a0d940f1521f4f501d3349e6aec453edee70f1cc640ba3bedf78ec91acabe75f7de38ab98253dcd18c6a866f4c2b8a94072b1f141c9ee3c43beed8a08d09c2f35f142b8352cf776c57d6684898fdf6653997dbcb2cfcdcc43d63b1d287beb8a17ebc74eb3c3875af2ee0446b2d75052ef95d37315fd55e346c3e8dff45f17cb28f523592ba049b5de3963baaf0eac3cd75f0f0543e0dab651061bac4e3ea3679bb9a78d035bd8ea9e8
-AD: ad709f6c13ae2d4638dbebe6b4cc0ff606af9720c708c20dc2d6f0e4ba002a0b41e136d2b10dd6a2f8d9fe8cbe91943339fad0c52a2881b188611955771d3f9a621af08b95dbb77879bf508963fe294c8b8807fb9d8458a56d7fa2a4c5d995113ea8a86da07c28dab43c997e9277f98009d67fcf2ba171016cdb7e6c449f6996d21563b4ab22e933ddfad5c50e9036db19adf88761150b2226e73043a49a8e9934094eb4363d61bfddb791f4c5bca194d451023aeb879092eb2d8c8c3a2a5b8a832db6d73804c0c078c50a1414b684184780278cc90ac42618bb4144d5a415f582a77b247e4e8236bcb0692620757960f5103887683fd54f78095e8b098506c81008a7b443a533a0a71fae3f08bb4c28c7142576f459b1a2ccb5f65425515e691852e0da343291ca414c28c90426f7d5f9d7c78f84ad6eedc600137c4d86fa7db53b1d3fe9b16874b31275a740b5f640fffcb4351e4e32cd6bb7b6fc11f104b2513c0814c370b6a7558d7fc07c355da505a1777a2176
-CT: c1545634e7b0db1afb8a166c9f0d81a561841a583d04fec4f1994c7764582f7b11f832ec2de523e4f6ea3a7c1608e1d1a037b7975bea51524bc8f001ea34a2387f7510967cd57be0436529c08144c232ba1f532863255a55b2ea6f860b7db366ec8ea366e62187837ee8aa47cd9a8d687fafc31680c4af60493da7adb7ccb8f751ce6a6e30ec1f78bd169571fcc0f208d3966cd90660b8f7c2969bcaa8368172cff0d0fd27d732d9f7869d764efb36e55ffb96a1f3d8f1e6e5916e3e97e1f5a12f8dd965466a26274804f19dcbc7ec872cf662854501f37ef5fe348c543511feb61dfd96c5d429c83c7ed70a1d5beafc241c697a564897c9fa9819fe91dce3234d7632ffe73dd1f7c3cf0bf6d170334d2c4104a6ff5dd92038ad91e69f2685ccc380a9fdbdfe7f9f47c3a05ed97be25e299b8e71905f71c68b492be8545433c99b64f2d53a9239dde92359cfadb7fed301b8d8162baea533be9c9ea11964ca6f34e4d81b968546988afba059fa4b4e6d9e436137a9d991cfb867949c1bf87b1d61a5429d4bf549e66ca88b309cc65963baccc5449361dcab294d8c817717f848b942dd11fb1a8015a89e9bed4cdf51b4ff3ace0ab474fcfe16ba2da81b59a5dd7958913c92b4f6f067d2d350111c23c477138ebb40a99e0e55e6f609d74565c77bf8460e6360f4bb54220176baffdc96e4c37529ca3a38b3ef959d3ddb3b2759141032e54aaa8e6b2bdc928f01974f1311fdb15ace49d7d5a026e77fcdb5e9d7442f7bfd04584078804fb3aff740af89401771047af2483153b4c79923980cbc5695ebcfebc32ddc522f9da5b1220961555aeeaa2d578538691ef8b9f12b5833cc4f3b18d7c0d8b068e294c82efb95badbf590a3b4094c38f334d7ed32934f7012b87ec4a49bc0c2b7fb98365f22962d1e45d99e190655ce4213275b1e422976bbe36104027b96ce3e52ff931548e10e006c75747c59e3f7136db301eada16585ef15f4589180b368babe64b114e36686282d195d622e89f04d56f17c718d72bc6c577796a639e634a97e7877258
-TAG: 9563db087214b10c64e7cbbb9dd21a83
-
-KEY: abbe5e520c0ee79153c976d71e5c6dd5
-NONCE: 76f4857ba2d63e04d6b69a2d
-IN: 5a3ad1a3cb88733fdbca5b027ae04137f917a650b4a556b5fff90f17bc12a890aaa8d61029f0c6663eba8326c1bfba5d9221876ce3365bfddb714e884bced0f1675b6ffee2b1e22929f23893f3dadf967b006e9cb7a9a0972422c74a0393a29f9c4e06c2586f393786ba078cc52499ca6e911e323915ebca1d1dd203189cda3af76f785538d9f1cf5e5dc5758a490cea8710a9610790f426a0c76e262eeb9facfcd7730b72802084152f71adcc2cd6a2bcdd0fec76ee3228947d2f9b1b6f614a7e609c8f250fd02e19a487365b0db8f2d53cc6843d0d2a2abf3cd2ce33125558046fe9ea2eadca7dcb9d0a20fb3ee274fd92360f8772a53937625b5aaf9f10e9c9452426cb42dce78cdfa2628aeb58c295b01e12b12ece1fc5f66e33cec966b52d6593e1d1e93ba3abbe0c917dda7c2b6b5d45fb4cf6588908208e9b264f7e8ff87cc5090f4ea9b1a5205c852c308783a6c5ba0629cacfdd38b50706097f3496b4171a3199a485cfb32fae763dd77234dd9e2c6544f057c9885e914325efa4ccc25099f81c95a4e968e5e031747422cbd48ebfed3236f878a2832b7fc6aad4db734868ba2623899e9e0689e618bac700ce17e6d0114a0f5b94d6a0c3373f803ba2337d530fb706b8afbe482eeb9e0f5582b2f502d3c774b2ba98ce5400a20cb7d9a32a351401bffc2214392166208de9fc8a6d329b7dccf10734b5b74ce122f2454fa551b586dea96fcad2c45b1bf562bd5751b757da829d57cfdfd8ecbcc410c00aff69764a4e532545838b38011f92e464d192ba315ef239dcd5041448f165a14d503a865a85dfe81c5d4dfd37fa6c316c09eb403bfdc2a8c1a0618477a5fede92cbb2abb71b425e201c6361b5509288675a4541f44b7fe052acb25d1d87660eecef0beed7851a2966947dbfb8714038621b6f34ca2874751aebe9e8084f6ed854ed5f151f81533614cb1fdc08d2f51e47537f6229e0b64d10b498f773fb67bde258cb74a78843256913cad2727f9dbc3a8bd51daac9ed308ed0d77d86aa657a6ea7f9c35e120553d26b2d3fad1bc256f1f71c7550220b0b5f3c6fa8db73
-AD: 16337934937b996d7a501a3d1fa7f6321369747329fa6bce98f68c769dfb3df84b2b1e14f1a58c3f6b65e03377b7058fda3c26adbc370ec72e58ccc953ff157d4863057e0df89328efb5023c1b79f0e29be2d7cac9f903bb782c4c8720e2ccffe83710871642e2acae2071ba2a0af880f14f41ebdf61a3e5449dec6e61e103385971b8300a31b652053496e9b3a2db7a7bfb03a054fcd912e3e1791f84cf484370e553d67cf99c6b1c9b93bbe6ad4a93c47ba9ef73d9f8506400a49a5609e7eae5e3ee9efc657729d1e615a592a8c9f14ba37f5d91649a8c59ade56769c3bcef0c004c7444c3dd24223ef7bc6a2ba2e5927608692d1fbbd3868d7fee0fd11ee40312ae06d20704e29a97ecd4265556432173d6248e9f273363211b5d505de9861eaf402a001ac18b485c7ad0e442bb5e648e20e0884ffcbbd2dda9b3aece535d964d2cfcd6f99a31a4f24d878575fc3ad7a7c19e76771929c45d0965702625cbdd2e99371147e41e950ef70a7393084682a2ee6ca9b611f3c7b38ca4f5fdf2
-CT: 76e3480cee9d48b31d5b1e9a01e79e713cfeb73d742f1fc1e8f99c8e0cd82e267c45f4270077e86996a7e5440a781861dbfdb9759a6ce3991fbe6006d0de04658423f54154c8e5945dad96addb8bee044308cdf062ef21fcab25eb9a91f100945f347c865211a1087c01f245448322e77b826a22287df3434af7bee91d7a278fa59689656f7d93270898fc68594a4bea223d365aae03f0dd18a2e525f0c142b28776bd9f66fa2c046e57394488d5526fda62704e90f50e9752bf9d7652b010f8407de91eeb3068b830d0cc9294bee9629161df4cc7a1a216e55dae077864999ae72020346e813ca8fcdf99e417f26b82653908d0d6eb50ec65814f61b1825cc29c4679a9097e9afe294775e498489ca6839096f7bf0b60d3ebd016d83076184b272db1775f5eb3205015fd45fabf0bba9a990518c8d6d0c478221768fd83776253dc843eea8bfb66fbd2b9977632ca0aac7efc9528115fe4394f460d91c1b74fceed2952c6abc46b61fed85eb7414410731106e1a7be792eeac86fd4bf2b1ff2e496417fd8c0c2865e80837b2b73a690a6d9b7fea83687adb3a004a0d9fc9791c572d916a1b72f3ff5485f7d24e08c65a86079dc2bea698c43a3b2f2e5a8f335da4376aeae4d7fcb509bedbfa0e8fd25a711af45225d764534edcee4bca8e1470cc7d187b0bd9c26866baf8169289653aeae9b36277ca22c2a0ce3f69b3a40dd55e745b0b7467c2ef6a8a10151297eac1365ee475239d8f254806c8d92354757df8cb12d3dcfba83e05c303bc157c7be49da40ee072774ea7e4ac7044768418e64d965eb76d14bbd73be18d14701cdb6f8ee32cc1fef468047ef0ac649fb77843f0bb751f543339922bf34eeddb8140220e6b45ef1cd180697c651a352d05c77b705436f61ec9d35f185c5ce83b210c4a4336483f49ecd538dcc42a22b4f77ecdbb8cc36b8a499ed5c39de1fb6e03b0769639670fb2517c57f183eaf56148e1625adea1efb9b888e8fc3d83ba05c35f8509bd4e16285911462d77d9b270ae278cb902f6ff7970211cd53f1c310cd14a1787009cfd041c29933edb6e672d1d5
-TAG: 8954449b3f6a09e92ef2e33cb57c695d
-
-KEY: 100c6c8d1e88b842aed09cd16a5d78d4
-NONCE: e2d7712e40234292dd1aa27e
-IN: cbe63c433804b0111a2cc469e4f012d55e95e251139f5d6dbfc6dc8e8fb6bf5ecdd8dc89fcb6b2964755d1de9d8a0dc9d648619e185169ae5ccd61a6c2266c5177d8569ba4a09d4c231d48b8f8017365a411714be669fd31f5d17738739c75ba5abfc19d1eca16558cd69bf33f63f50417c92c29dd44ced6e9d9509057ce53a37cfd956bc33c6128fcaaa441fe3016389cf69bb589d323f18fce0a6cc7e77d9e33868ae21ecf8e491019f175f10013392c8fce3e6de3dbe9bb20ab69c2996967d171ea48b46abd36b9f4015723ec99ab940156e6b13ac06ec0f4a8ef74ee304e3072d9e14e844d2fef1e6fff116fbe9a74a7d90e79958a2f14c364418b7cc0d135e0fb8e68600f2e7aa26f9e15431ac9e5cf380b5fae8d715d1dbce4c0225e5c61e747029f62f4ea5de277bccb75580d6f5e5eff710ac8bed37e98b15677462946b2fb3fc0ffe720ea7c6bb70baa0e998fad6b747d5493506ffe69133608f2819d3fd9c8ef903de215b72677076dabb98cb1059d7d1b352f95a2d2c2903dff63743ec314e0313e46095197f6aeb2967c5a60f7f043b5167de03ffd320b64291bb7162b495f8379c883f17d642bd8bcad4caec8ac05150a5d449a22185058fd5c3a87a9f39b8a76afa529bb9e22641c8811c78fe3d3aaf2acbb88c47a1ac40dd686b80828fcbef0937e57a6272dc2e3ee18fb99410ac33a96d0800bf07dfea59e707cdc633c938feaa179a8d46940d1182fede7e1b9a3687548a0ca19bf53a641082da37082f257fe2fc83188c46cc58ff44a111ad32b6745dcacc4720dd960d2325443cb70615a4437eea2a409ee70c7fa3967a2fe97915ae852cbecd21d44b8db03d3d631c90e834a83428568e8250f5b8e2422007e8cefc12cfc28fc7f9a73f93afc1c3d2083e4c5cf6204753ef7fc4199c0d877859a90a1d3b16ddec6de134689accdca001fb1dbaca4fd492854446c4897afeeb68181890914744a387c198674d37ad98c4ff3fbb34ed656add39879af2e336e529c362d15399e40d2eedd9fca1f07c117304024e03ccb6e4e35d4c2508014742ed3639e8d0d0a73b4e99c
-AD: 0e2825fa3a69b798030cadfb168a1f88dbe56896bfb9a41e901a1bb61b8a95cfbb343266e894f101767efe874d9d45b4540d2d77e701e1d42fb03c32ca4b965d836b3fd34ea3ca2e958aa54f1b71e8c442783924c023c1b9fe0a45c88f4b66453fd335db8102e1de765ccfd7fd415ab7a08fe4e0b3d2a14f1564ffa3157a7da7cc9981029a45edf19bac8dc0f97286038b38fca85f280ff9a98eba85e328be65a657291692413319e0f045c07c657c903e51c0bf72093c615cdfa18368992cbfd4e11bd64054d34405d00bbfbdce63e315e3e99fccde073823c17d9790cced43408ba71e48b06f9bed959818d939f7c84b2d6c3861dd17e424dee0cd7942320c50ce637dd1349173b13b972d0808d24d5ebee528343bb0f0415aa123ba63206de27257b11ab15aa1a3d23d97bcde30cfc2c8f9bf0fc3cfa4a6fd61871744823d7a1f8fa7dfdabbe82e73e491045c9df0f23d9cb83ac7d1118b4653cf4961cdb7256b073571962b1956338d684bcbe4aa05aec761e0a14cdbae6d42897dbbb1c0
-CT: 4b7337e4cacd72909775b7b8b77e3a73dca810b4642310f33a58f5548f4876d20b828a303cd85241581372f94d2582f79030e13ce68835836fe194bf8e68c22a39feb10825b80b4e2c69ce430b9b56536334616ea3f4610ed7a8136102fc22e634d5fae28cf518630c5f159ec3bda66fab0896f789c7431c9f6033c52e7082b4b65caf82df07266b39a4f0b93867f0e94e3f5065fa626b4ae90dc70cb3cb5d9225bebdf7de553d364efec3eed41c15481d2ab7f8453af13ee769c6a0af2c0a04b61f74302211e1d201ba91eb73ab2a199c4929b903e91172e4c7256d6b138903a4707f2840952c07f9ed10597d023efabc587d2753b28cb809d678b8306ab50bce2f80b9c5758e8d3bb3be07e7645ee858288eac7072272390dbd2915742ebe44de3e56caa0a9c7ef8d42df94173657a4bcbd183fc3a8ad1764606a8bc98793e240fc5e18f3f86cd082dc4eb11576fd29097ee7109d444aac300dbc930bd1d6d2b7f3c69cc02ccc54a86a627603f3e1f11859efef34bf5d11b16d11f9e5b6e985bbfd3e4e3bdb94a48cc0af7eb6c212c3fd621ea6203a5c2192fe1c25ddafa33ea774da1445191f5bb266683cd150cecbe6e820ce3c8a210bdfe407d203a8d9445c216adf892a0999a026bd8d958589f3a6aefcb5ddacca2285f2dc20ea31f43d6759ed5f46c988587f93d6b90d335bb51c76a3fea6f7513385cb3c1b8087e88dde0cc6ce55e7464e6b0b32e777a4e34416c4ecbe1610658ec0a05550d1dd5cb51b15fc3365f32b948dc28342b2b7ffefe63f4842399d6df28b966510e4aaaf5b5f7e4c470ff065fd30d56d085429f89093a291fd7e516b8e962b0fd2faccb0be3e4c62dcb7e75fa5514f79a07a8f4044cb253074b8085bb925dc8302ad9f7fd0d41e960a55f25f31f4bebe6a04775906b59f124a64f5d55caa55e1b858d1383ac7e4b39fb959cfd61acbf0d64ec6733d15e96137821417829c999ad93fa735f543fc73a94d942384aae4e330cca4a7d694627684267d3a6d74d6c140f84a3e10cf58158ccb3ee9c7ad700b08bdc46698707957e523a81f9e683527bd16ebea1
-TAG: 9ee21a6ce2424d9ab143ceb318e16819
-
-KEY: a646ee4b0e0dd43479849864311c3f74
-NONCE: 3f2a6cf9d0dad34111493f0e
-IN: 55461aa1daba988af83842804de0707b69bb27ad64f66247eca2701b9e697bd6d3ba32fd30c7948a1782f3d308387b3d66a8da9c412d4e17d8d7c8b3344f33a79e0aa40ac27ac3659eba14e951947fc2f2302953bc766ebbfdc41d1f4c26afe5fb41412aa776608d37d8addd0d7f0c82c61961024579d828aad7fc89493de8002620fc3d638cef981d8a843b658ec3ee27b01da0df91c0874edc83587a70f3dd5d6f7028cff83c107a72c4505ec4623b35ddc5fe3f758434a14685e74976693d8c67ec2f6dbb62f199c7eb3ae344c05b43985f6e5639f6f9bc321bcc436044b8f5b89dce923e85384e16e6eed7ea5f3e49abcc010655a3a29cf9fa60791cf7262671ce0fb2044383944d415a8acee77e88697a96d4af5f7794e1cc8960ec31a8727276ebaaa5fc44b1a240be8679d2d0c8d3ed8d950f8bea0daa64693d4e8e5e5be0567c0d878e4f9a830ab4c6153ebfd5b1019c659c8f456a636dfebd24dfcb7b3d50be807a14440f7aeb52c280b3dedfd7ced9a6ecab35e7b603dd8253a5046e139e2cb9cb5d70ec87f9468915e24847576c1b4a529fbc4f2d84706c1be86b81436ecc4bbe4ec15ced347ccc68744a9275ecc9cc71a62b0f77391e2d37c7f36683d902a0f9ee37df8306427de4ddb01618f62629ad8deab26ede6af11b2409810b4963a1b752c7f6c71acb3c6c2f5f5fda91dd54410ac1637e55e547b25cdf5730ed4aeac8c0fc59a365376d84a35440aa2830cf614bb1012bdb644841e22329bb5798bf971b370dede894cc4f9395a54fe7936381b7281e60767bb2f8a17492ea63063882d29ead140e197d2647656ab981caf919583e869b844e61fe19e94518ce7ee5aec100b9acc2cb8de3dfd5cd3a776ff2f23319721b05e194b6acc9db40b280592e50b8b5d7d43a7065898f5af4ad8afa6d8b6559c81a9e8e923f6548b3f59c8ba30620d22865117e8a9856f66df128d82c7e15dd9f3ab3ccae9d2e30061224c7a606f87f9dc5d40c689cda06e5ae21e47563378b50c1ee7c664bd814c329036858bf9d3abfae22deef8b74d2fe6a566e2aedf8329f42697cd7ae88fbdac408b1b8a6efe377670b244110cce9
-AD: 7d000237e72e6de6176fec75f5baa6d75d0652ef7d1eb495797993afbb364cd663dba38c266d3721f0c522238bab60a95261445092ea645ebc25b6f2fe177297a0aecfc9fdc621fec0290b266c8ceeb3945376c4f9ad961b97b32b176bc1e806eb2d2e410e8ff7af12ef545493b1a61ab84e634ad86ca15fb9773765ec0271c204fd951621fb8ad69601c06c6ff6d151a156295371f7b207ce6d09ef47d106a9466fda667b7e0e2b9b2ef6caabd297dc82ebf2b03146c988790311ad7f4b8e41c1e04c1b9f40d4e3d8eb611f3ab06d12b97b75d3b490a4fe30b1c565243eb77d24c06b539e3d335b651e95ad957450c027698dcaa3ee3ff43de18fa735ecf7f404352c9406bb8358b9d3e47b7dc4f6a813d4f4f37225baee2c3c028b3974f4c0e8b1f0beff79fb0b04ccc5824b6ef8108bd9ead21729a9a9cb3ba8705bf77ec3c974a34b2d838784b243176b2c6e7a2010a785a96ca2ecec4fe57bf7f6dec0c9b72c52b8c53157d4f9fd259344cd556c637f921170135fbbc86d68af452dc575eebffee445f8f755c1
-CT: 796320131f438a93c019b4caa40e9f183ab467d30ac181aa5f2a0e07295f1d07946c4f2994a3ed2ad8522d5ef3fcdaf6d58e1eb03f479859b262ca1cb6e950c24b70a5da75b13055022602f39370a48337464ee1100fa9f6a45bbf793226c358fd91ae1b71eefbece73420bfc804a8d6499f044cf250a9c680445aa54639308c10631644ec3367cef458ab24d0dbcea8168563c062af8f282eed1ac778670400c03d30dc4e1a8f3172555ef633adc99b197f16bcdea6c24b2634fc189b8dcd3a52b56b2aa5099c10a830aff238d1bffba89603352946048fb8e9ee72ce2c13e4fb717d83a31ebb67d99049ed49e58d36513fc399f0e05e3693857e00df98707c66c67b87a2a6aa63fa68fc829cc3813f831f06933ed182e103bff8fdb16a6ab5b9ea8f390a2248c9923756f3536f0e699e3af05e7a3483169cb19fbed3f86335a2fc071af6ddcda9c702a584493294d37bfbf1c2d35a3db8b4b905a3f08dc0e691e6d5264446978fa6d85d37bfa0f7c57630afb61e9c67bc130fbadff95cf8d25fdb00e10f4ac451f6780fb763eb5fe9c34abbdfa44e72346a4ba258180c134e9fc5e336e0aed9a0bc7ec3dc22fd0a38b245a512ab7cf0aa888e2b36f02ce8952a0eb69dc28afd70fe9f1bd20b12586d839cd86ea95cb03c8cebb0af0a6d8ca82d6fe853e5664d30db557e28faa695a903e12efb6b6bcaa9c30584121a662ff4a1a6850e9b005dcd194bfc418df2a8919749d8a82fc33ee741ba855caa9f60402bcb9896549ae11131730d7a7bd1011633f759b302cfd8a51afcb29ddd9600927867776e961d8c2a7ce403e1723d11fa92d587c9ceff9f4920bb4ec52ada70ff98d7c1d4b7f84cefba39031f757a86d78c04433b7085a9cbd44ee1cc8c4dc2dec2a938871bf40b2ed113e4234dc5331d536331c5f8552ee39f288028d8d7036d9acf9ff96e385a099a44f51e46cb73a4e9aad3e5b40573018a2023d683f4ee886236d9b3a50edeb69549462a4a496845d08f01e1de332bb2e3d5ab3e9a2adad675fab9eab0205462a097f4ca75bf59363ffa1e2f9dbd2831fa3ccf8b540de72eb613a549129e8d40b8f672b200420afdfb
-TAG: 7d11d1e35aa29774756505f036a0c857
-
-KEY: 9c73a26fa433bd4437c1018263e7db4b
-NONCE: 580a120d1d29775d9d5ced67
-IN: 10ae2abed148d4008bade4539728768b1ed315de117a81fa0978c1ed9079188454c852652e8ccc4904ccf233458b19d0f17ba6525f3096d369fda3dcc84e092ea1236bb57a8bfbfa9ebde780843bcd967708ea20c61b60a11ac24b808029676a30dda9f5f6cd69aa6d7aa3b08cee0e89456bc4561dfbd751f9abd3ecbc161256a26084e5ae1d94dcd3f74ca30b4ff1857ab9e68cecf2f384da7d271c1d8b167250d901a2272551020c30bb9e9f9a8f9adb299956fb060a17522efb26363393885b4aec2c02b0a8c40835fa058166c7c3013908c1513e4bf9c71671798537cf05c994d2090fc768a12dce93a80d0a4cf1614d0101851ea6f87b528047f07d07ed78cd4e54fdcdd26bb4f83d297c402ab5e328c404118f52bcd5b6f36a18bd3186a19fdc522ec9838eb363818a48ff88651a2359447876d139c6b0b7d35e30dc0a3ebd3132e5e2a0c3916ea7e3667fa266a91d5906d1bfc005f166bd14f298856e85022c8274ef5160f87d989271d2eeff544501635f4f071089e0746027a29d52264520a6ff2f2ede11e8d196c706c8a06d87c5e3679be87b0c36026e38fd53da6bad38f9abefe48b56db84a445f223ee0ceb1fb1b797d2b589dff9b26bbfeaa1b21d662edc6f4e48c8d91025220a9f3e7f1965e0e6f7232e84348190e1b66f918b896e778d58a40c47439b2007b8574cb56a18f72677227f1aa09e36ee41aed2692b28b3244e9f54a7d317b1e5b1e7b7fc59506744a25e5087d273203aaa1dd0b9d627b240e518a866d531a90d4b3c44cc1ed9d9d1350f57e03c3f841017b46a68d6f1f8a6125f4b622a0132e64a85fb47883389dbbe1e3d26eca7ac8676a22b4bc79ad30eacc91b6d06603e916ed87bef76ae3627416af104d2794a7b86b561ef91deb0e3f97e07a37a3ae11073945f75933a5dd66b14aa98e826aa4180bf222a201f5ffd860be8a4b73d3b7353fee03be602e52440c7077fe0afb1dd5f3e823c170a4927c241a09b83e5da81c1fb748452701250896547e34e647470f5af70a23af895d71ba21904e1c6fab41f5af486d448b57eb5a3656089d39ea31ea9fe6c88bc40fba584198cf82944ca5c806d3856240c4336fc1b451f44f31a97a978b3de
-AD: 874a859c5637b754a4e7c1ddc3f34dd6231ff71f13e6a5b4e182e62331f3ed1d4692e35f6959b17ef4cc7f29859a67b60527aef9d08a333bb51c6e163e016858a4da2103df237e16acb93421859c83ba348faafa3eb31d0addec9c90f61a4382be25a85daf829e5b2751c9b7378cb9e840c92e174b1e9a32f3a5b48bf70b6de1637158a09714b473e1b3e339f9f915d27b310af2fa13c05edf4eb9b114c80ec2677fbde6b5c351b61fc0527c9206357bc1d1de800d8e6dbbd3f97d5b1220006280a42f51b7b4b4c67c56aac1483a5357a7a26528a1ad1ec39e0828117be1c6da36a60a7052f0dbc26846e4bee96a7cb6dd5a3dceb6a11d356e0177be9fca68d0f4b00a8db8afe8441abfd80be2d7d25ac10620dafbd92c0956c2b3ee4da7f3db8d028cd60036f78badd42e0e9767a6c8bf8bc3ed869a9954fb4db389e2f6e44667ec26fec930e6a687e3fbf10686c00539628bf50390fc167b1c31c1bd061e975a60affd238a229a0551214f20bb9e17f097462629d04a9ca6ba98cf3020f1fce170b9ce20440fd25c2cc143018aefa1748f
-CT: 26e09e3c1c694166c798b8eb3f290e8709de7cacafadef90be45e751ec6f0477f6f72e19bc0343258babd08efb5ff4f82a3aa8e8b50f93c4bed2d1c0bbc07443606487a54f4eae3dd09b3b02232276c8de51b05ac31c64bc960c8d14b953db9e84c05fa9d2c3a286413fadb00f1812ff0a9f49b91de3660fa87e8aa73f11e0bbbecb8ca9be494919631431e29bcadf6883af673149c038a820549883e5d63ec5ddbb5d49817643f29c9665a3b416f67d28c4dbfcfce80132b3e120816c156947a003e36dddf1ac9652f196944c176d6369c25dd136c7880b20e13611dfe52971eafa0055f25cb8969ec688078cc8e7c2395ec27d7d38f0db653b6ab4c987dc9ba33d5cf5d1c05f7fbe19e639ae6baf87792bbd0adb236e4dbf302e93f26ccb2d7a47c8bcacb8f6ca4ed5302a2f461cbb0312d3bff43149a70b8271572797b52bf30cf5ae808b225829e4638fd9f2368021c6205b505406145632a9842ee338a796c435608ad5a92361a19d52b7f8b348d7fa16b3d7775c58e94069aa01bf470338dc28411563e610563ee8a8fc01fff824f63500599a7490f74a59e3ee4612b76871830066c4e3eafcd448822b4c08acf4935f59942bc3cc83e497ee8ad641bf329f6f0d9cf18d40794fe7146987dd6e29c3c862f5252a8767d966e0141b6cf0d166f18b658d8343b698d0a91f5fdba3ac2c32ac24935968959b67f06b985605bff2fc4afc2fb86d6b4e70bb606bc8009f9ab59fe6f6720fdef5f530eede5ee0cc48071fb9d5eb0ac468c820d161a6d09f7d319e3c0da450a9bc6a6bcd37c1f59b3817fc85dbe85ce050d72758f3e01b3e0fe62dd55447b479fb7a09b29122bdeb315589b568ff9a20850b0bfd20f220c05222d784dab107691974e426c83aa12dfdb5693f6c05c423a7c88b72104c0aba00939f9b7d0f92920f8b166512f7ca4d437082011b38fcc3596a125363eb5872722eca03132c8a141227fdf679b8f323ebfe227dded8a2871c1945e0bcfdd8b6c631e293858fa44ea16499144e72797cf82ec32c966c60de4aa921f3b754075a4956c00540cb5800dc97fd0de66936458022ba2498dbee43a99cd8e7c6ca2aadd1f63209d2a24c84a27c13b9d5dff7cd27
-TAG: 68ef1df2583bc3743bd612442589dc24
-
-KEY: 6269b478e1d79f3727831086620e79dd
-NONCE: 357fea1c84ec4de0bf7d6afa
-IN: 2f702a466807c0d2b8e4c81c402d566a0af16c065941b5f9b689a085ef4980131bb979a0b4300ca32f92d902516c3c9d799220e786d281d64f3a7b5cdc4721b5245444fa9291d4c58f9024387c4c4e4dac5ec5d7542986a2b97619a7db38720f392dc7539fdcc5bde53d2a4809b9223663d8876543a02431eaead9588ef68cc50e707e925f09eb53c7117fb2c8bfd07b578191b3af028d480a6f90fd891e03290d0d180bfa44953ac9388d08dbcdb238790bbe07df067a26acf6621b809a154242496baf4f7a07044c04dc02b5042c5365a71cc5ab9ee82630d97d1ed9b55be1711ac6b1b2a497eb1645c69ad15617a45751807a0e4cad1d0d965988752c65847bff53527bbd087f7d0f1b756563f38bf5905391836ddd47f57d84742c07a8000d4ad3fed2dc91f19e6226e7c3fc260e0ed4b23715cd01bf2c2fa59445d8a695bc759d5328c85db7cc6e2566ed0c5758ba2d12c1d285311208e1d4f66caf32afd1619a46e5296f435ff5bb24dd30d060aa462185b4e05afecb2ad221ce615b6867f5fa46599e0a9f3c03555569f4ed86b73a35db18c622b4089ebf31da474873637e4b97aa71ba883368691ed48f8600098b05cbd218c1d4aee55a0e6ac862518a6602328e5dc9f193b0941797e863d6534de6013555f35ad8c32e9264fdee17e927db412e76f06922b36b4c1f5f0d4b998d9c10dc88f3ac0b8ee01b1a88e0b031562510395b9b5a063ae968fe3f87a3bffa2e55a7aab152c50ea8bd0c61682c0f9c0c186c3dd0287c7c5a8f50c2f0c796ad7afe3fb9b45d90e8d2443291947067f982f070643289a117c404124245273fe17aef4c48c1b9377f54e6ecfb43aafae2fe52eea2f2b8aa4fa5a7412c3380723dc99e63c0455736ceb0fdcf1caf6714937c75de252723a7a1b5c7bc5ab1430a8fc44d78467526be8b722e0a49c54e85b6da58e44ab4db4b7d1bd33e28c1aefa462f17caee6b45a6d5df43478f36ee54b1158399a861124a95cc759fbb5bd4572adcabd5073758e0f40d6e733a87cc9a3653dce1b59936d57beddf6b980bb7cdeabaf58d50eea9ad55dcc7af8369bb9ee8af923d4dba981d25efafc2d2352315e367a98e21c6a4065bd95d14ac24cdaca55fa220b37dbf7d201b289178db041df9c3
-AD: 0377ed6ab683ea82545de480b5f15d0f948b50dac3b7233676de10bc93f529d5955ac70db7ce9b3f684283275898e74dc028b10623bd0cdaa6ebacc2b0bbb8aaf2e32b4d7d84ced724383443f493ec24948ef43a40bf94c1b97e0036e547eee4c59cc336d4205419d66374ac29cee8b274e1453299611c491f8303d00e0e445337a176f263462d0ea16c297effbc98a0790ace75c3c4965d09a32e38d0ee62c6277131f55abbf9d5c733910eccb8703634720f11429302c772c54ae4e0e2bebde2c251786f67fba677a6d9beba08d3d9436e28ec7d5cf016ba69cf20247ba4443c12ca056d3a11d1065b18a037add77642cb8aedab88117a1bf686b17efb241092ab2a17bc9562247c501479d77d0bb752dc5fbe2a4694d0309e68b885a434bbf2aa87ee6e97aa8fc715d9667977a75b37a42a1f4f27096887498ce460301d9ed2a32146a2000b1878654c85b5ebf2828161e3828e87319b838647f9973b860c6ce9f43cca21933ed4526fbcbe38d0169f60a85f9d84ad662b62bcb1088ffe9350382ba8c2748c79fd76bbf863f9a60b971fb6fa9446a3d0340473
-CT: 096e0130b0e57de1c25d51c748ac53ab8eb5f834ca5efcbfb9f9f950393a6bdc9475bc98a224ea22fefa19fb1d9dd5cb06f0bbcc266c78f169dcde51a7864c5a5c5996175b511dd11c6faee4f7afce3c499bea2188dd443c654486ac5a1b4d113e38cc5c2bd730c3ed87696caa6feef8f466a3323679fde56da63048433d78321388125a9a59d8728c40485299fb0a8012dccecfeabbb7a0343d03fcd770c1b5ff13116ba845b90c715403b5b7588094dd554cdcc1a166ed872c75a7719c83e71b9703ee90e4909e18822d5d2e64a851bdc30b2915371903d6748b89af3da42d041d4752fa1b1947ee12c5106404bb6a7a3d47629841da3ca1652666fe15b9ac2ebeba651baed43e6991139f90cd7ad9abbdc89222086da0b9ca7f4e7838fdea61fb815c534a878d7cccae9fc07aba48ba6fa7bd3a3b448e99267eaff2834a2db3084f28685052d2973eb7c74bb319a232eb0e1bef7d2827081310aaf1368656f7c64b1ab1ef3d4197b350154e18595aba352dfcbb7c0187d8ce67a78cdef6af01b3cc7f0f76d8a9de741c87823f1e6e734dc60cae88078e233e4e8a525148a56572d67ddfbbeb9409ac01076b84d9998e2d10ed62e2288f440f5b54fd7a5a1812bca2ffb9319e56b674ea4804ba0f6d92d7aa7a5e1a9f403c3c6fa8dca86ca4149f2d0348150395ffdd382698d0efb7421fe0ef930b5522ffbf122149a5ccb8bb6c3bcaaf935d839b9b820e0f199043105cebb966a6a4e588a99d20d89c61166c257cd6bfa545f0af914416f8fdd53cffc1d99b27b6c3160205c8b71af69cb398b5cf8f72154f612ee0778fca187a574babfcb6a9dd61624f8d6ae247b7c15be83d6cedad267f847a63f58e4ed7136de31126ba114e5bb94e932e3a10be4da821f091ac27b0c3c73d7fa6215bc5b85bf8227f10dc99706644f11c3a0d5ae282477513304c2cbdc1b5dfc6d6314da4b20eaa43a784fb8435c0be578c409291866073c31bb6a210b587ac009ccfc9fcd342e07854fb664b6cab7506d5248f8377314e5fd6dd17ed871ceb5336a5ff7137aa45d211b06a4cb0170ed25838ba8fc1041f516a127c245ccfbed4ccbbff11c0bd557551f86dea82db1f01ab97b9b19a6cf94e405834161421ef056d96f3482b2bda2e
-TAG: 143dbbcbbcb66c7ef3ac9e730360669d
-
-KEY: 58cdc99ac30e78d6238b5478982a2b4c
-NONCE: e58537a34e5ebc37ea72f321
-IN: f9e466031515c45461e66cc0550ac1b38ebd92d448d0745fb0be37eabb926f61facdc5bf3ae52caa0f923bd73c43a22b89902c0a4c43e12364d0286f328e125b8f5c9229fd955b5ccfbbc672275051df701e981e3208cdf832af70fb02325844120b5fc82f4f8981ed70989d78c69ab0ff75ab96c1ed69919859822ff20ab698e25f855cab4f01174c4feacd3b94003fdb1479150f0a9ed35de9dabe3b7c24a56685aafc396fddc9e6f1b35955b485c61f2659039b7254173364a57bc80418e2f6b7ae28dc8cc5402098b79c28806d135ad3d5a5d0503f32338334c9f6e63f29c61000ffa87668239ee2e1b0cd654c78d610509c5b83610b1fa85cec31a533fb329cbf0c543bed9ca26b97df5bb12ef4e6d252dbd955a2693d4903878b569bac70c4562712ee16a7da269d6bba8dd57b54246598e50453f47788a2038e206b4e34ccfd275c6f5f1de5687fce97d5707d8b697278a3e7c1f07ccfb11f23b343c5d8c7c08b1122b36f3286decc760474b6a27646f432e740420981b480ecc2e50bcec71691da9ff95d4351c1637f5348c5fabce63137ba3c82b93e7a187619ce9c2aef21b0e696becb4539fd581481c35255090bcd08de83c0c4d35065208f2d4c0efb7903757d5408d49703dc5e8c94cdb9623741468ec982231849c1423bfa1dfcaf6633afb5997b3353cb42c7e8f99906331322da4c579a43d663ad4f7bf9d9d7bd7c54b65273f08a76181fec9b20fa5b4dab9ef00e0f6660446140d3b07226976843998e94a69e1cfdeec41d7fbf1c1fb576ab99ccedc4f2fbd6d6bcf6227f8a93916c859b37ded15cb9bdd13d399a51784da099dab63a4c0ba22d27aae6177372c05c1e5a833f459caeceb28743db88fd2807f605f7448d9220b79e56a312f06994a0132e43bd47b82e0e858e8d2773a7a518746b094df8a6cc851e6ed7b98ea657188c6936fb4bf0911ccd09a67ae539626b4573e0da5a64a75b0cbc995aa664f4cef75baf574e03cb7b1cd4efb301974fa1270be36a64f55f19890bd21824fd44099c384b45903d5a85fbc785c2bf10542eeccd3ff9004a157396a126516049e26f579e32e51c1e9d8ce32dfefa3e2558f6706d31757161b9c17c8f8365b9ac257071132f8c05cf95b6b8d9b650328b561a08728a8903631efb21a94e7bee60d132
-AD: 7840ceed28a572c5186f25462a64b5a93aa35c427594bb5a77d6fd2d8c40d614f5e0bb495a909f3fa2323c248c94715fa52017a2d51c866e81aacf2efd74f40b7457fdf93af32c1211e675a08eb4330f6e24c35f626da6692bd9a13bb18c42e6b2f5c978c431d25be0f38352cdfb5933e9581834c33b70b590fbbe3122a9076e619142e8c698c78f532ad369447843c58df0cb105f8f35d4ed7909ff94a3a2b0ec99be03c29c33372a1b9d8a6ec7c38ddcf4dde9bdcf8f0d63064a5072195002b953b16d2228e71af3938f5402c24e4f34e344c26624519898e0ed1f20980e36bf568b33e332887610d8da5a941a7a1bd8b8fa8795014ffc9688a53b4b9a60f527ce4a737e99624e600de8cefacc246473c9641a1166d6894d71b9552ef3342cd0a7e3b0b65df836c6d8786f34c851ac4c72dadca8e9753a4e6a14deba129f4e442a13e3c82d405f84e281b95afe2cb066a2f49c126ecf9fa440d6f9860fd450f7cdbf5c2fbcb5aa2023755bba1705de94305e5b304af4ae8bbc937c6f477d421f5d72784f9b3c331a1f850c4201c6459270c6271b8bdf00f23389acc7bf4082e7453c9c
-CT: 9662e1becc3ba86c8edcfb3ee94d3ccf2cd37f7aa1988bd4cb374cb5f3cf4373cbda8c71832fcced0531c35d035fe6de0f0086740a62b07e81b3a0f98fd89f22243a4e2e81263c3d4846a3e54977ce7617702e43adf44783e279b174591fd1fb231f2d5e460a866568c867c8e762716959fdada879c77b7aa613ff15ddae4727cb3a2abf192fb74cd6b1eb5b632953422cae683ec87d6eb69a57c2021232181e8f74883355447643d9fdbf23b00f7ce602bcb1ac3144387610e045049c7cb1bf1babfc18b21ee05da3173bf2a0d8833698e7b3ba5e72996f6dc43db0228c81ce3f1c644090b922bfd72dfc81b60a8378cecd2ce14b9a53a16867476e08bb99f0708477e1c6af6d262f543ba4b3cd5f3309940fb31691b9e50ed2f3159afbe8f3c95a8447af98a76ddf5a531939232273c669231091f15e8f819183d8d13624bbfd6cfb9bf781bc74a9b4ad631de4694e8db879e38508a3b3e26158ae3a897ef6c9ecdc5f64d870964f1d0bd924f2e919e4a3c7ff5beabf589ca4be4093b2a95eddca2f7e09a02d639ba872060d7db147476cc83153f7a5227a1ef58f08dcdf9f821110512424c7e84d62931a73010576f898974cf24f9361d1abb0ea3e84c79925c87544cb11140481fad00dd75581526c0b9d49d74a05398e58d8e94c6c86976dfba9d00440c2bc61aa2de1cb9569bb9c4226c05cf31ecbd4854c2ccc99c1ed9f31a270c0ac57bd43e6c5194f8b2efe49d34095baab0bfe8c3c372b9bb77b974deafa462b08f9e05e027c3ad53a24206eeb5bd4973cad46c0a8157c47ed9ab9d6b0abc571223d4e3c34675f89dc0374da151e2dd6e4dda27479499910a7836a4b638dd32ef7ab1c5712db101aea462c6ea2447f39d38efbf64794c466165723063eec9566f874cff9d6d2e96e51f5c6e0f7349bf4e667e4b3bde503a412a165c8d1381d7024772a273911ddc4186a7c1e9818519d9935cb22452468938fa0321c1bdad488dfa0601680e06404b0533ef7a8bdd0c00fea49fda059f2deb7504fcbf980e13d6c67b0bc3960ede0fde107fc571304a87fb19ceab00ec6cf4e0087b5365e8d43cb08c256de2300b565474076826f381182e6d2e0e9d77be0bcf58ca80f4faa685435604637cd6fc65366dc46d92ca0fb569a5a9b6440e089cd1d8522b20a42
-TAG: 6def2aab9f94f8ceed77295e25f81309
-
-KEY: 283d86e8371cf7b34cc9988005575c8e
-NONCE: 98ad34184dac039f04f84e5e
-IN: 8ffea351a3e1a51221abcabf06f7aeb97525b07dd8cdc21b71c97132f3f6f41e5e01c97955f4d67793e8f1cc5910a264efa8384696969680de914bd1acc9c7e9a278ccadcf8c6a49877acf2ea3f7e5066285672bca4dca1583e0a60b82b18fa564c5a7b08a2a0dccb9170602c9f7cfef98024267553955cfea077cb646f2b564caf529a5b34b83d8a16f30e2ff3905106e224444287f3ef98a9e12cf2e3e04a7a42ca30e6116834c169f0778cfad274d43d969dc100b9e1a810346d8ab715670fac2e647829bf3b56f2b7e26bbf025e74a3e9af4930e182205fc09e9fdf1a2ea0da9aa5cdc21a41d191b8fc189ee5ba00a744acb351cd869cebac760b315e60756112bd20239203ace94bc29b232ac9cb361e5b7aea891b5827869112cde2b0e2493fc0c88fa72e92532ff7ba77d5ffa865e47893a7452f0a4b44092caf70e02d344447b7dfede0aeffda018f898a8872c6ce3102ebca9e933fcaf22b5c855f620b240c31acdabfb7fbf109d2e9604b465abf43d64b6a010ab928722119625bc046c4489a95628612995957c75510d896ad2365603e6682558c185eec6749c983be4ae29a8a66728cb39eb5e95e7f7a459bae5cab7e75c587689a223f2533c28d44134b87f22e964e73c030782c8ac4ecb2a62e3890d0d96116a4a3d3aa340783e10a46d099d601a8ece1938a640c1d12b88ca4ff89f1ecc75f46a736b7a4143b671f3fc531b5cb08c3ee7c02e606097b0191605d9ca3099c6707c590c678c8ed7a3471aea52fefc7f56a736cb6675e004298903b43a357c28ea4f59ae0894a8ee0876f347682403eb4d45881e04258eefa1cae28f5a646e3f91cc08a935cd464f7edc1721f5b4e389f94d141ca4231573886c40b7df4e5779fc52daff710ce9cd40fb4dd32e92250592199696a13e742ce90aa6280275ee8c0eaf40c884bd846697c43fcd7221cba4f98b03a6584f4792e8bc16c2029cee9b4e80c5f1c91eb798345b10def038cef2f1246fd148cfd2e39042228726cb18029b2e38e570611aa75c72e6cdd5110a7ed6f5e5bcf1d1ca5e1b67462b36cebebcf6e21df8168177afcd1a31a9e498bf7da8586717ca491292b0df81bdeea3a1789bfe70b489b1d4e1ce52dff5cb7e71c009d6888b152c644b959036b0667e8a6471d9f4eb559d0fa3854fa6f80288a03ac298a31f69168eceb6fa8434
-AD: 73cea023d2c6afdb625b6411ff8fdd9cf47bae5c529c6022638e9bf385cac0b72a046efe306c3463df27276fd63c88b771f84cc9a8bd3be7ea05df941502d7a437ef4a3ea22b2e4ab8509904f352b83cc3865c489bddc6340bba4f2b4c382744467a3ce3896bfa9a0a6a4f8d6beba39613df508c29b074f9f68e8723f2c2fe02a5dcf68965227059e2b1dd75bbe2b80f963cf501d5c73663204490fb843a3793c585769ee10b764077b70654dcc7b9b3fbe7f4b146ca8c6b8e164774ac3421fc2969445f77b77cf63ff50f04e2439895121f1b9c4941b7cadf3a92101cd9d4ec6a07d70d2742e6b3b87981e992c549691a82e250c0fab11bdc287ec357f182a6c2244db8b39a0cae9cccfd1fb32de73901ba3e695574477c37b66d170ecf64130df3cd94049bf9b3cb388907f3dd9389c71c344058b30091eee2fe06f6be3eb7ab6b7e269d2f33431a51d30a39ea8b280571565701dc1c048f07f4b5f9e04a8dc4555e28919acfca9caf597a394120794b6a09aedf866271998401397a4e8e11a25a061878f624f78c321bbe8149bb60887735fb3c0d96dd7f022cef066afda0ec9cf4e41a82c4beb6cb29715e
-CT: e8df4f21bb8d95211c75b194c30b1f3816715a063b202f8db645da8b826fb45e9af541ca9cbdc7c383d4b5179707f6665f8b2a74c5026243c3c5d9c32e6d309892323440ac0d945875c2665a60be211981d5dcf46a211a4e7b58e0062dc43b87ad3a9c52751f649c2fec404b9f858f4cb3ac9b534c850a8994f26136eb70e90ac44f623aa3bd362069d32a85c65292455946df893376868cfe3b06ef638e56c7defb9b4f0a162bdc8aed6a023836ecc08ed826ae9b818f3db6501ebbf3035159b6341ae703512a8fb8fc3ac0140c3ccfb1ced1ea4b7ff545ef63f76010acd708778d0424b770ffd36f2ddb6009ce5dcc498a9bb8eaec3fbbefc39da3da2f7f07470d051837398160c1c85ac695a519358feb3af9274fd3f6b1d936eb400e0bc5ffcf44ee9c78c730e4f449a008dcc912b6f9fd5d17f5d6dac025be318d5aae77b8858c1effcade42dd360e13b13f35baa64d37535a0ec8cd3a73d0c175be0246da3722db1b64f750c51d6e8da7db1ba8891fb688294124c989cf7d14108ab90a968f0729b6d7c6cc777e470e946b0fdc7b6dabfc6dd7be52b51ba1849cfce2ef2ca70c4a51523a1b0410e8a1a8e1cbfe7f1eb3fe456da81b4de6fb15ae13a39fb5b1c2b4aa9857543c3fb240965578f6b27ab7c69f74af7ec068e8c9238dd4848bf2345ab153730dfa9d1f57060e3e5f88a351f83cc78bab6149bc093ce2b29c706cbf85d35ad1c036d2103c89f1401f4f383d9345759a7be3f72da2eeab56564d98e2514d99192d82ba37ff5ef49a8770712c41e74c08227e3a2f9b516904ecc23c8368e3b46133094121209d57be76dbfee3ea7dc3240bbf1bace4369b09ed97a9080a3dfd93887152d1c03aa267ddbd97568b0538879c8970a62a4cb016e7e80b47bb21645d6a57f9ddb080551a9ca9cdd4fd0cc575bdeaa013150a8a04d05f3ccd19ab0979c9fda569e362f6bdd4b67268a88d88d0fcb9d68c47a0df0bb64048baa0554cf2b0cb4c27bfc0ce8d4a35113aa30ba03f88c73695a5d6c3495b5a15ba407ad75bab597a46170594beb34b7966d6bc7dc4ec2611cc15dd60c475c7d7b1f0922931d00dc93bce697dd4a4f72066d64b1aba029129d3a26c5ed44d19df383802733ca71de86e0a2f8d0ab04307d1a8da7c6f3dbe509fe29935bfc2c09712cd35c229e495ab3b80a447a168d044d163ae
-TAG: 05b8694f3ab53f8a0763d0c0a1c5a64a
-
-KEY: 6611562d15bc2b910f4edcc981c457c0
-NONCE: c20bd2710668b59242f7547d
-IN: 2202864ae65d2cafe5775f3025eda387030e910075e3664006c28969808975b9a72c905c86415833a1d1d86b8297aab682420a036208839f9e811a6a68b5bfcd01c7310e4b05f5f77ba1dc08f18e57a2044b20ce84acba0450b9b8ddb378d0135f779b1286948985ddf57a7954cc1f21252a06270ae34adb052c124787ed72511f4dde5ab0a708df4b307a9cd392160ce24119be4eef4af0025ca4047b07593293fc17889932588fbb67e72382f8ae826eb9f0e4b866f683814adb2407353c851f64475da9f740f71ccd7176d3d970d8618febf5ade20dcf51918e8a08e57cc4c4278565f6c2780c68e43970968ad018f3d04fa375aaaa5cf10f1cf11cf203ab299fc270ac41a19929f831beb3a3221a429059dbd4a00bcf55768a9f89fb35c8c911698edcf59ba3c2398801401e0e0949dbf587509d9bbfcce3a8bf5023bd751811d25de25693a43f14b01011d6030fc0d3017bdf8be8c84a7c088e0c09048b88cf0ec74181eb904b91919947c57933e5e5ed9b46550c951113e8e2a0e06efe5fd5b4d182e33738ffd16f571cb126cadf79dbab4f307e86eed9d3e2f3edda6b76234b7b80f7dd2815963274fb85d776bce13fbc60f1db9199c3e1158815c15b4d1858dc66053fdd4c128397972cb9ec05c87d16f53ce5bddede8ee959b5af5f8955b9cc11a26e53b9b42855cd11b570ae35d85e1877264c949e27c6ca797f77c0e5afa40d0f2a08881820b88f85bcc59edd24963771e9357f66f874c11a684f7987d876412f3cdbd7b9b3a26008d551732d9964deaef66cf4692507fde97239f15e2caf990f59a62693d0e723a50286e20cd347e6b98774805615100f599f6f85a5370af468b41633b85cdd8bcc7236296c50a530bd238ca0ce520e8a29f8ebbe27760eefa1ec14f91d6b751b30bf67cdc762486550793b4663dc38f378bc36eaaf157ed6846641a7fdd07ea45fb1342fe04d700ccb0bc9acda5eb00fbfb4aa3540fd675364c0f8f119df2de15ec2a816e76248c11b9c3e7769f98ee8d4cba3a525168e187df2f548a940e097805d735109d8ccb6119fc366caa17cb46be148d406a770a24067cc9c8c40bca0b544458b47d0ce451e4a4eb9c23716666a965ff26287823a699739e5a6ea844cbb5dbc111473d88d611b906fdbf51e86c5a90a68f97e334b7b8c13178f9678888cf894bbae601f4d3869d6fe444db9b35aed803549b72fa399
-AD: 26a47e0b75a771783631e6ba553a0aaeedb236216bff95050ad4b259ed60c071e1db318c1df201f2eefd8e73d66aae5835fe869503783504d803ad07f2989abec14a443e3e935684336a437c83d0c95ce9759d995e2cc454706d24b810fee5e32f4120aab927911f7bf11a7d0f2150b1ca4ce7f216403f3a7d622887675278a748d2523af6305c9979deac0da24f4397f57f38c8a860413d6ab4581d48e70b4113aa1a963b3a97b4c4a599be2afebab197e5e41d148b65ad2488af0fb9cdc59222a52ebe6a0ada339bd8b8c0195fba21d46c12d57eb7b98ba85fc494863645b0b32d9b8b4391436e887f6b481d849c2c5f6afe5496626c267a3982daba9af1a16400cf81bad5c1398d605308427340118734e476d808338de39e08549482a24729190041a303f61c4928ffd7a3bb2b46c92aab059c8ac1dc4affe52c6e2d3d55ce623716855934e80d3d401bf4532505c21ac85b738797d08d69e424e521b479f407c7822e5e408247251538a6c31bcc7fa0484dd8a40ad34f0fb66666e143193c9cad455012c3345953ef63b13b3b2469322b7094e8140487c76761733025bac8d71c3f406b0cebc28c499bddaa34ee6c03a82a52e4
-CT: 57d4e97b3ec3681ea9dd4fc9ad0aac302b477f081ea56e613c53b9cb9cc467a2042657905b7a5b308bbff6803d33c1e4671d126ecbbcf6739842ec4d552d377dcd25b9089d96d284118ebafd0cf8fc097c35124d900cd69a2fc1f97fe3cb69c6648aa069eec68893ef2d4d8820ffae86677fcaefc50b64c4b53c9f591a0f6a3320afc569b6eb7637e5ca07c2aabc26f85521837f0e3a6435ef5cf9d2ccf4edecc5e0984601f88023f6199456e965457e638c1d6ea87f5041d10c187eaf4dbcd0cbd6e6ecd6043629819af18635caaefe6b0535d8fbacb59a00f4c0bfa8711d32131003a051eabc95c0e7119e0ba819022cd01590edcfaa7543dfd2809768b1e03ba070db5f1cf726d425a6f623d83c454c78118a6dc32ee47528979f6d478a58ee75bedc95e9e74fcbb96fae77353e6f9c8be5727250748627d3187f9408eb131efd62a90a19bb2b19b3b3a478518e49d98609116bdb9b7de7777c8f0bbfdb2d1a9c4788d81fcb548ed51d1be85a603c1744792163bd18aac3d7f20e97e32f806e7a049d3f51384e324055bfd57c5116e48007077e295e0f3d3edbc6f4be1b08d42533327ae6c7464cc45ed184912c1624caec44a0958fbdab3a2a9eb13a6e6e4ac98e40979f4ae4fd7a8560b623bfcc326435df878d643f394d177013f737fbd4971f734876d515a4f2c71fee5a36a632c93095674310a60809240fe03d7c1584a446d536fb6316c9354bd007a4de1b12e155ea6216790ab5694268081f0df280f6402373a50e2d2da82d7399ab88fc9020109e93716fd3b7d83b14bac73e37a60ea805aabc557774c26c3ff906d5946514e222747fe6962500f90765702fa16d7490d9255d74dcc2c097dfac75e9f7f8c090f4d8e8cdcf4449bf5f7d45988f363e4751ffc24cca95d120714c2db59277837ea38e3b385d7d3811bc4fb755e6cd29919654bf3dea7bbe3375bef1a20cc55170ff514522886fa4716d6f99bfbe5801d1f93ce5bf82fee322e54ae1a2342659dbbdea49ff1b20274ce3dd2220945e5142f3152b4c9fc88dec89762b773ea1c87643ebf52b6f6f5f26bc1b8fbd459ef011033f3611646b50ed0b43bcfe2716dc780b8b5757d199e26657aa870fb149bd3f44db61f07a2692ab06ad8e30d40e8f6eaf4daf6a637c38a9e415b73b0bec06eba1a7e5b34d141244eaac717339b6ab052286bfc083ddbfd4ed0a70942bdf73f81b08ac
-TAG: a7bf4e198482bf1ddb65779e97c2fd2e
-
-KEY: 8a7302e5e5e5a3f660bd83aedbf1e2a8
-NONCE: 8ca05db202082d8a59d11b14
-IN: f6accb8d8d24709709210cea12a34265c3ce7efd84dc8ca309f44016d13ff653f253d33d180cdeeaab7370808e1b8b9138172fd96dac39588ceda91c4208a3707f90f2f336a2cdc1ff3fa7aabf010776833fcfe43c3bf19e9a480495064ad435d3072ce131283d38937301b29d0a063c3bf04ad6664f063462aaa39f1123a010d6f20487a6b12ea1500abfb655a21a4b3eccea51368722f105f94f642765e7765e71199ec5b59c2db6eca6ba9d6150c2e7efb8635493d19953f9485c7e49f24efd2c68d18b1302da88d8bdd26fc7eb6a1abdea09907c02bcd80fd1da76800f18673f88922ddc6eb0740bca0b70f7d1e6ffcaf017421322c2945b155f582cac5d6ae6d4e5411ab895b953a2eadc3224c4dfa1d8f9fa592c123c2d5e1d449c92276dc21711b101bd40865822bb622dd90d6c66becaea70fe9f914032ffa17dbbe16c0681c9359a9b156314618f887486974951cedc90dfe9c04aa845d3f4b4dbb60b2e3271c456487045133c240b9c415124dcbb57671374eb27625e2697021c71f5f51237def9d88fc2181b6bac76eeeaec365ce443fcee15650150e57f92116bf9c3b52f03b09fe4827b876bfa3c3d7b84afd90972dcabaa971b625fe750cc04188436bc374689249454a4e54a70f2f8adc56af2be48217575460fad76faa4ed3b74f1cb6d3fdf8ca28723057c75ff1e8a74f9da266e9c594fb6c921b9995c926bca308124494c868fa6739f4a6ac663db6312ae34ef43ba21a122deef296cd77452843649ed67a99103e1aa77aa23a3e41ddce3b9fc80e13b1875f31eab3f75f89ded007be22d438d4564fdbced99cd49b372b81b49914595d1ac5d531b0dfc38c6ee18206e44d1c1e25fbc1c027a152ebcd22a6f909178fead243083b4f885ac2af83863c0ad73921098519b56c81e29dbabb7647818aad5a8bd0e09793d6aee040bc9cecccb7e69712e5317ab75a68085ffa0411f82e385377bf1486d5d61dd543ffb20758d3f9bf04a5f97131079ee01a13878ef0c7f466e8f91e9bdea970eccd28d552f8a5f110fec1ff3749e282cd45c1caa6d06e8c426bc28b2a5797407f885b176534ada9720f0d8ff65d40b4f4589bbec0a1620172941e5f0f42d44283358f2cbd0a4abebeb346d01178f46be79a1551e0dfe1dfcaa0c305cf5daef3090c2321dafb6de0481c00df6937590165bb817fa26696ef7a8128ca03a7eb4a199edccfd4bc1d653ea8501d1f9f9dd6c92252e2eebc2
-AD: 343a402e3efdf91f7d63416068044d204c941276faa61238721f7049662f3721f8d04c908cbb612fbfed2b050efdd69e018be0f463c3e089a063d7b5d9a2ac4eb3bf63599597e714c917c004804a689b2c2ec187b73a38d60d9edb3be9f99d3b452813a3fcad782ccad3bb63c89d4abd18450f61bc94314d9395415503724791a22d1af865d3d5f5296411b6d54bdc0e7ae878447228b2f21cc7ad624a69d56a3694e1a383e7049ab75bdd479ab122d2a50e595fe370041e8a5d9e28dc3b266bcc40b9d54cda53d4049b62feced54620ae0d6cc3c74de3a5bad614f1d8d0c6a74674c9071b8c0b96352c774c034ed7fdc3b8790c43e6b7be8c227fc2b78a381215d97bfa3274e3b52187fbbdf68efee0aa66d2f2da263a0dde580ff19cdeb2c29a6392502f589ca7739e8f8f585791a3f77c1968bed4a713fc5b94e8d3c6830c19291f9cd846ecca2bc05bf262aac54bc45409c2a064c3de28e79831c32f5ec4bcce979b885c9facb99d0c54484154d545ae67d4afaeb545b5aa5541dd0af3416381cbe075cceb49820ad0d52f68c31875169c126b6b1047d63fea674a0420ac808e2ac64adbb8412f8d03a6a5cea014c835b57267cc4ceeb10191df466423
-CT: 18e79588195948d25b9beea1b2d1f990e7b87368d4af8c88e6f928f375d98bff2ce973c1e5ac525e1f08fe6e7c29a976181cb5a2a0cf40e3bb24881bcc5391f9c129daeb6c85c5cd8bc1f47f9f92bd25f4b5fb474f7c0b49828dbace32f5f9bfd968cf3871cc4072252f5b600d88a857b4c86c85ace62e56aade90109a118e9813e984dd3027fa4ff6162421e3abd22eb6246c1f9328d85ea7004ea3259fa355031c660c0880893705aa7d672996107fd46c7e6f7ea2d455fd8183a40d41ccb0d50ba627b483f8ec6fc3713010a73dd52053e033a26e5a0daf7bfe3fce8858e63e18ef1201644dc0cea8e723a24e7558ee33e904a0489c3daceac911d2aa83a63f893aa6516f343aec8a9e46c869b38f10d4ba7c4875ad3b092be565669ccdf8370ffaf7c1efddc33f67e5751668f3d75b619369c863c7d3f24b052a46af2fe66a9dea52e2c36dcdc7ed8093d0244179ab7af3c73942e63827e4b301cbc0bc2c1bec14d690e8af1f5c72270f71693d0fd9c065d9267be22d647728d39737761fc46b0a01f98b5a304325ea8967f6983dcfdf9ae87c224fc71bd9a1aec353b28208786124269dd56519e4b0cb058975ebc9803e35cf6d38824b93c78db05f2fd2797af1acbef3c2a74737e15f9d2c8f3b8e6e964043ef53f4ae5a58825fcfb1b525e38ba542836090c5a663a370e9762c89893028572b08fb0005529d44936763486307267e4095a05ea8895de7c20965974b20784c57a175dc71ea738121b24e96e3ff1e7d583894324e17207bd0a72b0baa89987b6884c6133bb3320c35ea3033dbb7051f89000977f055f3a7f1c38ddd0808ce5eccf615532f1fa4fcedf772bc7423209b3eb98de47371b382c72fd8aae5005f42a31126e14317703083b5f83dbe9d61778e221da54899e81f936a9973f0f5cc6aad85aa831071959b307278d085fc830cc6085f5701879aef6736df39a6555fe3546779284f618860924fb02567bda44dc97a4f1277e40171218fd1569ddaf68c4f58697232abcdfa6cde9bf44dc39b0a3e000dc89c7cf8298a5576a57c7047f2103a1dc31ce8267d879d15c41f23addf662f8fa49661669edc1ec06ab426591b406def208ca2854210e9647d9ea5d4bca84c5a687e9f3238fbd7288774f72d947e85ee26094ddbeaca7e135379f678a13aa866a14fd4e9d63de6d33f01e9a668bc3e4a238b9920df22db04ebd5447857422dbc16200144fd306062f605bf9138f817
-TAG: 0b8c9441aae6ac2cea3cbb71a0ac7683
-
-KEY: 44f4f7c9ef9a5fae05c10b2e7ac41afd
-NONCE: 55e84c213e1d5f58f4c7aae4
-IN: f0b16170b11b798e138354821fae367a2c17638f1c7d96e343014410c4b4c47a620f79624dd7f3a8de28fccfa365ea904e2aa625a7f3453bdcc990c5bb2d6b0b972bf3349e15497d71349e495c1116f2dfd9adcba45b1a4473566d8eefb1b68054aa7274d4e0ee81f8e61be7adf3c0409176f0b566d8631425835d1f4dba59e7c0d14bbec2ba93c6413fcbc3649b8886cfa6efdd27b8187f1912d17776c7508a54999718de52351352194a81b2b0cd83a5d16348f2e39f22d833985882cd9fd27c1ace4f75a28bc48ac2da52dddfcc4fe428e3f46908d68accd60a17f65e678fa55537afd06fbabddd56ea1574b50d93dc76d56b04e05629e2bc98021ef9107ed8770ae00f1ff294f57edb583b4b361bcc6afe3c545c14adf343f2d019a283e9ecee5505ce2c70206924d63c8b574c798ae0970547c1114f2f82af5a6bd4c1a33c9cb49fb126117d06a63375ff67f7091e6128eebb98cd43a698e3f441e80203262b47c82a65d9d35826794b6f647badcbfff169c53fb70c151dd0c57234dc522d47b4b8470652a86ac09b7dbc44ce8a90a0a2a9fce1b70c1a54cdf59015b89de2331253f682257a0db5c6ed9e12ed5a54101524647847ad87fa961ca6276eb05a355fb14a77735c930fa47cc66887bb687b20c7518dbd9af90e13cfe622e9b0036979b9cd9336da11e88a189ac81581e7d85c2fb1fe3aeb32629e23deb168db993fadaa37b1fec1224188d4f50ee3b8f9ab567b8baf1e3a3d8bf807edba9045338ca14d26fcbabbe7d8a5a1ac02d7c407c17a541fb41004f199262ffd72c3d0deea8296a08af1fd7506e7b72f18a7d322e4116021bfd44dfdd4f6dff5b772ee32f49e098445e68b3a2cb58832d20486d5aeee424752b237d46f1cf8194f7a46459767d1a104f6d35a9616eb47208b8894d998a51519d514b689ac3ca19fdb1efabd1dd33cd4298ae4d0ff819e78480ab7867b2f4868db26c9604323edd258c4f6c977fc4d1398e3ba6300c37a9a13838ea9c5eb18ee193c3566ddf3853fffc0ac665cb952bf76cd2d35106b934f5f8da9aa6672e8f9559777ca7a56592fa536e8cb7be5821961e740483563e6ae2de1b98749752314cebc390beebd4d269f0deb0ca3156bfbf6973da50b8e4dc4eb2a03ee0bfe73f21b3b0f2716a4662a71e8cb04ab44f52ac930eef1895b57151175727f81fa074a8e5366d5b7449185e4829f32487920261a84a5458cde6565e41daec0b05d1e46a6a34858d546eea8258a399ed89a5168b8e6
-AD: c75f25ac1087b315ab57ea5e8e39f743a826b70e584c4bfb2bec961b6769e2b92151cc1a0d8bfc27a9d5d9c7b43c51019418bb19fa882e53fa0f59d6761ff7ca75cf098f613086f9403a8a66b07bd1fde46c5316403de21d4f839a2e67bfecc2f3bc9c8f28b455f0fdb75f28a18852e6e44184e5c104a2dd2e21f429b46004a595ee8e2b008c2e0c31c12a05bb9de15011003d43c342330f5852bd3ebfb7bc4adec6fd7e3d77c1534e0eec7e2fade24d89fe42dd9d8b5bff5ad4f5f8f010ec0903b42048e8ba6f4b9274c6364d0119c718e6d038ed716b21b7f2297317e3869767a2b841505ae4aea6dca5e2b2813868faabd7a299061148f69b0ccaf4a555cb728b562bed9f66fc8d60be4c48c60504afadb1593078c36d54bc878a6a981ef283bab6f4ef6128f78a594b3caa6774a8e6246ca32e84a95ea5774b7c76599e1cf25b68210c2c52f465e3ecbcb91d609f211c12a737936d84551ceb0eaf37f92152f6e93918f4a19bfd09f16518004897d9f0728e9c1bc901fa85f8fcf77bc59c2f96ada344fb9a20890b74520a99e9241d9091742def14a46c524e2c494aa57c1dbafb8feec5d71247a6ac10db9ee768bd2f7cfe1f6da9fca9aab42da2b8e0db
-CT: 4e009626a3c4e6ee3a4b55ba06416193a63584551b8d4ed1e88f2b83f549129f329780515703fd0ef24a1039ade05d2dc4a25eb47a3e134579bfd6087b5c0feb9aa9d82e89706658eb54170c992411875bbe176dd0d25c06c2e58cee97e5444a1328b927a3616c32bae60cd8a28a58c35f7aeafc891ae5285759b24fa4b2cb59aa4263a864b89f14316181a5b8e654408eaf85f87b71ac0d14fa023a12cf4c18bbbbed4c0dcd5a93669183a56e3947b9cb72019cdc810af9df3ea68ce836f8a2a80074de9e8e444ac0e7982e0c029926c3ae96fa84711ee5c42ac6528648664deed439d7d7de9c6b207d9ad0f434c59f69690ee14b21c9e1827fd873d51cd2e377fac049d8d59219945de18e262f389709a291fcbcc491b2146ee372882efc0b48fb47c767bf0709cd5450c79948c2f35d1ac0c92ecdf9c338c1d80e5a7e7c9a2cabc78edc331fab75feaeb2e91be109bad562f2d7262be42fcb5bdad42736b9c94a1d5bb2f2d0a3e347b565ff59325a67bf074874639270ee8ea7260bbb7ffb018b88cb61c0f4b476111a6f317dfd7d0f8b9347227b9a260474a448abe10ca0a9615b2eb1708d07b3157f0cb641768ef759512b9d52c86b49925720335ab843db61b9a020cf95afadfd48bc739966d7b13148cd1bd426914700486568dfc1942c6bfcaec6eb4a47ff1531f4a3efdc57ef5c6945f009851925acc31551afad8dbde7d349e43101043af62aafaeb5cf67b6642c9c928a6feb55390a49e019af97b137375245794d794d72a2657f0400954676212428a10c8b75d9d0d64b0d23dec4c7efe5ba1e599f4ef051a050943ba517cf6b6ec438aea973509d1919b903cbcf551f4f2e328cba5b55dd9a5d03eb9e471d63e5ac422c47941d9fd7a27d00c6779ca609ba3dd58c0412e7e4b0740ac9064a6ed4d024918debd342acd03c7be1a6e7c49fea94f0069b19c363095b9ec9b7fbafeae5ff1fa68ae47db3641dd98b7a6d921843707f1795e610198df9b86ea45efdb5ba3fcd37737a06881300733a0a4f1558d562577dcefa0a9e76d17fb3d80385b442f1c07a381bbda05b5854c9c76c10d2c4ffe6e8c808309474ec30d88632a794be4e7002ab9d16eac7e5155b3944089bd482009722150e0e06ed0ec3df814b5fa516bfa019f3064b78ee714a03608167374ab4a290bccc10c76b247086c31f9b4de06d001fcc7158fba4569b71b6774a46a3c1f7f80d00ea315433156fa587ae49204be74d06a949e60867b3d5d38c93eabc1fbf
-TAG: a6f01e3b9b29802f017892ef0080642e
-
-KEY: c3e4bd36e2de49d855196d82175ac395
-NONCE: 16571d209cd5a8579b05fbb0
-IN: bee133dc3379bf7894511cf88ca955f3ba1f794ed7abb0771d9d319b4f4db940963fdab1e831ae6d5c6daa96c44f3c2ce6fe2772d665a212d3203a593f412a557613d4e465b5eef977a2b62490e28aafdb716e7be6d040f731409c54e4bb38989349d842984116baf0502d21c910ac86e3046e6753b9f8771fec297eba18ed382b17fb1ef0eb20052d36080ae162e9b8dcf67e7e3d2add03d752f612b94ebf4c5b0f242a39acb092e32fd044b8e9ddc6abd0d10985c3b25ca4c9ba476d4fa55766f416d5d1cca614bd1d153432ce59e82a3a86b6fe830e1c0f9e64dbdcbe0457ce90464dbe56d2cf66a7eb6f43760e04a784466dbf7b153b2b96439db92180103df8f4fabb5734bfd661bf8faef2b400102229a9895fbeb1f89e6da6c82b5201055264fed0089eec72892c10fb2ffb4928cfa8df0d2c6680a5299899d521d43972ab8ddd613e074d60fd27a061ff821e8c410cc6a019cc0279f602582b752df3877915fbf14de225bdc2ab1fb177fa1724883b523faabe7e7da1d697f081447c406ee8a2c1a9f23cfcdba8fc0be440f2aae9f6fa5c35c54e7003254734947fb7e1abe7f8040289307d31bd6fe8e862a2d9dd3febe9073e1a183a740755059b92b0e8d8a66f5904f1470d3b04d98ed4a62b90245767507e54ca11afcd113960568c916381caf4c963c1d8e9aa4c7ea0ea5aff12af63caa8a5e1f128e70f3c1387b50757e43ebd3e7ef2de43809f781cd733193daa2eaa5dfa0c8b161e9e4480d92df163c2619b571f42ebd706d48a6693d4a5071733544d2d4fc771d7fd97941f83c920673f0b8d82dff24402a14ae971000c5c8747b9a10d32d622b2b1c3aac7cf9804be165d3d8c46d2b69bbd059bfcbc1f23dcac4bf5eb5fa92dc93a7f3b2199cee31bf2c0414fa2ffef1ea34ef109cf4e171460aec158118e3bb3a0a8a18ba60e48f890add45f3fd3193a47611baa3abd36f1069ad52ea464c10f5cb49ba753e43f9a0d1d9bb038e8d450c41491cb350be288aa2f95a479ea3868a4ce1f3265e186fb6c4f54e57f285576c6f700d9cf035d296d4519c6e31693f5e0b6437383c77bb2d235c0d5404a82515115cd260cabef6f2f020bfd20d2ee21566def190d0a6a76bfa14874565f99738fb0863054b4f0c3624b68447358da5bc47f195bb468703da3ead51cf02ea001c57608ca98328068212406b9f3821e98b7481860dc5d9533f2afb7f74b9144363e6f54032c98345399a0547e21cf8509a0214ff0e5cb956130d03617e50f59e300a0ef211b4150e3e040d46d24
-AD: 29ff2b38d4e35a3c0035f9d3eb509dcce14170381d68de8fb8f0d6463a2cd293ce08c958e186031a942315977a1ec5ff66e47bec07bfdaacf844fd2c4fa939c5a8b1f3fb489f25ca7b10d87a7cb6d5ff299a57a1b8c6c78b429dae9e9b1c1cec8e14cc3bc2119df31d75e9e5e3df7b368cf4a6ec4b324500d428ddfda32e2f330fe089494502251392e554599451e4ffca96fcfa6ccbcb50828840c98266a10de53f0f8bbdbe21dee0861224aac7713d8a93979043d1550895e06e1848565f5f6bcfac2faa3eb21b423215cb39564b8138b00a15be5392ef1ff451da000186d9807c48a98e2ec6b7e045a139902b920c5ce782b111b8bd44596a7ac8f468a6b718cb7679d5d420f28510505a52004c412e6489f586d302939f3e007e320a0de6cf9d4ad38cdc3c852907cf7a1a083117bdf3e1bc4300befa1180f4c019faa73bf31c43bea814990cdd01b17b167f21b5de9541aecf6bead4bdcaca96fa390aaf6850a54a4293ac4460de361b3d58d5eadeecc6b5dfb57a36215d03c85a4805ee8af03df7627d42479357724349343862c960061c33abf5a9a8dbc2d562f3738f2ce34d68340707da09f78ba191e230521c0ff28c3c285075832c00e326c842296e6a4ac56946f42483
-CT: 9debc22195c3c01c571b369ac186ea10068cf99ae63fcc98c40ec69b3a04503c783cde85be74648786d5a7fe51c74f821992c0a0cdae23f4ed7318a42a6230f7c31045faeb40e880046d6e6bec6857a1e618fb360363872047781c05c38ddd8363c923762e4591f6a906d47e6d74ce365d36e41a3a6efe6e9dcba165a0c081fda577c01eafb1f83d116270c5e467dc7346647b9c0bb1e3b1da43b9cfd5a0f4cb0d3deaab5f3fe8401665fcfe742e686de8c050e8fdf7f594ee4b6c74ed0b210d92ef26e45da5a390f9290643a77b57af4800b25eb4f3ecd45e5eae5aa0dd37097bf24dfc0d1b7315d1787356e84e819de3e099f6bcdd3a269b2001d1da51681f14069ce8375d2f6b543e6fe0e9ceef03119ad96683ac884ca852fb0f88d41102f275d5040bd7f237a123d7a7b7d186d77b2a64b54568b11e70be4cd22324fcb072bd6f59d2a1da48a720feca38f8c164b9f6fc187c0a7bef39e4243aeb8c5d87d460dd9288e3de113250738faa5e82b2b4e672fce93f5294f81716aa8a5fcd43565db4b580ed18e41577fe2bf2c62518c1d4d4c324ae26a65a4bab6e5edfbb98a8eca18b34206705bfb7377c06dce7fed8e76b17c0cd2f061a77900d970594d36bcb15a92d2a09d54806d031c98942cecc0ed7f72c92df73b14740e661de31fdcfbc36f8fc89164b7614c505ce3b909376e827c857cf2b0ef3df86683aadad3112ba20126b36c5bc2c121737fbbbaa14165d511d50612c8d3946c5fd8e1a257a5c7f684dbd3b160d849b7172f4648c935c08d38733792a171cf20ed4b2bcaf98e39d09675b5918e5fe12b4e2be36e4b8463bfe708669c1d01a625d4f572e9f30a5c88d05494711e673c3d23b1003e94d4a75b9477395e8a16944ef0a1726d0388fdbbbed94faa5e78deb16ec471ed75d92772a4e437fa49af393ceaff5606aca86769c860864f62eb9c5801eae1d1fdc79654ed09f2b858718c48f05968a7a09b834c1ab0f31231795d0efe8394b3302fc0f75ac9e7c18e21abbaf6054f7442dd235451d3b884cfa25f6b7018fb18c2bfd5bb0e6d0075c2eb4f9002e30fc7d420268bad52dd916be28663a8ea3b2a0bbe653256314acebec85c7e5d2c1c163b0a15aba1cb8da585c83016d4c3f1c0aed13c20a9539438eef3a426565cd8040b2918d154e689d871a55f19b505ff94f3042b3e7466e21585800952004906abb3d13414134008c7ce1def619eea9cb22f3a44ba7070035d4cfc1d5bffa9e31b6390b4d1da2c76bf687b9bdf899fd23ce6921fa93a47e4156a514
-TAG: 232db78e53f788a11aac05af1041dfc0
-
-KEY: 64f49aea2a19ccab66841c438df5ff78
-NONCE: 34ccad859bfdd89fa9af0b99
-IN: 214eddb37dbfdefd2a3127354843f6b545f729391e0d19089255c9e0aa9bc0da87d001445c7d80393d1885f759fa8211231a50d1840e7d145899937ea7af1a3b963493fecd40448383706a33337ded7c51b4fc118a1ac975a4071f26a9a30a0976f369ae3a9724b05cbe75fedf84fd1bb6e77e07a76ceca71d5c035e61181c50e2dc976fbc64e1f4f9e6e12856bd3597b475f0b6a94e559477599a51bef1fb3a45106fcf0ca0468117274ee4e3f3f489e3a4ff9f6279e18c38928a00976464431227ade20b45c509675619ccedb4f0b24c2ffefd72b3fdbb3ccfffc26da5945a3906c8824d17a930633f8208d6d1564d5a69c4887812d91ebfd18d482470220a338de30b9cd7945a93460ffaaf686a31621c86b4620bd24776a54db32bed6809270ee19460c34bfe99c7fd18c5d7e9616efb6a156d4b28a0823df5a858a096ec388e2fde49a2c8c071fea73a23dc4dfddf751d100fdc57e346c9e690d2ab620a0dab87e3c1fc02f5f727eec6a1853067e7bec923dfb3c988c3e8f108adf1ddcb9b8804e7f3e9fc8191d059af53c95836314f0c933676044b85dbb950c953603589762c10fd76dfe2b301986468b3f65415badfa5d1f0c0816c6376b96c76c847741396adfed41fc14ff53c3d1745b70ce64f18fc2fe2ca445a7fba83780e265b390c4058856bf8befb36437abcdc25a758e77e0fc90971fab13c77d76751e19280e43851e7d39aaa0aed21bc32f7aaf25756111cd6ddc6b6f9b8d15acb4a25493f247b5bf134b2bcc2e5c2f91c78bad248357f18fb3278811e045a59170c9f0ed7f58707ea78c42e69a912a8321238ee63eb079aadf9030c4f718decddee4077183a2e5bf59a2a1eba07b8c4ec35cf9fa3a37a5c332a14c3711198f2bc9bc686b5dc6d3d7b6de1a8ab00b1fefeb107157f85aa8974c04edf757974a757090f4cadabe2283a29b317a831d8ae999173f07be4b4f665eaaa26093fcdda81fee6e170ed09f2944fd40f9f3ef47b406db52a55cc9350e78364e64220c9741f8e41745bfc1be8c6244c57f15b1912e55c6711ebaecbdae4c08c70768bda7750f142cdda19b298607e75688eaa8fa8f47f7746ab67442da283b1b9b9d12ddff796306cd690c0c32615007ee840844c7da285fdf56f004de5b7965450d48fc97a2cd2b774993a2bb28868fb241b051341a727fc12778baf3869fabd208aa3c55f81c247554d11eb5d847123a6ad3b177dd6ef950ef4371a6c0c294ecaab63beff193aa751ab480ec6e78bc1358c72bbae8fd8dc84038806efbfbca520a9bf9ea1df8ac365a0a95a9865ab3b3556
-AD: ad8da691b07926db63a9d188d3f237aec1f8558702b0942b209f7e6096b79154d2eb844b05dea8c81bd041962e0c9e8d1c64cadc5a46c2d8768f57ffc27a1d5003776acfb5f51d372510d26eca840dddc3fe79e9414bb76aabe249c7f89a43050b85dc6b5b9e13aebaa98aed4cd0816685b20619fd22c860317b1ffec8f7e78c36224bb3922208dc25d23f023139fafb2264f9546bf57767d3117b483807cc5a1e0fc2c691f3891f54897b46c01b6f55f4bcb86af20764bdb9c7631faa5aaccd555e68a86a9491fa87718d5a9112e4ee3c2364b5f339efbae59db73eace1dffe4439a64d1baee99e6aa0fe380cf686aef739a456ad66dcd149ba8ff6767e54b1a3cc645b245c2b2ab3607334af0cbd8847c3931b02acf12209ea79af189fd9c6c01871650a009274762d07a4ca60fb9a31adf4c877c73d0819f4a97c0cad91ea5bd7d5c8ef59b35f2b24060fd8c6b4afee8c4758034aac99519757ffeb6fcbe40b2783f4aedffc9d0da49f3f98dc25a66f2c6695b864bc40c2fd5511c7fe681d98304be4c3e9bd7289c9caaf6282f7c5c7ee4efab267d7d746673049ff79ccd7bd019ba994417e22a67f856310d8abad147ce68fea094e52969f9738ed6cf9cc9eaad35612400b622da255c9758d42f52dfc
-CT: 2873303a8c1b9d3230e38c46f680a7ba273e654fee766beb451f311b3192f16a385ff3c70f124e20f6ebba3bcc288ecaddb2243d3c707b0cf50d09d3c89e67d2a2beebd0ca0be6efebf9dfc519f5149e7c4f0c5fa8ef05cac1d2246f2616c179b4cdb02bfe3d7f394d885dd30f429da8041cbe79fc35dea5d90b903ec27cd09861422d3f185b887ce5e1b1d42d77c254fa003f90d62d980ddb63593e8700a20eb0b7bd930d38ae937ec326116f0b9983c69c322589e79778707856eac07ec42f3497767860d4e072ed28a79e263297896797ace5d32595c8b039ea3684b763a297b30eda2a63e178a713a03ebed0e0bb54c3eeaf41d8940edd2e448533a0258036e41211c835ebde50e9b7fef5c189834dc89cb7aa566c40ec7265c068aa50939e9976d1dfc4cddeb630a4a1f78a9134e10be1868ecd92628d3f8d827f432123dabeb9f45ba4576ae932ed42c6447a7b9f3c9b252719735898c76db75ee8f0fa655fa023cc33fb1ac8974774ce6f23409cfa7a4e936b57b0beffbc6895731a450eed1b4cc795813bb5517997037169af20da701d42d0c9b169e4155a92b4ecee3df6ca6c4a22474c01fc0aad8866e5fc33a8b3ec5a002ada29dd4d284ccd8141e4180df300eed91ab9063bf331cb476d6bbad14fd7b6ec10a3e72833595579d134a642cc556b4e9613499627f0af51f6b22c0f963e4063838809510bcfb801880e455d7b4df9db1841cc2168d659d1997a251368f1c15673ce127033602bd0fd9988eb1bd63e47e8ea863bfce945cd077e486dafa43c7f5e35232c0ee1d00d040dcda1ded51a06ecea68ac635a8faa35361f32d19586450e7a7b7ab1a8861d9f0f4d9508cd2df522dcf04a00ef2dab9ad5ce9dfcd6b018d0f072e9a17cdfbf3772d38da7b799feef2b6bf7cb4f8cfa53a49cbbda15128a17e77f8f7b4d14e64e358a11cd01d5d2137d8719f8b9f66ecb62d97faa3d2f56ba50bf4b9a28bc896c36260748d803fef6e5a6d6f24a00550ed66a2ce672b8d1daa10097c88f81669d09da72a5e62b29494681b7d2389063605e1de349a83ef50b8d57c024b2d558d206a73e49ca7fccf2b1ca685156e63bb591125910e9f72ab2e8d3ed50883ef0bf6d6571cea0f5acaa11e393d15607373f25fc340b9ed6b58322187d6c8fe4ec47666e1ca34526992e7056cc7567397e7ba0c26e1a049eecc356158827f3867171b4c77d408aa24c51513b0dcade9fe2bdf6ec856d4a44112fce5b4c55300c24aa2e9cb7d289744562dd44afa68dc2f14dd25c65d3af78d4bbb781aad5f9fa05367e02327b644563dbd992
-TAG: cebb4182450367713b8f5b047314d8c6
-
-KEY: d12cbb53bab8c9884eb83f1d2dec7fae
-NONCE: cbb6af3402bf462f965e2c22
-IN: 81c74421411edd762ea8b7b6bc4a44132c51c2db09f47a03ad2a1a17d73ad2a395e6762cb077a8be977f3925ec333dd56ecda27d4d228b1832196da7755e48517fa0582abad802b62cf231e0a2748b61855970912e1fe92435efcbaf5fe34ff2c0f90113966704701337ec6c0434fe2c36e3300a4387cd0514ee01e31628b9879fc666284150489282c1083079f8abde0a2e500737dad91b3a7c4ec1f4eac35dcacf971283825a37b65464e7a8fd66e2ee6721d4a118854f674edf89d376c0006fea01d278b7985237e78965f0987404efcc6576d1fb28db9f7fc1eeaa6b42949e11dbb0c137d501ff08b34f0dabb7edb6900c48e647ea0cdfb4c4ef3178548a592ae28eb119f1dc7b2f6dbabfa2ee4cd7b7b117f1f90af318e121084cd6b93ace98ee7750dabda5ce2b883f582e7c5d91ad42e7ea1fe8454a5da83a169c32d73a4c1c185a02275b4ba921b071ace5fd34a2076b226d71c229d8be6c58270a3ddb04a554e4d395df00604dba7882d89d9048b3e16c692e636c724580da376f8212a6b9c443ec303fa70cbb1994d12a1574bd93b946c1a005df40a3722fe2c2e7fdf51ce2b895c6cf07d893a41a33a6906af87af0abf948bae5ad258e80a0fc0afbcd770a8a32c90e0949a1151e20e81cbd163b7d1ed843008c813ec3bf44d363e37ec41c094458ab8f7457339a51810fad8d63611ec1a93282c301eadcb4bcfe4d0b370d6f8670516cbeaf9b361c92252d14e062bfe2e63b439c7d4b1d65dc8a62263374d718831fcb4bdcc0bc59a18530f7dffbecc96bffae9e0214ea7f2a319e5c07dc0c8232e7863df7d081a3486a1378240a9966a632c5e73fe4800481c4f430126c4b5ec71963c08d471e01b6296b64a593cf78f108d2ee866af38028e3a4571f5582207706932019646a1476115cad80d0b20695c84131e11cb9689a6bfc40f820e96bdb151adacfe447f06516dabb2f766b8ff5619a15efed41650211e4f4e114ba0b071ae0a6b635bf0e1cdaff2a2a1517e7427f8f1c25ad5d7cbdcb433987a25a2962130299f1de3b68503fed81c3c98dd774402bd83809367ceff45958e7627ee8dabf50f6ff6aae34a8c7ce471c705255099f602c2792468b5e8527b74948f4871ad5296c5c50b8d4ccb6ff8c2f44917baa7b70aed81302624fc405d3c550791ceadd2aef796a0db59c01a5496ad0b72f7a90ebb1eb2fbb2cd8d8f09a2fae46937f27a7a9c3cca3360b08143043d378c450de9676a94ea5b9371cff1fa3b067069393331324c7d283bdd750ca521cade6526c970a82fffd925ff945be16639864e4189c3269838d3268264b1aa58697121394f11a1b
-AD: 1d9caf4e3eb2d855d51392454b7f4f2b6f29f422d111cc378262c986e3117e81f6eb6340323427389ba2d174f4edcf5de47be0b3fa820783b8dcd35f18451f8256d6f703bc16e666367c93f8db0be18c98d4e93dd6db2f4eef2447cbde251fa226ef4b6c4183d06cd1090e46cee182743c1573b3fc885e9da0262d715dec1d66954ef49c3a7d54f935156a51cbb1b837229eb5619658db860835fa5c926e0b87c9ac50ac76fa6696e149127aed1b91bb623d232da5df30b9ef43b4ed018f59a803b995748e941adb785535d69b8eb9e4ebad17c4e2bfbe6d2706eaf90e29867133b4a58c3e42cb51b494dcb197dd55862ca0f274883686b1e492b35cc20e2cc6e531c15bea94af9040702513d7d929195ca34266c38ca79f3f5b0c06a1002bf40770fc223be269945e56f11a608276bc4b82cc228248ab46acafe801d330c28039f7614e59cae505931ae9fa387768c2fd9ffd537a0704fb30aef78b1be4aaaa6f7574da1274d3e84dab83297acd00885acfd32300a36d0e8e5ad2777e4c0f718f91564c60ff117e17a8c57d2a8310fb1fc62729720728f2991b4d05317537883f016711e07ae1b3e6d876d52a44bd246c427587fb91d1456711ef0c7970eaa33db3347397cb76b95713919c73188ce13a6a292d798844067c0302
-CT: 7f22ef21a372702a9fead4339e38ecfa2abe757d8ff986e7287a479a864bc1012d4621203289c8731b189937d50fd6ee79db7ee84a157acbe801bb56e1225dabf13a25b26703ec364f98fac1243ab4a4cada7080a4acb8509969ed8a2e9f309e7e465c43f55d2dc829e2ecd63b8eeb6bb01a621f86b4cd32c9c243c200670e0d9bf71b221de296e3364ca2ed5c73751b74db151176626a69010f136a32a14d47612488f90750316ea7088578bcb84805d331c77d3041af756f2ebfcc4c95c328ab03cd3424f689e410706df8b2e87ffbe24f8025c1ce48e2ff6a0a240f23b09a0378155c2fab57db5d8c0daa296b813ad148e94c8d627715cd2fe8f861e414b3c7f482eaa5ae1eefc6ff86ee30109e27bd75557d70598d7c65bf9bffbecf44a44339b09ffb88a722fd8c19f196b9822ae79cb66fa1c712cbef821d996fec59f5a95c197f70fd34db9e2349a372f43bec0dea764fcd71ff931d34fcdc8d9c9321e6d8984211db1c1987032ad85e1b03519f433ef9db8811fcb24940a320697c739136a77f66e97332b75b33b9097cfa9e224b262c19053ca32afa76a96524861a8aceaa98771efab10c0665533619befac9bca499ad88c9d0f089a7026583e132ccf3a542adffd56996331ded9917d363659562a6b7e45231667b8b3069f327d829489279058b9b89bb7902c1127d7e8d150634b580274b47354edcde999922654def16ed4378f313115f4013d8ffadbde1c8f8c918ff7257175f14ead903c03d5190aeedb2dc9e762e34b3f80d7ee460bbd14ae9c3182660608f033ea073548956b72275f74f704a349a87edb015e6154fba7c0ef4a32a4dc206dc42d5d261ecae22a9f455c409304131859477435b30ba3fad46bd5f69971ba74f1fe82a6d5604e5d7eeae0dc8ff5a170865134c5fbac13bf6cd007a16af86c42dcc887b90664ee5e48edffea8ba46fd84c844cbade00906c36d84373178369fcfb9226654233d2c5339099ae4e723a0c0516742e42e3c40994bd06086e6f030acef01727e7f600f7109000bddbdbba16b9543174c98810d5ef0c95598ededb7ab628323faef1ea4028c0ca414a7cc33239c84de86d53a242b4e8c3f9a20e3a826f0ade00c440b2f792b946a97758a073fbc811f3e22de8acfc9ef1b1a946f6c3cf9eaf4add2ba403941b446686d9bc0524590e2bef8f552dd54d9f69053f647ff0e2371b244d15cf1a5302680ece820df552b374bcd23f784a9c4bd486a71fcdaaf3812efa5a39366542b163294da6a2887796b6d863529dfe76ad88e2b47931de5194a63b9f07f6ec63081c3f97e9c0379c5f44e7496dd23b4c186e3613fdf0d
-TAG: dcb7fd2d779be6e82ba1ad90bc79ca3f
-
-KEY: b243593177cd099dbacd5f8efb412a95
-NONCE: 132b8ab31815dfb463451fbf
-IN: f63388d8dc46c29d2c1fd937c668025c833d7d96b021035d530fc404e1c6a3677b8a318c9a81e295c12c88fba75f1e17973732275846ed9103287714236edd60bd9cda0d4cd2695234bc69cd09e1b4db3cc73461e524e0934ab0cbd730a46a67b3614ff4973bb8643ac7d555a8b764bcf87f0bcc8d19cc9ddd3fe27a376b5a6affbc95cc6ba966f8ca697c5727dd3f942c4a3b6215c00bf37c50bc95b1e35dc762d8db2f0f5d30d9b35ddf005d8a89d2b106fa4e921ead057158c3fce0bf1e6e10085619777bbcb643b5fd86b9b39c1f11a68cce6115d2db8c01e6746c81da9dbea30559b1bbc2457c258955f2d37862fc492b4f590fdb8cf648707b17a2b613c5f08dc457a1443bd56399e34254c92b91093ea0208a98189429147771d1bc49296a070e052af3fa195f612fd2487eb49ded95f2c670b3ef23464684f12ae66f02d886ba14a360a852b9b84f9b5590a514701fbe42299b54b9e8c1e7b83c7ace9badd9beeb0f88707b79da375aa7c2eb9623c7a1c553c521a9c7a6a3e73f0d7cae3f95362d25f6ba2313a505a90442012f58f6d9cc55563a1e1026cc1ef0e69c119dcc4577eb775f5d1dd60cd60ff5b35dce6eedee48f80d33227f6354a128f9cff56fe1340067c9eb20e24e143b9881f8d646947b121df798b4917bc19a76e96babe9554d9617b4f092471baab93ea7ebcd8a05cb2d267be93b4dadb29d4ca937238910180ae497ab4c7c4b234661293c8cf7f2b6ed3e0a738ca8ba0b558fb24ccebdf3b3e9714e6d7b50c847b72ed81e3893bdca85bf46767335b41d68b62961f3304003247ed25b15e3e54d6942d35fa24b7320355d4e8e038ddcc295bbd6ef3b24e9332a710dd7ef673d3cddce10f683d0ba14dea984f61ecd580a684f3bc97cd50e14b86fcb2024367ea4e21a8d01f1aa6993a458bcbf1279fb45ec4510a9295b20e82cad0c79a5f61356509be41525bc938fbfa09306a94610fb9b9c8bae1e051bd6fc6533b8b47bcee4a9b81b492e1295c25ca91b9b5898487e468d64d275f52a6700fed0d7b593234b3e0010480e12fd8f5d7999c1b8b05c7b9dde7bada3cc6926095a8fa8747da64db55ebb3efa167b7663f1cb5883593955a2252586f942c8aa3a1e12ecbcc73e1aa5831c00e5e211c7461120f84d4482033a238b80016d71e51dc297043f67877102f69d7bbdacd03c1896bc24cffb24d4529aa7d8d4d5e5ad3a990a36e1fc84c7f8e91fdf2119a36f5b521125976ac9ede1d1b74e3a31a9428cc36c94e6b3a34ca1ddafda11ab46cb4501dfe4b58cdf384576d651b9aac532fdb97a8841d0bf58207131e0c55361d7f87aa4c8eca24c999b7a74ec23f9fdcacdf99a3852e9ca
-AD: 9516be08987911d111d30398b1d730d6c7d0bbfcac487e9a810a9a17ebf0bde09b3dd7a9a430a3bbfe41b3b3a146fd7960870b1b28db45111c71c6c9ba731de849382d679ac46be434e2e95fef2b04ccaf21afa763bbc15e23ff44aaff7ee793941a8954e42917f759ffb0745c34e9cd324e9c527b6560e52007e46ce0d46aa8165a0e6885e96ff7d6d84d186b313cf7b726213bf9c3fcc3535be589d336f84925fabe762d14ad033dff5b7f39f5948f5f939bc345c4db77d9cea9cce1220ccfac396d1e4201780f8d37c6167600a17c18cccbec04f605d86dcbc3125dc3cf5b40039c3dec4355beeffd72ff221a4de57f0aef322369c1755468b5748541049f3f1d790adbb460d78cbf5e3d2787d5921f598f3d9a92ac289b58c46edbe1c64a6cb2a796aeb17259a2569af4c19bd69da1018352b63b2b3a901bbf0c754ed3b0609227644fffa7a997762aae36ffcd700089d74cf3b9ec2f5c9a3908ace5a7048c90ed8d775a88693742f5738cf2a791e67ec747e31a1387f0c0da3a77b28b720bebeb7a9f6e76d0454f79225514a9d0d8e488a7cced170b4b89b1b39091bb470832e3d3fcd144fe86c661ed6d290c4e73fda61c708004561dc71493c9dd4a66134308577fb7cce84891458e2dc4581603898bcf74cf5da7cb1f3590ff570ec6e559d6f0
-CT: 3497d7dab267c401f6754a95b885561c8dbce6c1bdeb8c6877810d6e77afe8e2071ee088890dfa18d8b4de635ebd88188bd1ff3539c7da99905bc955e64fbac216a0776d6ee45169e9959f4aebc6ef987f7d5fefe73aadfc2c6da56155d53b795df61504680886b9ea8bc59558160d9d63e2dec0c5d7795073c04b6191c725d5a881f71cd049b9ba42333f1082ab9733fef2230cfed44c7d827a7e6a8cb07ea58cd8ce96baf00df43ac95e35eb585ba99165b9cc6649b306c3399da8a03134dd45a1b9f1e4ab3aa0399c577104316af55587d5eeb0348271d2467b920a083b4bef6a21033f8428ea816718880da3c29f4332b19030d4270d20a4271169f179df4dcb07e15db1b3d4acb2d9cc9ac90e9877ddc09ee0bdc202e9fe23a844be123fc5b08068c9a6428988de1f2f26f06beaa020f725c072c842c97fa8069d944f80518ad2276cb4aabfea20db3256d35f9533d70c6723e5696cc159127ca671db02bcda89aa17dbf47c33eb863923c0a88f3bba8f79bdfb6eb2d15fcfa9acb68018d4d33417585299e92fe3e4a131dfd123a4edb72c988796c6dec3169cba26ac712cbcd92abc4e1f327f05838abf03bcfdb218d56e2d795eab3d08d5beba1b3492e72626d86b9990e777ffd91ccb30f99713d89d0532a032bf12192a1ac2368dda2c131febae2c11bffd83311fce6d20521e92d458a285fb548ef27158e593f306d99f2e5e521522192037e94aaab02713e3242bb412b362508ff0d4823ca0ff6190c71e31f4ff06f40f8d467182ad43848ee8b8c39280d535c7cde50571f40c366d97f5de703b808aacb5a7369df763518424137d42c59d91fdd365d025f1a747b95eba9f0ff580926891e39ffa2943e28e4cb3981d2cc62e9b975048df0d0708bb7067a67bf1ef6d03692fc5501bb09d562ea9ff3078e454227ae4d6084d21e08cf6c147b205d74fa81b72c1684f60923bc024c072608ea21ce48fa46c41495761d68744953c87c6e064b33d8d43135e43fd5f67322a1d2d9ab0e07e9f8862d6d252197a4fba914aaf4092a4d499a5996d40f143b8f3eae95a5a64b23a17495834e3246f3d0a06756d80bdfee94f2c03c8e5ce0043e9094465f6a3307f8b6f098edd85f863d2de3867b644fb0ff335b83d26958c88960f9913ca3159b61391fb67dd6770321a6971e1fff607c9ab6a2765f4795f53fb8aeb26944f728dc6f66de97136b50d722affbe78e59f00cdeda54e23f46647d024f384ca01f46a39e660df4cf9a2576fa353c7b243c401b429262b14112866fad6e802ad42fa2e509ddeb1ddc70d24e4eff5f7e94b4e9772cfb52b88d81272462087a446b770db1aeeddcf81cf9075b419acf4a3c3cc
-TAG: a4b1933381318aee1af76925720ffbdb
-
-KEY: 5d44b6e557031ed28b60f3a9e73293d0
-NONCE: 3f57c9c636ff9336cee08635
-IN: 8c15ae3d5af075f8d9ecb494b00aff1dbe9703c80bb669b522a00cfb1c400598c6b494b40c87041a99d461017ef4381d3db7df5a017564ca988018c4f36282213de60c841944b6d213d8fe2015cd535184b1619866106c39a09f71a70f78f2cb8fff2f377d87390eb31b73db093000006239a8a3494a563618af189ab3af3556050b68c4abf48cf4d02013f9ed69b52d8c6bfd5188a56f4699b03f60f218539a1638c9890c7a77f5bb18d7c4ffe27314461a29c91526cff0f713a9be95b608a2ff36783474cc9db1454df62fc7efe08ca97418d982d74555c0c15fa671f99fa73559ff54ebd092756e7d9477ffdf2de14e1c9d4900fe401d1fead7fde27cd37d016cdc56464f76193af1c252d4efd60f6f3c0644ccd1ac67d968140ae08db759aa7af205563d4402927cb791f8cd845777043b975ddb1ebc66be4333b7b60293952368767aab30e1a52e1691a35f684c8587bdacc8b374963c1864619ff4a204753b44860f595ecfb275dd0b94153a065f3cc3235a7525921d16684524794cf45a9902364c80ba5649b90c1b42ecf2f17c4e3b7a888c6a2cb30240c6baec3170b309714aae3005846a19c6292e5b7d2772af24f14bd7f6cc7eb89e0489400b4c18b9372aeacd92918e4b2d11165f2de062de882f42ee7c4b5ed2fa54f66d0b4dae63db4d9a777b404b1befa704a48a3be7b8511fe716f77c890fea23fdd05a9d4a57eb0f130d7383a023ec6668e6714f84337dce5f8a9f46b9ba17480288fe89752961c6e7cd6d32d435c5930d5228be9aa002f01f0ddc79bde0abd76e4294563d5410c81c56644620a002a7facc871ee7b5fc73ed03ae0cd253439688cac4e6147fff75fad37ddd52971895702dc280273b8e7e99f8d1e93a2712bd9a6515c9b1dffcf7800ec13e08cc732a15ed3c51ab8177b3b1b1dc25e387ee2d0a69d7e2f7f77555bdd75a75400bee511dc5c30aa7eca46b05c9af4e94adee1c0bd84085af86a85a15e81d607ffcd6f7670bc11705b46e43b6beea7e1eba5804e24229185b15fc1fcafaa7de15ab336fa2ba7d94852f20de7543b4acb4e75f523863649578527752050bebaba444fe6b57c0304cc4820f0034f66b778d907264e5b8c8c0357648875dea1506c00413109ff2f25d9f1c3aea724a5b7f39ea1b08b9329c07dd8b0efa2e0e6fbf3f04708b833c2e14b6f5400b4b3d6463bc256e42c8a427f7a0d8b71aee9825169b9613dcbcf7cc364a87ba64e60501bb01d8f55eb5141ed945666f69b536662705d12f3839c45917ab7c932b8609a97ebbdf042fafda951753abc765002ae60eb1c9dcb2f95175ddae0d5b344a78b60c327676e4ca2ac1ab5333899dedfc91f66f4f8ed83130f197a6f35def3e8e2c6598e6c0a8ee
-AD: 6b0da01dcf6d8aa5fab8310cae71d02d2ebbbff4fbbada8a7db0725cb2e20723d2a3e5471d05b2319f571ae68ec953f26ddc167b8fe8bd801d6c58730f4dddc6c94bdb1e6d1e0f11b6d59e28f145e75a3b4d7aea2f78eec4677c8be45307910c67ecc10fed65ce585c6addf789ce485033d82e745f91472b7103370b162bc60504dab311ddc428b141c105e9343c2cd7527e43baf01b9bfb4e1b85918bd596696b2353425d03941d9a5aa6d72c57f1c42175b4120269551db41dec9b893d24d76a503f13ac1095ff824b0c3f7836e8b934b112440fb8157d35cf92c196de10fed9046722f83ad58546c9b27b9cb6e853dfffd89ab7724e140c0f1326302cb2224f587e6c7f27111e97ecc0dcc7d89a88e133970a22e4aacb12ce388393bed30d263ed1c080c1d56b0777e7ce2ce19a6b8db174aced748f71fbd52dfd415ef6fecba1e4ca7f207757967b3a6ad1c2e9f7c6a58ddae8555205e5c6bf64b209bee6372f196682db52dfbb37440be658d1398659a3b779843c381c5673c4eb97ce0133597c5667fd183a78e5daf15c56ad726f6d368dcf37ea737af668ca7131d4027b6260c748822e7a387b611ccb6edc4860fc4302493e66651772a39f5c98f46da64a9b1219babdc1cf6ef4c6557ced9b85ff3b918053dac001fbdcceef7485953527e1181670e62886f46371d2
-CT: 68b1872409e4d6bcc2d218c7a844ec2a78969d25b766a5272ee09a3f0dfe20abba0ea4cf75437e4b759e8586be4defc5146b303b162c4209406c93884c06a163a5743fa6ebb8f649ad8de37194633d18fc4d0bbbb1c74e8297f48e1f532e5ef9ee7c15f07b2e96cfdbce6f583e267658a795ec9c4dcd9916d5dcc08fb5c28277e56dd366a26f92f9680930d63493e2995ce350e6286c2d597273b7ecdd27d2c05b725e32d6c48f7f577ed4098d318fb822cd6413437c44a9ec8feb54959a2e6403484a8aed34e0527cee6838844dc987d933af12b370cc888b6f6ff2a25754caefc1c665751321ab9b9f19bfc17e6903c99dd87fd502065a8ecfc1c29950dd0007ee2f9c3fc752cbe7e661f06ff22a266f564e351a7137a1b96616e31be24c7a13e62b04646ce0a68791e0e1a099b862435065cf7d3203fb32d7d7d8ac4a77642d69f7c27a46973b6bedd5e840f887209d19cbe50504c0a251056c8a83100092a627f73edb421a3f1aa12edfc78d3fc474cd2583808e38d63baf1c5b4b5cb34665e10d4af806bf3abbcf4432df6c9caa76cf0e17a5e0e9af7c8868daff22d84b7b6eb4f299b750ff18b9b17d7412ccafe3e55e5b02af9ad87c03799c2282a9c6377ba42e840440d8c1b19bcd1c8fc35f02fc505a3ce97562b9e660fd488b53c30edb98b91949188903ba2078193c2de05e61c9da7bc056624104471a8231b7fcfdfda4d804b8819888a2c9bde680bae59e438d89778c5a04dff214e9b14ac5b031c378c8beee5ba9b1f91dba760d7621c24c30aee28c4b49e183632d8b450ee6895a47b96cc3c1917af685905691d1ca588db5a21674391238d76ae101c3e83d94dfee4a0656baf4d6cf277e0c7b0512e4ec13d12a5af44c7d19820fe7a74f5d5875321d528976f35a5634e15dcb35a54836370569d5609de0360ea4d2f1937dcb2d68b20cc5a04c13c04d5379a7dcbcb6b711712d7b3b20d255156b7e61e99803a4d767f0438c4fcb166920744c20a08e48dcf5de4ec325439485b51e4c0f08cd22ecf60ace34b93844c2c12bc7b46a8f6b8dbf4de311f1039504a46d9616b41fd58388f458bdb8bb9821a33379cba4f36b416c2eae02f42b736c1cb6e673b9b9dbd230b6a23d944124469bbd2c545f5ab72fa4b3a47b4d0bb0271d615de6c7f182cc92165a84032f59c14f181c093b017a1c7e5887db249b5ea2db39faf7a3cfba08538b91520fc1f3af697c5f4dea7274cd86dc073920280b488a3f66969cfea020a312be1fd111c7847296ec5f5cc91f00188c07c05e4e49cd0667ee16345f794219ed3a80602cc11940aaf9a927805a040419abd20ad8ba0a05c7ca9936997549ed5a3c7e7d9f582c735a424895c5f1aed9a3a2ad3cf7d9f32d3e
-TAG: aa69fb97b939fb73703ad4cec6c24fd6
-
-KEY: 714f39851c1fe09297c8c69dff0e62be
-NONCE: 3383bb6aceea0cbc71cc7783
-IN: cd1fac364236fecd9fd8aaf59de7680afcf90de01e9adeae58c034c25c8ed25b58e82e4fdcdcc2e69d1054dc753425e98cd50644eb74b1b6d62c769b61bf74d41a319eb35878bc837bac60af425c0a36b150655ac82f8e8fd61121790a3bb9389e121ed0fbb061cd593603a763e0b8ecb357b5c453b20239ad2e44ee0ef0e4cb717db95613c3be18aab77c708f5e91af8006e11b6ddebb8b0ef98c06dc3c97d008e058bf3e534582c24a1485f68214cdd88167814802c89d5c07a7453aff1010d6db0b778d9d8fc64b5bf3bb84cb97cef38a4b30a7deee12f0af806833c8c6d35a7f995b414eb0d9a900e3e56afaf2dd0d162063c4dd52bc6ffa56cfece2ed90bc7c9f4276459c9bd128ee40a5aa514de786ec15d04a16adddd64c7613ec9eed738fd36e24fbcbdcd0d3318fab948f47314a5400d71c5ee07a8c1fa17e4a4c08f4a467291cec1e8266342a42646d138331b08498f2dc3fda0374ef736d05c2a363fe08dc71ec799f0256ac9114743f40641ed8d9a039c57cd409bff29bde518657cb305a875cc6c0a58fe9ea3452df3e3802cf316a0c1f477179f6cdcb39c7c9424c07997500989a600887dd9f04c92226df10e9a8301818a5ec2f0b7b06b6d1443dec46f478a9271498b956b72060dd2b3021b004358b7eb6a083ff2facc3e9500278352790ccb6f9df67dccf7a03c33a34c6f33c1b4dc4ced2d5f69e5f68e79c582bf0db7751b774019d9399329f1a6692c5c527a646c9bb866e69d4f1ba4e6065cf0c5b09e941c5bb6e96d7edcb19a5cc02411507701b65987dc206ffbfaba4f06cf394976bdde1ac343e368ec1083813417cd0a325aa0e88913958974fcc911478a460b79b9978e33b21064ffdc1fc4df1e314948df71af9a6e0a40907e6b35ec6304bcaada85b456298637b6fa582ef331e2815fef135dcb66870107b2149c5aaa790f7127c0f0819b83bec46c0f6d30edb61b6fdf4f35f4b5345f1c684f41eed8088aa2f1d42c920a06092058e7c225d10fe1e5befb4dc593badee754fa12b843a6e9f67ea0e0616eaca697b22f526fb79a2ec259076971185678aaebc6449ba3bd284230ee621bc02ef1f5ff23651a6116cbb7770ec7385a44f4d54e7cb04aecd59a99660a1021eb6abb5d2cffd76e6e7380c22d0224e499e0c7b69aa0e7dd6deb47b22b1f1fb882dc35eb944a495fc3f6345b08da8f7185c3be95952bd7c982d9c8b2410a1cf1f5164961f6d1db6160d252e631f77b02d4e23dcd655e7e875b9b703fd27c57008184772c73fb5dc626ba43f54cbdc2937de7b4c470235098cb0a3e699baaa8e2adc09f8182ae1f168aa86a790688795003c3598293ca269a94494f159c5d19a22469924c5fbfd198b8add28b37cf7bc3258fb4b906f2ecd672f4fe1fd1359a433240225
-AD: 1d90b2e081fc4457b3387c1033affd15747b79dad1d6d3b69c076d4dc5c209ba1cdd383a5196fc21fbc49fc65c69b85ec299b1daa26a4bd2e5ec2559cb230b21c3bb62e2831830a2b86da2abaa289d98eb04eaf3cf8d583ffc7291c3201df2c09b7d900a4bce0972e390fc980eb67cfe654ba3b9c579f997e319496b57819b36dd2b4484b88ea3cc1ba777b10ecaf526a08afd9e2b3b32b2bc02932af5d09c2ee3fdcfa18d6261808e418c4bb80be4315a5581d405841341bf2775d8d0adc21c10b9ffdc0ea4b22e22f61b46f844d8caeda0aeb7e1c3f84d337898af24fa68d60e2f19ff815713e1587e0d6e68d64cd088ed432c45637e1767913343d899b2f8c01bdb83253219878a5b3a4e6166e02387124e711a56e49da1893b4f72198c6339943262cdfccba33428009dff70a0c8c79af248d081ca04edb2ad4f35ed1819f0846dfade107c7e9f4094c014087c719517d943e524b86047d24aef8b901a7b1ec4e839400b717e758520cfc7a2dbced0ef491eef6aa2695b2ab9a92296b6e75251f124168c36a6555c4a465cf84a7b36f3277859dd5bb0f10f84cbc944b87e37b6b8ff6958bf1f0546839effd30995853c734a11c062414fe841113d0ae62597cd12ef80dbd4dc4f72e065171c8394e45dc6f87c86154e9846c1eb58f560b8c503848eacf05107c445a6a06420e67e2297a9975d23
-CT: cc11a071e11cf36750fad572fdfefa377b8f0ed6cc47bb8015cb51f0eeb531e5779d233ed224022c5f7ff3181ad1d6a9f7564f41ee919f0435fe49b4266157a68061a1c5d06d8a8075b55efab8c9530266955c179f0a57684459835931cfb2eb1244a730797dcfcd31e7a414ed42990e9a55d439fbb803f2828f92cffb247f8d96896f9b37ce2d029aa15873bf13144cf35eb70d8e27a013513774ede1d37e4aa007a48a12f37385842cb716f60401f638efd2841db6165819eb3c2c58708d92a454344fa64c2d740cb34d4b7dbbc1d86d9e0083432e0e90c074b617402b68e3199d6fc43c454a842da725b49eabf8459b4db90e6553e17f979fc8d6bd03ac382f3a85eb40b64e21787e8e8170372eb0202fd4d78b39fb940829e11270bf6ccce0fb28adcfa8b60659e54a03c7b22491c62982e5673d66791bf6db75edf3836449e918b0c9059de644039063d78b66769d8358349acbaa7f1bef02fbfe49be375f652952f66665df26964b8b8b327683731cf825ad45118fb98f119db977828d96618a4a2fe82105eba7d1c3bca35775dc57a207b5b07c24305829d911bd7d30e3c19b030f6d34f6858593f3a0dbd928fca4b1ca21ce9ea8b63b149aa444bc696864fe2bdcbfdfca33a656db422cd007649d3a3e895b909fac7f9f0d9b15920b1d9dbcb343a2a0fd9382154430f818a9b347dda83e1c1038eb5259ca8714e2f8d3ec13c8c7a96c537fe599b30fe8780c82242f674817e815d56c92e765f3c67bb9591e27640d4880e04fc6afe5f1482422b0de4282df77df798ab7d32372f22dd3dfb0035182fdfd524dc315b0c7607639fcee3b1e12421025964a27bb5926f28c97cd7d74cdb26a779b656491f057eeb3be3eea0097b787ca5d1b1d5abf42fe76b16e565b2c1d15579e761efdcaf04fb18e7a97215e4dd53a164b336921390fed9c4fc1cd0cb0825d4b5c7061db0f4f1cdd950f13646c662bc6837ce2e455bee1758a59fec54d758eb49f040384f27ab6abfbeb7ec52a1a1b3ce63f6b4ded32a41a64b8cade579db95b7d90dcb875e83424d03e9f3bcc2dc45952860f1845632c7550802c957657c9342dc32c64c558944fbaf5f2b6a04b5d48794d140bf4f9de2fcdb1b77a0602f1c97fabb0f2b92b05b6894e665a8fad01dfb2764f673f61b9c6cae68272a5b12a9a8347782c69f5f9c3d4ff932cd713a1e2a49759114563d94261ebd7c0a723a5837a1912cbcc98b6481f6d7bebaf29276bbbd6d0a83bdefe2a0f3d4d60d88d4575e3cff73eba09aa290c2060434f85955597a3431c376f64489f50dd9d1be65b72158b1d6875649da95579b5c88e3d445c7bb95a4ed9452e18ef33bd7dbcd25c5ad6c769a651204e082026742b15b49554133e1539fc516089ce27940c89eb1a68846f13f3
-TAG: 26c14eb5587ec540185a067635e64c29
-
-KEY: a406f8b8ee46d958d10d8724d90bb26e
-NONCE: 2b38be1c0e8258de3a095418
-IN: 26486ad28af8f2fa8c7befc95510589baf81a88f3823e87eaa8e40759cf0853547301de1e87b2eeccd76967bb364278174823c1cb1963f34fab537915031cead844dbb1c614eda56e9952b1eb4cb153d06c59c8da3b10af499b1c15ab0f03559fea13b81bd35fa5eb9a5431e12ab87c3c094861154d3d8eda448af7e15017103ad3dc7e9991b10cbe61cb33d2ff90121f4e40bd5d9e9c34b89679b6e1b54e38f00b128093af3e4ca9830a1a4d7a5e9db067c9c51fa26232945fa3e1e31e28c5000e1965cc7aa11a051305e68be9d60fb92f46eb2b701b3f959819f525ebefd5339bebfb64636d680a2a4f32afce85e287f8936bf62676c37ba810754186e30b812b1196e8661e345fb5b09b8dbe5f96e0010c5e3dd0a4e983149f4a058437cd46e3b32ca04c51ae3a4a39a7e15768a8fc379563450c616a5c7d7d98c46c0b934c894727532a9e713d330d294a2753f0f46049c88eed68711e9c49632144d5cb14d76848a6f7741d36c969edecdde52cbfb57a628678d31befa7ae3198343deae760d5c92c31f3c045b3e932e9051cd201d2dae66ca0368b94445d662acd6442c39eb945c8a4b46129a8cf5bbb2b27927729406f9b081695ce148a10226bc345c648fe557b7f8db4604fd0704831e5bdef6694afe716ddc3a8d69ccad4113ebe1684346b493db264417cde9c0e48db46aed1984f72903e94b72cc2b2f151fec80b32523f96f61485f026d63734ff80015a1cad4b21ed1ba057627b387eaecdfc6d7a195b7d46e485bc137726d96c4ba51e1656c3f234174759ad922f3493077d65c149d1e871855490b6fa5924f6270cf15920838b66e3250a99ff7a55ecc9944cf3fd204081a61ce05bb989e5abeae4b2f24801e7f2223d5ce05c2b61f32344a0370c22751293bb898061ff50d6364ea0275bece795be21c9dc0b2749ff68a6d15896d4692474bd46fb256d1d012e45e7a58d880fba240ac6b89d2087da1ff7d41df44c768fee5bdf51f36b090bbf85e7ecb69f61312463eb0b4b1a04a153f593f8d43f62ac96f76e13ab5928147c5e63788bba4f076d12eb6dd15842e2c40fc9f1ad5dcb80bd95d9d41222953776b3304badd650afc783b7342196ab551a474579d95f826f53d15b96ac98a10c2c6d50a7b9b947cda9fb8d8d7dc7def72c5283a93112d2b58487a25debc9ca06946bb0a52a1e4ed3bcf0fb8decae49fa6607c55501f01b7441671f08c814023f7d46f4bc596d709d305ce320b1b0160bf35c8f17622c65b8e5c97b3fe7327e8e22384f6c400e551dd438d6d3d0f9ba6101abd1bc2486ba249b4cc83c47982c1210328968f2b28e4a7c4880d598d5b47aca2093965622ba7b4e4062c86d81070ecaad93d5e47ece22480e24a29b2910b227930344f6a00916bb215e57e1f3155fa9437603fabc6a4c6732e0887f40b5017de
-AD: 54e46035c45b6ebf14c5088c5f15f552a4d233de7d3750d7736838a5cd4a7b41df1b71e6c5e6a7dc63519ec43bcb4fc603168352b8b8e261c15e76e73556aaffa32193c1f5641b2eab29497c80eb06543c1b0f1787bc616a4e6618f751dd0a2b28a87fcabf405e97efa91becc8ac1b036a2ca244e13dcbae589f0d6bf8e19bf91caff673f2a80de93a6fd5da1e63516e2760ca12a64c8175071de22b26ce72ff9e15e5c55fb253cae55a3f48c0b507bfd423f66ebdecd0b6227d0e67c4347f2a4819a6825dfc2651e97c1da629e92bed3827a15dec0f0c8743731baef8035fb0a790f49e5b2a7339485df313a9633496fd9e7a9904ec566bf20b8dbc0e3c1e4572411da7835b5eb5cd51313b78a1d6ed96bd9aff2fba37e86d475d95fd7e14c6fe8ab23645b15e7823b7bc9d0a02fbd9a43c05a6c660b6690891c4d055af21b50a5500d72c91695536eb1a3852caceae05803486c64535747df691ebc62e888bce8a5c820569b3d80edb4e29027e737fcdc4f49f6eae43b4bf68a5731fbd09778d6b205bd8b3ab4cf251ff31dd94f2033118ff0c4154c78af27570d12def873fcf4de7ccb6b6cc8924dc63f8104e9a3323ddd32006d8ec3aa530818e299490dfa0a9d811fb3bbb5f624f26dd7d0d7a87a7e7748af5ee4f4bbeb150ea4078b504aadaf92b8f9edfb701c6df7ca615416f61bd770d5fc6675db01394a26f585f
-CT: 4f90cb1e30d5c2c97f46ec00cd8203ca8dc808dc0e862cfdb35b1e92a24f0093fb6b68eea43f04ff1332f942b03aa2dcbe03aafd18b292cbec3cd66d7ab26af3f274a97e599f520a6bb59f5c56fbe858821eaecc297e0cca632addaa5aee071a6cf84910006f158cd1e8a38f185e95dd7f6ad09303636bb6356e400ae70338a8eeae7c22440babe6d9595b2ca008c2e7a471e70e66c49548bab632e87ed36894c6eb97c7de858382cb060277edc91e19b288870b2a472df769393accb07f34a8cd94922582ce351da199a8c5c426b2884bba07fe38da6289ee55537952d53ffced29cf053a9e1b9b37d2e0e3c219f48fe885410e6bf78fea15719f20091e654d44c786f9494e4a71b20f968bbab6f5305af7b8668867cae10eb93904a0e3ec3478fca8d6a231c9b4b84cfc3394716b366c0b1a1bbb8012a298e3a00831791e489b7a2dac6c26ca9e5ad4ab58c4cd71215cdfa2422f49a7b30698ece44972a6dc7dcf9ac40f241085599e71957bc719dc51555312fff4e963832017371980b5087d0f6373e5b52d66d7003525cabcd56bfcc00041bb9f0522a4dc86ecb444497b97d882d122dd8ca1806f1e0c8ed3b1b4810dcfee9b2803d08f43151f5a968c18266d0b956ce26005628780a1c4fe0e25b7dd55e6d4cb6b1427fc56afb278a8cf91d83b952908c295947a5cbfa183816a9fc4400db94a5990e53d99da1694de5941364e7828515544b1074de41c253a3b7bc4b72a3a0173138a025fe758f8d834c7c814f1440407cd1a98aaf15f7f8d5055aa8237c6d93beb53dc84cd4712d0535fd90c180a40ba6cf9880d5104480c18cd9734354c9321eb3ad583caa5eb05edcf288ca5793e288436c175e56c001b473c1486bf36f9d75d71461339f1e063035ded3246166644761816559ba9cc9c26f61f6d02adaa3b4b398fb80906ddbfca2fdfbe57df724adf1f76f995ef7d52468ee2f89785d59c0c8557ab45f07e0da644c0fa9b5a9e1a2280d34a0f65b463e53d09146bd629134b12262f18471eda27ebb5ace095864abe17b95f238c0823dbd11245d89c195eb9ee65f6f97819def971189e43354d4fd811fce3c430cbd4686e50e562ab1e8de214832db1a09a64f9339b8f6dcfd53280a33071e89616148914de8b456408fc18a9f46f61a782857b1e11dfb5f956a5889d60c53dc826ab92153cdad4d935ccd978516c383371352f63edb7211c3da54cf2eafb7ee65f6aa98aa7813de42ec43a4e3c91bc2eac8cbd27fd0a39f109dcc94365bb223f9be11120a9767cfc73e2c315846b675f5e1eabad4e7a970aada798993fb2b11248be37b451a6f8be3ab93dbb0b3a181c49f0b43b402f05221bc97a6c2b5ba9d1e5860a234cbd2c7dcac97ff395ea8ad34229c3b0624eef42f611f90449476d76e816fe391edb539f9adbccd9628dac1e8925
-TAG: d4c3aab4d275dca02cd7912eb71daca0
diff --git a/src/crypto/cipher/test/aes_128_gcm_tests.txt b/src/crypto/cipher/test/aes_128_gcm_tests.txt
deleted file mode 100644
index eac9aa9..0000000
--- a/src/crypto/cipher/test/aes_128_gcm_tests.txt
+++ /dev/null
@@ -1,531 +0,0 @@
-# The AES-128-GCM test cases from cipher_tests.txt have been merged into this
-# file.
-
-KEY: d480429666d48b400633921c5407d1d1
-NONCE: 3388c676dc754acfa66e172a
-IN: 
-AD: 
-CT: 
-TAG: 7d7daf44850921a34e636b01adeb104f
-
-KEY: 3881e7be1bb3bbcaff20bdb78e5d1b67
-NONCE: dcf5b7ae2d7552e2297fcfa9
-IN: 0a2714aa7d
-AD: c60c64bbf7
-CT: 5626f96ecb
-TAG: ff4c4f1d92b0abb1d0820833d9eb83c7
-
-KEY: ea4f6f3c2fed2b9dd9708c2e721ae00f
-NONCE: f975809ddb5172382745634f
-IN: 8d6c08446cb10d9a2075
-AD: 5c65d4f261d2c54ffe6a
-CT: 0f51f7a83c5b5aa796b9
-TAG: 70259cddfe8f9a15a5c5eb485af578fb
-
-KEY: cdbc90e60aab7905bdffdfd8d13c0138
-NONCE: 9d987184c4b4e873d4774931
-IN: cb75a0f9134c579bebbd27fe4a3011
-AD: 7dc79f38e1df9383e5d3a1378b56ef
-CT: c6a899758b6c11208241627c8a0096
-TAG: 7525125e650d397d0e176fa21315f09a
-
-KEY: 819bc8d2f41996baca697441f982ad37
-NONCE: 08b7a15f388fafb16711ce19
-IN: 9b1ddd177d2842a701b794450e3c81f151f195a1
-AD: 277c372784559784b0e047c6f8b7e9efb6f7491e
-CT: de9b9c8fe09f705f558c62dc6d40b75e3aa625b6
-TAG: 52e2d2f153a4235eb6fac87ff6b96926
-
-KEY: 682769d52fa0bfeaebe0d0c898d3cda7
-NONCE: 6af0738b249d09547837883c
-IN: 3461523cd98a6e8bdddd01150812e6c58d5cfa25d385cdbbc4
-AD: abe8302d7d5595698d9f31011c24d4d180a637597098361354
-CT: aa3ecb46b9330554b36d0cf6f6ac4cf5e27bfd5f602da1b3c9
-TAG: 0ba547961eba5c58726c418f51d31311
-
-KEY: e2b30b9b040bce7902c54ca7eec00d09
-NONCE: 28ccf218e8de56ea91422a25
-IN: 483080d7e2fb42580dfb862d2d266fad9fdce7cdcdb1158d415f84b6e269
-AD: 9f06fbe67eb2ace15c8011032feeaf72fdf6d316e1e08ef4cc0a176588af
-CT: 67e1980ced4cd232ce893938e40b0798b17a1692476342e520b480a18570
-TAG: 9994185d4329cfa5f4bbeb170ef3a54b
-
-KEY: eaafa992ef6dbcc29cc58b6b8684f7c7
-NONCE: 1ded022dbc56e9ad733e880f
-IN: 900951f487221c7125aa140104b776ba77e7b656194933fa4b94a6d7f9722aad51b2fe
-AD: 863ceb297cb90c445dbcf2fcffe85b71db88d8c935158f697023e2cea103ec39766679
-CT: e0b3aaa890e45f1c39ad4f13ba7592f5251d6a02ca40fe3633651b35fba74a579f48c5
-TAG: 5c95fd941b272bafbd757553f394991b
-
-KEY: a43859049b2702e8807ac55b0ad27b0e
-NONCE: bbe8c571342cac7fcc5d66cd
-IN: 8673d6ee2903265c92446ce110d5bb30aa2dd1b1ac5558029f23974acb8a2fbf4c74858fc73d6104
-AD: f77c998ad3ace0839a8657e350bed15ffbd58f152a0dc04ffc227d6beb5738ad061d0f83c2a26999
-CT: 40e201a513979b093637445275b2db5ed4cb1fa050af0e20e43b21af6bc56dec654541e55b295b72
-TAG: 41bbef45727d19ee544fba5b360312f0
-
-KEY: 68fd608c8697243d30bd3f1f028c5b74
-NONCE: 319a210b33c523d8bc39fbea
-IN: 2c088f38f7a58e68bdd92632da84770303cd1ff115d6364479fb0aa706571f68d51be745f5c1d1b44fa1501cd5
-AD: 1417a65249b85a918622472a49df50bdb2766aae7bc74a6230b056549851b3c2f0cef727dc805ba2160727fbb2
-CT: 9d376b147620c2ac6a5eaa8ee44f82f179f61c9bc8acdd21680a7ff03acec953437a3cc9660c7ecb1204563944
-TAG: 05a4fb5be11e3edd89e34d0b7132d0fa
-
-KEY: 6edd3bd2aa318f78b4a51103cb08d489
-NONCE: ef0027b144691bc9716fbeca
-IN: e98f2f99680dc748fe0b57390df38a99950faaf555a888d463d005ef4e4b1c22663d3d3daa812b20ae35ac934c2e187cbba7
-AD: 97337902507391de0f15c88462aa5ffc5e4760543850719ccd8a0cfef89484d8095c23ff8c1d06eae4ff6d758c95e65cc3b5
-CT: 3c54842c2099b73daa9c3f1cb64bb913c0527955d923510f3f3046df471c1365db97333bc5a86dc7c5f23047e938fac976c0
-TAG: 375b2a25421434e5e3a021d434fb2d04
-
-KEY: f70482d53d3ef70cdc3cd3c4a37aeb2b
-NONCE: e69d3de363e225749cb1666f
-IN: 4cb68874e69125e1a6f6e68669b48317e1b361d0f7f95ec4cf613b7da2c835832010e8f95eaef4e6800b79bd86cd7cda869d2df258c267
-AD: d72975f15721bd0957f5cb1edecaad2d1ef047afb0e779035f777f94cd7ed1bdf8ca9d4f357d2a1e195f195e7483dea1476133235f7e6b
-CT: caa1e48decbda18e314057c5ec32f8733a5cf03ed0d05c3654531bf56faa70751a6c7f70fbd7d39f7e9775a772aba8fe7731cd0230beab
-TAG: 47d909cbdd1c7f8b485fc3232bb7185f
-
-KEY: 98a12fe16a02ec2a4b3a45c82138ae82
-NONCE: 4b3404684825dfcf81966e96
-IN: 899710fc8333c0d2d87f4496436349259cf57c592e98ec1e3c54c037bc7ef24d039a8c573ec7868e8ce9610b0404ea1b553ae10cc8cec26468cc975c
-AD: ea1a99cee666bf56c8c3667ef4c73c2e1e6534800d6e39a97de3bd5d39068bb3e2f74f96c03463afa18f1ee88c21209bae87f37e5d0269b68db370fe
-CT: 0431b7fc4889ae401eab5edba07a60f9682fe58419d4140cbf4f20c62d79d8a3cc1f23fabead0e96e1c8c90929756ea1efab508336e1d0ed552eafd0
-TAG: 01053ceeb4f9c797eef9426930573d23
-
-KEY: 6538e8c8753928960ffc9356d43306b6
-NONCE: eee386a2b1e310665e335746
-IN: a92eb9a93a90fdbb2c74dea91d273a48efe9582f8af7a4e3a377b114770a69ca45421959fcf36107815e53dc61b7bf018fc42965fb71d1eafce0961d7698fabbd4
-AD: c5e572e464718398374c8b45ff8749cd9f517bbd97767f77a96cd021176c49c0acec8b055ef761f49aa6d910375a45b2f572cd5420b99153971a682b377ac88f09
-CT: f36353de609d0b5246f64a519d89a4dfcd9d53325a2d2cf910e7692e68391b0357b056b944e0b53e41568f304bea8822f9ff7a0375a5a8087509799226862f707f
-TAG: f7f9b891089d02cac1181337d95b6725
-
-KEY: cabdcf541aebf917bac019f13925d267
-NONCE: 2c34c00c42dae382279d7974
-IN: 88cc1e07dfde8e08082e6766e0a88103384742af378d7b6b8a87fce036af7441c13961c25afea7f6e56193f54bee0011cb78642c3ab9e6d5b2e35833ec16cd355515af1a190f
-AD: dd10e371b22e15671c31afee552bf1dea07cbbf685e2caa0e0363716a276e120c6c0eb4acb1a4d1ba73fde6615f708aaa46bc76c7ff345a4f76bda117fe56f0dc9b939040ddd
-CT: 049453baf1578787d68ed5478726c0b8a636337a0b8a82b86836f91cde25e6e44c345940e819a0c505751e603cb8f8c4fe98719185562794a185e5dec415c81f2f162cdcd650
-TAG: dce7198728bfc1b5f949b9b5374199c6
-
-KEY: fd1dd6a237a12d7f64f68eb96890c872
-NONCE: 459ced97ebc385ab3a8da8d5
-IN: 04a9709fdc0a4edb423fe8cf61c33a40043f1a585d5458c7512ec8e4e066a0f95e2e6609abf3c95a5d3ae2c738269533855daedd92eca20bdedbbd5677cd4eee84b7a1efae0904364f1e54
-AD: d253b829a2fbc5877b0fbe92e7b79f38886a49ca889ae72b91f2c3aebe257a3ffe0d390b5d320bea22d6a5536cd9213612f5ed6e3b0ea33ac91cfee284cb25eaaf6b85b15f7ca894317182
-CT: 4a565d3ba4f2ec461c9bd8dd0f96bc00d2a561bfb56443c8cf47681bdf1c61f55854bea060c4219696cac79c09aa9400a7e5c59c6b6ca556f38c619a662905fc5f0e8437b906af6138e3fb
-TAG: be5f93201d7980af4c5bceb24ac1d238
-
-KEY: b09a4d99112e1637d7f89a058988b417
-NONCE: 74348f7126c0cac836e9de5d
-IN: 6b3c4cfd1eb139b62d91ed5d1d8b0f3b52278d5c48787ce46f12b9f026e3eed1bfbc8c6684c6662f06614c69440b3d7cff7c46b2e4aebaa4b5b89236a3cc75535bc600104f240d01de91e0fb3bcad02c
-AD: 7883ad259fa5d856ce283419f6da371b444b9b64ea0ddb371b17ec0a9ada27b0eb61b53bd3605f21a848b1e7ed91162f3d51f25481f32d61ec902a7f2cbd6938a7ce466a37e4467e4ec2b2c82b4e66ca
-CT: 5e1b783b20fd740310333eddde99a06b5740428cb1a910812219fabd394b72a22a6e3ca31df0afae0a965f0bc0ae631feeaa5ce4c9a38cd5233140b8557bde9f878e65e8932b9e3c3f6e57a73cda36cc
-TAG: 784b73ee7824adf7279c0a18e46d9a2b
-
-KEY: 284bd8c4b5d7b16aebce1b12988fa1d3
-NONCE: 7ff05007c5d018b17562f803
-IN: 903416331583dcbd31420906c64dc76e14d0c5044d728cd9b605b531ddc350fdaadeabe67d08f0b4c7179f82a1044696716cd96459506453141e9ec3130e893d8c2ff9b8b4c241b73866ca4fc1f712d17d7a88bf4a
-AD: d0a1f92f80094c1fad630ca584edd953bf44cdde404f22c8e476df8708a97a0712e7fbd8054caa7d65144d0be3b30442d0dfa5469ba720afe1d00aa6bb53c79c1c178ed42fce596eeb6c638c8a8dedf76a431976c5
-CT: 9bc3708f70a68fc16bcc33099325c821a0ae9a2fd0a6a98382fa21b42ddb3a9ac6c34a13c4805d3beb92586cdf0f4dce3885793d49abce33190685e7009a79242dd93594722a1ceaa44886371c30bcc8312fa2bf67
-TAG: 3fd8a4d760d5b878852b1ca2d34dde6e
-
-KEY: 6d76dd7dea607a5cf5c21cd44c21a315
-NONCE: c1d13e56b080a500f1cb80bd
-IN: cb959b92e777f835afc4ae4149b190638851238b7b13c9bf65343adb3130e8ad2356101037f30997d4a5fcc0a1d6415210179fdec881236a799f6e90dd43ea3817819b432611eaafd072368b9c7036c7a88c8b7774a8ed986134
-AD: 92a2bc3b6b6ca9de0cef10d8bdeaadf6f54782cdb2b09e66cce8cb5b56895636e982f7a3c7bd9d221ade62c9ecf68bde70becf683804386606ab1c48ac764c4e11620064545c5beaa5911c118856dfc5cdb8df50052b01762c6c
-CT: 522ba9bfb47efc624cd8933fc9e17784919d2b3ccfaeec46af414c1b316355f65b9f9fd7f0be6ac3064b4016e43b8fb2028459f0fa0d81fb6656be0ab8fd841d05d24682b4a57c7c59d89af384db22c2f77ce10abc4d1c352a1a
-TAG: 5ea4a77381679876e0e272b53519d533
-
-KEY: 1dbcbe45a47e527e3b6f9c5c9c89e675
-NONCE: 98f2da8ed8aa23e137148913
-IN: bb23b884c897103b7850b83f65b2fea85264784737d40f93ecf867bfdba1052f41f10d2c5607127da2c10c23b1fbd3a05ce378a9583b1a29c0efbf78a84b382698346e27469330a898b341ec1554d7bf408cf979d81807c0cc78260afdb214
-AD: 46f1bde51f6c97a9dae712e653fcac4da639d93a10b39350956681e121fb9ea969d9dc8ef6ddfb2203fad7ab7e3ef7b71eb90b5089844d60d666e8b55388d8afb261f92b6252f4d56240fe8c6c48bfde63e54bd994ff17e0bf9380ebfb653b
-CT: 0d90e869d2f4c85b511fdf85b947ba3ab75c6b1845d8191634770413d7574a6fbd9d86897cb3d3b5d3d8e6f74fac3bd2a9b783cb16cfbec55dd7d2f7fc5c39fe85d39bf186a3fdd3564bc27d86f4019ae0cb73f5f516b602331433689c1b08
-TAG: 8777f2002d5a5214a7bd8ef5a3ccfbbb
-
-KEY: fe33f47136506e5cc14114eb62d26d64
-NONCE: 9534a10af0c96d8981eaf6b3
-IN: 3ca38385513eaf1fcd03ac837e4db95c0ed1a2528b7ab3ac8e09ecc95698d52b7d90bf974bf96d8f791aa595965e2527aa466fb76da53b5743eda30bb3ebd9f6a8a7721fbfe71fe637d99a7b4b622e6da89e0824ac8aea299ea15e43250d2eccb0d4d553
-AD: 50b7bd342df76bea99b2e9118a525c0f7041c7acdf4a3b17912b5cbb9650900246ed945cfc7db2b34a988af822c763451ac2e769ec67361eded9bcab37ac41f04cdb1d2471c9520a02db9673daaf07001570f9d9f4ac38f09da03ff1c56fdefe16a855ac
-CT: 927fe3c924d914a7aae6695ddad54961142b7dd5ff4c0ba5ca3e0cf3d73bdb576afd59bd2b54d820d2a5da03286c124507a48008c571c28a0ce76f0ed68dbac3a61848e7e2162be8e0bee8147b9bf60da625cdab8601bfb37dfcd165f533e94a32c26952
-TAG: 9bd47a4a2acaf865a8a260179aabf8ad
-
-KEY: dec1b34b7b81fb19586c6ec948ecf462
-NONCE: d9faf07e72e3c39a0165fecd
-IN: f7b0bbe9f0ff4dcf162792e9ee14d1ed286114f411c834ad06b143cadbbe10a6fbc86f6664e0e07ff7c6876d4543e5b01ff5ddb629f896c30c8cefd56c15d9f24dfd2ed590304a6aae24caac5870ddafc0e67